<?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>16561</bug_id>
          
          <creation_ts>2007-12-21 11:48:39 -0800</creation_ts>
          <short_desc>remove debugger overhead from non-debugged JavaScript execution</short_desc>
          <delta_ts>2007-12-21 13:56:05 -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>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>64974</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-21 11:48:39 -0800</bug_when>
    <thetext>I got a 1.5% speed-up by putting the debugger code into separate nodes, only created if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64979</commentid>
    <comment_count>1</comment_count>
      <attachid>18037</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-21 12:29:40 -0800</bug_when>
    <thetext>Created attachment 18037
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64980</commentid>
    <comment_count>2</comment_count>
      <attachid>18038</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-21 12:56:14 -0800</bug_when>
    <thetext>Created attachment 18038
improved patch; 1.022x as fast SunSpider</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64985</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-12-21 13:31:52 -0800</bug_when>
    <thetext>Is it possible to break out the sourceelements change into a seperate patch? it makes the current patch somewhat noisy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64987</commentid>
    <comment_count>4</comment_count>
      <attachid>18038</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-21 13:40:31 -0800</bug_when>
    <thetext>Comment on attachment 18038
improved patch; 1.022x as fast SunSpider

Looks great.

Two things:
1.  SourceElements::release( needs a better name:
children-&gt;release(m_children);
that code makes little sense at first pass.

2nd.  This now changes the behavior of Drosera so that you need to attach *before* you load a page.  We need to file at least one (possibly two) followup bugs to this one.
1.  Add the ability walk the tree and swap in/out break nodes for when the first/last debugger attaches/detaches.
2.  If #1 doesn&apos;t get done soon, we&apos;ll need to teach Drosera how to recognize that it&apos;s trying to debug a JavaScript page which hasn&apos;t been parsed with debugging information and display a note to the user to reload the scripts (or just have it reload the scripts automatically)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64990</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-21 13:56:05 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This now changes the behavior of Drosera so that you need to attach
&gt; *before* you load a page.

We just checked with Tim Hatcher, and it turns out that was already true about Drosera.

r28937</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18037</attachid>
            <date>2007-12-21 12:29:40 -0800</date>
            <delta_ts>2007-12-21 12:56:14 -0800</delta_ts>
            <desc>patch</desc>
            <filename>DebuggerOverheadPatch.txt</filename>
            <type>text/plain</type>
            <size>29676</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4OTM1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODMgQEAKKzIwMDctMTItMjEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1NjEKKyAgICAgICAgICByZW1vdmUgZGVidWdnZXIgb3ZlcmhlYWQgZnJvbSBub24tZGVidWdn
ZWQgSmF2YVNjcmlwdCBleGVjdXRpb24KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDog
VXBkYXRlZC4KKworICAgICAgICAqIGtqcy9Ob2RlSW5mby5oOiBSZW5hbWVkIFNvdXJjZUVsZW1l
bnRzU3R1YiB0byBTb3VyY2VFbGVtZW50cywKKyAgICAgICAgc2luY2UgdGhhdCBtb3JlIGFjY3Vy
YXRlbHkgZGVzY3JpYmVzIHRoZSByb2xlIG9mIHRoaXMgb2JqZWN0LCB3aGljaAorICAgICAgICBp
cyBhIHJlZmVyZW5jZS1jb3VudGVkIHdyYXBwZXIgZm9yIGEgVmVjdG9yLgorCisgICAgICAgICog
a2pzL1BhcnNlci5jcHA6CisgICAgICAgIChLSlM6OlBhcnNlcjo6ZGlkRmluaXNoUGFyc2luZyk6
IENoYW5nZWQgcGFyYW1ldGVyIHR5cGUgdG8gU291cmNlRWxlbWVudHMsCisgICAgICAgIGFuZCB1
c2UgcGxhaW4gYXNzaWdubWVudCBpbnN0ZWFkIG9mIHNldC4KKyAgICAgICAgKiBranMvUGFyc2Vy
Lmg6IENoYW5nZWQgcGFyYW1ldGVyIHR5cGUgb2YgZGlkRmluaXNoUGFyc2luZyB0byBhCisgICAg
ICAgIFNvdXJjZUVsZW1lbnRzLiBBbHNvIGNoYW5nZWQgbV9zb3VyY2VFbGVtZW50czsgd2Ugbm93
IHVzZSBhIFJlZlB0ciBpbnN0ZWFkCisgICAgICAgIG9mIGFuIE93blB0ciBhcyB3ZWxsLgorCisg
ICAgICAgICoga2pzL2dyYW1tYXIueTogR290IHJpZCBvZiBhbGwgdGhlIGNhbGxzIHRvIHJlbGVh
c2UoKSBvbiBTb3VyY2VFbGVtZW50cy4KKyAgICAgICAgVGhhdCdzIG5vdyBoYW5kZWQgaW5zaWRl
IHRoZSBjb25zdHJ1Y3RvcnMgZm9yIHZhcmlvdXMgbm9kZSB0eXBlcywgc2luY2Ugd2Ugbm93Cisg
ICAgICAgIHVzZSB2ZWN0b3Igc3dhcHBpbmcgaW5zdGVhZC4KKworICAgICAgICAqIGtqcy9ub2Rl
cy5jcHA6CisgICAgICAgIChLSlM6OlNvdXJjZUVsZW1lbnRzOjphcHBlbmQpOiBNb3ZlZCBoZXJl
IGZyb20gdGhlIGhlYWRlci4gVGhpcyBub3cgaGFuZGxlcworICAgICAgICBjcmVhdGluZyBhIEJy
ZWFrcG9pbnRDaGVja1N0YXRlbWVudCBmb3IgZWFjaCBzdGF0ZW1lbnQgaW4gdGhlIGRlYnVnZ2Vy
IGNhc2UuCisgICAgICAgIFRoYXQgd2F5IHdlIGNhbiBnZXQgYnJlYWtwb2ludCBoYW5kbGluZyB3
aXRob3V0IGhhdmluZyBpdCBpbiBldmVyeSBleGVjdXRlIGZ1bmN0aW9uLgorICAgICAgICAoS0pT
OjpCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQ6OkJyZWFrcG9pbnRDaGVja1N0YXRlbWVudCk6IEFk
ZGVkLgorICAgICAgICAoS0pTOjpCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQ6OmV4ZWN1dGUpOiBB
ZGRlZC4gQ29udGFpbnMgdGhlIGNvZGUgdGhhdCB3YXMgZm9ybWVybHkKKyAgICAgICAgaW4gdGhl
IFN0YXRlbWVudE5vZGU6OmhpdFN0YXRlbWVudCBmdW5jdGlvbiBhbmQgdGhlIEtKU19CUkVBS1BP
SU5UIG1hY3JvLgorICAgICAgICAoS0pTOjpCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQ6OnN0cmVh
bVRvKTogQWRkZWQuCisgICAgICAgIChLSlM6OkFyZ3VtZW50TGlzdE5vZGU6OmV2YWx1YXRlTGlz
dCk6IFVzZSBLSlNfQ0hFQ0tFWENFUFRJT05WT0lEIHNpbmNlIHRoZSByZXR1cm4KKyAgICAgICAg
dHlwZSBpcyB2b2lkLgorICAgICAgICAoS0pTOjpWYXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKTog
UmVtb3ZlZCBLSlNfQlJFQUtQT0lOVC4KKyAgICAgICAgKEtKUzo6QmxvY2tOb2RlOjpCbG9ja05v
ZGUpOiBDaGFuZ2VkIHBhcmFtZXRlciB0eXBlIHRvIFNvdXJjZUVsZW1lbnRzLgorICAgICAgICBD
aGFuZ2VkIGNvZGUgdG8gdXNlIHJlbGVhc2Ugc2luY2UgdGhlIGNsYXNzIG5vdyBjb250YWlucyBh
IHZlY3RvciByYXRoZXIgdGhhbgorICAgICAgICBhIHZlY3RvciBwb2ludC4KKyAgICAgICAgKEtK
Uzo6QmxvY2tOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKTogVXBkYXRlZCBzaW5jZSBtZW1i
ZXIgaXMgbm93IGEgdmVjdG9yCisgICAgICAgIHJhdGhlciB0aGFuIGEgdmVjdG9yIHBvaW50ZXIu
CisgICAgICAgIChLSlM6OkJsb2NrTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pT
OjpFeHByU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZSk6IFJlbW92ZWQgS0pTX0JSRUFLUE9JTlQuCisg
ICAgICAgIChLSlM6OklmTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpJZkVs
c2VOb2RlOjpleGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6OkRvV2hpbGVOb2RlOjpleGVj
dXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6OldoaWxlTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgor
ICAgICAgICAoS0pTOjpDb250aW51ZU5vZGU6OmV4ZWN1dGUpOiBEaXR0by4KKyAgICAgICAgKEtK
Uzo6QnJlYWtOb2RlOjpleGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6OlJldHVybk5vZGU6
OmV4ZWN1dGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6V2l0aE5vZGU6OmV4ZWN1dGUpOiBEaXR0
by4KKyAgICAgICAgKEtKUzo6Q2FzZUNsYXVzZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3Mp
OiBVcGRhdGVkIHNpbmNlIG1lbWJlciBpcyBub3cgYSB2ZWN0b3IKKyAgICAgICAgcmF0aGVyIHRo
YW4gYSB2ZWN0b3IgcG9pbnRlci4KKyAgICAgICAgKEtKUzo6Q2FzZUNsYXVzZU5vZGU6OmV4ZWN1
dGVTdGF0ZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChLSlM6OlN3aXRjaE5vZGU6OmV4ZWN1dGUp
OiBSZW1vdmVkIEtKU19CUkVBS1BPSU5ULgorICAgICAgICAoS0pTOjpUaHJvd05vZGU6OmV4ZWN1
dGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6VHJ5Tm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAg
ICAgICAoS0pTOjpTY29wZU5vZGU6OlNjb3BlTm9kZSk6IENoYW5nZWQgcGFyYW1ldGVyIHR5cGUg
dG8gU291cmNlRWxlbWVudHMuCisgICAgICAgIChLSlM6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9k
ZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpFdmFsTm9kZTo6RXZhbE5vZGUpOiBEaXR0by4KKyAg
ICAgICAgKEtKUzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6IERpdHRvLgor
ICAgICAgICAoS0pTOjpTY29wZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MpOiBVcGRhdGVk
IHNpbmNlIG1lbWJlciBpcyBub3cgYSB2ZWN0b3IKKyAgICAgICAgcmF0aGVyIHRoYW4gYSB2ZWN0
b3IgcG9pbnRlci4KKworICAgICAgICAqIGtqcy9ub2Rlcy5oOiBSZW1vdmVkIGhpdFN0YXRlbWVu
dC4gUmVuYW1lZCBTb3VyY2VFbGVtZW50cyB0byBTdGF0ZW1lbnRWZWN0b3IuCisgICAgICAgIFJl
bmFtZWQgU291cmNlRWxlbWVudHNTdHViIHRvIFNvdXJjZUVsZW1lbnRzIGFuZCBtYWRlIGl0IGRl
cml2ZSBmcm9tCisgICAgICAgIFBhcnNlclJlZkNvdW50ZWQgcmF0aGVyIHRoYW4gZnJvbSBOb2Rl
LCBob2xkIGEgdmVjdG9yIHJhdGhlciB0aGFuIGEgcG9pbnRlciB0bworICAgICAgICBhIHZlY3Rv
ciwgYW5kIGNoYW5nZWQgdGhlIHJlbGVhc2UgZnVuY3Rpb24gdG8gc3dhcCB3aXRoIGFub3RoZXIg
dmVjdG9yIHJhdGhlcgorICAgICAgICB0aGFuIHRoZSBwb2ludGVyIGlkaW9tLiBVcGRhdGVkIEJs
b2NrTm9kZSBhbmQgQ2FzZUNsYXVzZU5vZGUgdG8gaG9sZCBhY3R1YWwKKyAgICAgICAgdmVjdG9y
cyBpbnN0ZWFkIG9mIHBvaW50ZXJzIHRvIHZlY3RvcnMuIEFkZGVkIEJyZWFrcG9pbnRDaGVja1N0
YXRlbWVudC4KKworICAgICAgICAqIGtqcy9ub2RlczJzdHJpbmcuY3BwOgorICAgICAgICAoS0pT
OjpzdGF0ZW1lbnRMaXN0U3RyZWFtVG8pOiBDaGFuZ2VkIHRvIHdvcmsgb24gYSB2ZWN0b3IgaW5z
dGVhZCBvZiBhIHBvaW50ZXIKKyAgICAgICAgdG8gYSB2ZWN0b3IuCisgICAgICAgIChLSlM6OkJs
b2NrTm9kZTo6c3RyZWFtVG8pOiBEaXR0by4KKyAgICAgICAgKEtKUzo6Q2FzZUNsYXVzZU5vZGU6
OnN0cmVhbVRvKTogIERpdHRvLgorCisgICAgICAgICogd3RmL1Bhc3NSZWZQdHIuaDogVHdlYWtl
ZCBmb3JtYXR0aW5nLiBBZGRlZCBjbGVhcigpIGZ1bmN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUKKyAg
ICAgICAgb25lcyBpbiBPd25QdHIgYW5kIGF1dG9fcHRyLgorICAgICAgICAqIHd0Zi9SZWZQdHIu
aDogRGl0dG8uCisKIDIwMDctMTItMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIC0gZml4IGJyb2tlbiByZWdyZXNzaW9uIHRlc3RzCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAyODkzNSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIF9fWk4zS0pT
MTFJbnRlcnByZXRlcjhldmFsdWF0ZUVQTlNfOUV4ZWMKIF9fWk4zS0pTMTFKU0ltbWVkaWF0ZTR0
eXBlRVBLTlNfN0pTVmFsdWVFCiBfX1pOM0tKUzExSlNJbW1lZGlhdGU4dG9PYmplY3RFUEtOU183
SlNWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zS0pTMTFKU0ltbWVkaWF0ZTh0b1N0cmluZ0VQ
S05TXzdKU1ZhbHVlRQotX19aTjNLSlMxMVByb2dyYW1Ob2RlQzFFUE4zV1RGNlZlY3RvcklOUzFf
NlJlZlB0cklOU18xM1N0YXRlbWVudE5vZGVFRUVMbTBFRUVQTlMyX0lQTlNfMTFWYXJEZWNsTm9k
ZUVMbTE2RUVFUE5TMl9JUE5TXzEyRnVuY0RlY2xOb2RlRUxtMTZFRUUKK19fWk4zS0pTMTFQcm9n
cmFtTm9kZUMxRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBOM1dURjZWZWN0b3JJUE5TXzExVmFyRGVj
bE5vZGVFTG0xNkVFRVBOUzRfSVBOU18xMkZ1bmNEZWNsTm9kZUVMbTE2RUVFCiBfX1pOM0tKUzEx
UHJvcGVydHlNYXAxMWdldExvY2F0aW9uRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlMxMVBy
b3BlcnR5TWFwNWNsZWFyRXYKIF9fWk4zS0pTMTFQcm9wZXJ0eU1hcDdyZXN0b3JlRVJLTlNfMTVT
YXZlZFByb3BlcnRpZXNFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvTm9kZUluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvTm9kZUluZm8uaAkocmV2aXNpb24gMjg5MzUp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvTm9kZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IE5vZGVJbmZvIHsKIHR5cGVk
ZWYgTm9kZUluZm88U3RhdGVtZW50Tm9kZSo+IFN0YXRlbWVudE5vZGVJbmZvOwogdHlwZWRlZiBO
b2RlSW5mbzxDYXNlQmxvY2tOb2RlKj4gQ2FzZUJsb2NrTm9kZUluZm87CiB0eXBlZGVmIE5vZGVJ
bmZvPENhc2VDbGF1c2VOb2RlKj4gQ2FzZUNsYXVzZU5vZGVJbmZvOwotdHlwZWRlZiBOb2RlSW5m
bzxTb3VyY2VFbGVtZW50c1N0dWIqPiBTb3VyY2VFbGVtZW50c0luZm87Cit0eXBlZGVmIE5vZGVJ
bmZvPFNvdXJjZUVsZW1lbnRzKj4gU291cmNlRWxlbWVudHNJbmZvOwogdHlwZWRlZiBOb2RlSW5m
bzxDbGF1c2VMaXN0PiBDbGF1c2VMaXN0SW5mbzsKIHR5cGVkZWYgTm9kZUluZm88VmFyRGVjbExp
c3Q+IFZhckRlY2xMaXN0SW5mbzsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5jcHAJKHJldmlzaW9u
IDI4OTM1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBQYXJzZXI6OnBhcnNlKGludCBzdGFydGluZ0xpbmVOdW1i
ZQogdm9pZCBQYXJzZXI6OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVs
ZW1lbnRzLCBQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+
KiB2YXJTdGFjaywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZXJSZWZDb3Vu
dGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFjaywgaW50
IGxhc3RMaW5lKQogewotICAgIG1fc291cmNlRWxlbWVudHMuc2V0KHNvdXJjZUVsZW1lbnRzID8g
c291cmNlRWxlbWVudHMgOiBuZXcgU291cmNlRWxlbWVudHMpOworICAgIG1fc291cmNlRWxlbWVu
dHMgPSBzb3VyY2VFbGVtZW50cyA/IHNvdXJjZUVsZW1lbnRzIDogbmV3IFNvdXJjZUVsZW1lbnRz
OwogICAgIG1fdmFyRGVjbGFyYXRpb25zID0gdmFyU3RhY2s7CiAgICAgbV9mdW5jRGVjbGFyYXRp
b25zID0gZnVuY1N0YWNrOwogICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
UGFyc2VyLmgJKHJldmlzaW9uIDI4OTM1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAg
ICAgIFVTdHJpbmcgbV9zb3VyY2VVUkw7CiAgICAgICAgIGludCBtX3NvdXJjZUlkOwotICAgICAg
ICBPd25QdHI8U291cmNlRWxlbWVudHM+IG1fc291cmNlRWxlbWVudHM7CisgICAgICAgIFJlZlB0
cjxTb3VyY2VFbGVtZW50cz4gbV9zb3VyY2VFbGVtZW50czsKICAgICAgICAgUmVmUHRyPFBhcnNl
clJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4gPiBtX3ZhckRlY2xh
cmF0aW9uczsKICAgICAgICAgUmVmUHRyPFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9u
U3RhY2tzOjpGdW5jdGlvblN0YWNrPiA+IG1fZnVuY0RlY2xhcmF0aW9uczsKICAgICAgICAgaW50
IG1fbGFzdExpbmU7CkBAIC04NCw3ICs4NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAg
ICAgbV9zb3VyY2VVUkwgPSBVU3RyaW5nKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQotICAgICAgICBSZWZQdHI8UGFyc2VkTm9kZT4gbm9kZSA9IG5ldyBQYXJzZWROb2RlKG1f
c291cmNlRWxlbWVudHMucmVsZWFzZSgpLCAKKyAgICAgICAgUmVmUHRyPFBhcnNlZE5vZGU+IG5v
ZGUgPSBuZXcgUGFyc2VkTm9kZShtX3NvdXJjZUVsZW1lbnRzLnJlbGVhc2UoKS5nZXQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhckRlY2xh
cmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/ICZt
X2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEgOiAwKTsKICAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMg
PSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CShyZXZpc2lvbiAyODkzNSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9ncmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw3ICs2OTgsNyBAQCBT
dGF0ZW1lbnQ6CiBCbG9jazoKICAgICAneycgJ30nICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50Tm9kZSo+KG5ldyBCbG9ja05vZGUoMCks
IDAsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHKCQk
Lm1fbm9kZSwgQDEsIEAyKTsgfQotICB8ICd7JyBTb3VyY2VFbGVtZW50cyAnfScgICAgICAgICAg
ICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxTdGF0ZW1lbnROb2RlKj4obmV3IEJsb2NrTm9kZSgk
Mi5tX25vZGUtPnJlbGVhc2UoKSksICQyLm1fdmFyRGVjbGFyYXRpb25zLCAkMi5tX2Z1bmNEZWNs
YXJhdGlvbnMpOworICB8ICd7JyBTb3VyY2VFbGVtZW50cyAnfScgICAgICAgICAgICAgIHsgJCQg
PSBjcmVhdGVOb2RlSW5mbzxTdGF0ZW1lbnROb2RlKj4obmV3IEJsb2NrTm9kZSgkMi5tX25vZGUp
LCAkMi5tX3ZhckRlY2xhcmF0aW9ucywgJDIubV9mdW5jRGVjbGFyYXRpb25zKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCRygkJC5tX25vZGUsIEAxLCBAMyk7
IH0KIDsKIApAQCAtOTE2LDEyICs5MTYsMTIgQEAgQ2FzZUNsYXVzZXM6CiAKIENhc2VDbGF1c2U6
CiAgICAgQ0FTRSBFeHByICc6JyAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5v
ZGVJbmZvPENhc2VDbGF1c2VOb2RlKj4obmV3IENhc2VDbGF1c2VOb2RlKCQyKSwgMCwgMCk7IH0K
LSAgfCBDQVNFIEV4cHIgJzonIFNvdXJjZUVsZW1lbnRzICAgICAgICB7ICQkID0gY3JlYXRlTm9k
ZUluZm88Q2FzZUNsYXVzZU5vZGUqPihuZXcgQ2FzZUNsYXVzZU5vZGUoJDIsICQ0Lm1fbm9kZS0+
cmVsZWFzZSgpKSwgJDQubV92YXJEZWNsYXJhdGlvbnMsICQ0Lm1fZnVuY0RlY2xhcmF0aW9ucyk7
IH0KKyAgfCBDQVNFIEV4cHIgJzonIFNvdXJjZUVsZW1lbnRzICAgICAgICB7ICQkID0gY3JlYXRl
Tm9kZUluZm88Q2FzZUNsYXVzZU5vZGUqPihuZXcgQ2FzZUNsYXVzZU5vZGUoJDIsICQ0Lm1fbm9k
ZSksICQ0Lm1fdmFyRGVjbGFyYXRpb25zLCAkNC5tX2Z1bmNEZWNsYXJhdGlvbnMpOyB9CiA7CiAK
IERlZmF1bHRDbGF1c2U6CiAgICAgREVGQVVMVCAnOicgICAgICAgICAgICAgICAgICAgICAgICAg
eyAkJCA9IGNyZWF0ZU5vZGVJbmZvPENhc2VDbGF1c2VOb2RlKj4obmV3IENhc2VDbGF1c2VOb2Rl
KDApLCAwLCAwKTsgfQotICB8IERFRkFVTFQgJzonIFNvdXJjZUVsZW1lbnRzICAgICAgICAgIHsg
JCQgPSBjcmVhdGVOb2RlSW5mbzxDYXNlQ2xhdXNlTm9kZSo+KG5ldyBDYXNlQ2xhdXNlTm9kZSgw
LCAkMy5tX25vZGUtPnJlbGVhc2UoKSksICQzLm1fdmFyRGVjbGFyYXRpb25zLCAkMy5tX2Z1bmNE
ZWNsYXJhdGlvbnMpOyB9CisgIHwgREVGQVVMVCAnOicgU291cmNlRWxlbWVudHMgICAgICAgICAg
eyAkJCA9IGNyZWF0ZU5vZGVJbmZvPENhc2VDbGF1c2VOb2RlKj4obmV3IENhc2VDbGF1c2VOb2Rl
KDAsICQzLm1fbm9kZSksICQzLm1fdmFyRGVjbGFyYXRpb25zLCAkMy5tX2Z1bmNEZWNsYXJhdGlv
bnMpOyB9CiA7CiAKIExhYmVsbGVkU3RhdGVtZW50OgpAQCAtOTc5LDcgKzk3OSw3IEBAIEZvcm1h
bFBhcmFtZXRlckxpc3Q6CiAKIEZ1bmN0aW9uQm9keToKICAgICAvKiBub3QgaW4gc3BlYyAqLyAg
ICAgICAgICAgeyAkJCA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKDAsIDAsIDApOyB9Ci0gIHwgU291
cmNlRWxlbWVudHMgICAgICAgICAgICAgIHsgJCQgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSgkMS5t
X25vZGUtPnJlbGVhc2UoKSwgJDEubV92YXJEZWNsYXJhdGlvbnMgPyAmJDEubV92YXJEZWNsYXJh
dGlvbnMtPmRhdGEgOiAwLCAKKyAgfCBTb3VyY2VFbGVtZW50cyAgICAgICAgICAgICAgeyAkJCA9
IG5ldyBGdW5jdGlvbkJvZHlOb2RlKCQxLm1fbm9kZSwgJDEubV92YXJEZWNsYXJhdGlvbnMgPyAm
JDEubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAwLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkMS5tX2Z1bmNEZWNsYXJhdGlvbnMgPyAmJDEubV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhIDog
MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgaW4gbWVyZ2VEZWNs
YXJhdGlvbkxpc3RzKCkgd2UgaGF2ZSB0byByZWYvZGVyZWYgdG8gc2FmZWx5IGdldCByaWQgb2YK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZGVjbGFyYXRpb24gbGlz
dHMuCkBAIC05OTYsMTEgKzk5NiwxMSBAQCBGdW5jdGlvbkJvZHk6CiAKIFByb2dyYW06CiAgICAg
Lyogbm90IGluIHNwZWMgKi8gICAgICAgICAgICAgICAgICAgeyBwYXJzZXIoKS5kaWRGaW5pc2hQ
YXJzaW5nKDAsIDAsIDAsIEAwLmxhc3RfbGluZSk7IH0KLSAgICB8IFNvdXJjZUVsZW1lbnRzICAg
ICAgICAgICAgICAgICAgICB7IHBhcnNlcigpLmRpZEZpbmlzaFBhcnNpbmcoJDEubV9ub2RlLT5y
ZWxlYXNlKCksICQxLm1fdmFyRGVjbGFyYXRpb25zLCAkMS5tX2Z1bmNEZWNsYXJhdGlvbnMsIEAx
Lmxhc3RfbGluZSk7IH0KKyAgICB8IFNvdXJjZUVsZW1lbnRzICAgICAgICAgICAgICAgICAgICB7
IHBhcnNlcigpLmRpZEZpbmlzaFBhcnNpbmcoJDEubV9ub2RlLCAkMS5tX3ZhckRlY2xhcmF0aW9u
cywgJDEubV9mdW5jRGVjbGFyYXRpb25zLCBAMS5sYXN0X2xpbmUpOyB9CiA7CiAKIFNvdXJjZUVs
ZW1lbnRzOgotICAgIFNvdXJjZUVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgIHsgJCQubV9u
b2RlID0gbmV3IFNvdXJjZUVsZW1lbnRzU3R1YjsKKyAgICBTb3VyY2VFbGVtZW50ICAgICAgICAg
ICAgICAgICAgICAgICB7ICQkLm1fbm9kZSA9IG5ldyBTb3VyY2VFbGVtZW50czsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS0+YXBwZW5kKCQxLm1f
bm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX3Zh
ckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25zOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mdW5jRGVjbGFyYXRpb25zID0gJDEubV9mdW5j
RGVjbGFyYXRpb25zOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHJldmlz
aW9uIDI4OTM1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyNCwxOSArNzI0LDE2IEBAIHZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3QKICAgICBzIDw8IEVuZGwgPDwgbmV4dCA8PCAnOyc7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBzdGF0ZW1lbnRMaXN0U3RyZWFtVG8oVmVjdG9yPFJlZlB0cjxTdGF0ZW1l
bnROb2RlPiA+KiBub2RlcywgU291cmNlU3RyZWFtJiBzKQorc3RhdGljIGlubGluZSB2b2lkIHN0
YXRlbWVudExpc3RTdHJlYW1Ubyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0YXRlbWVudE5vZGU+ID4m
IG5vZGVzLCBTb3VyY2VTdHJlYW0mIHMpCiB7Ci0gICAgaWYgKCFub2RlcykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGZvciAoVmVjdG9yPFJlZlB0cjxTdGF0ZW1lbnROb2RlPiA+OjppdGVy
YXRvciBwdHIgPSBub2Rlcy0+YmVnaW4oKTsgcHRyICE9IG5vZGVzLT5lbmQoKTsgcHRyKyspCisg
ICAgZm9yIChWZWN0b3I8UmVmUHRyPFN0YXRlbWVudE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIHB0
ciA9IG5vZGVzLmJlZ2luKCk7IHB0ciAhPSBub2Rlcy5lbmQoKTsgcHRyKyspCiAgICAgICAgIHMg
PDwgKnB0cjsKIH0KICAgICAKIHZvaWQgQmxvY2tOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
IHMpIGNvbnN0CiB7CiAgICAgcyA8PCBFbmRsIDw8ICJ7IiA8PCBJbmRlbnQ7Ci0gICAgc3RhdGVt
ZW50TGlzdFN0cmVhbVRvKG1fY2hpbGRyZW4uZ2V0KCksIHMpOyAKKyAgICBzdGF0ZW1lbnRMaXN0
U3RyZWFtVG8obV9jaGlsZHJlbiwgcyk7IAogICAgIHMgPDwgVW5pbmRlbnQgPDwgRW5kbCA8PCAi
fSI7CiB9CiAKQEAgLTgyOSw3ICs4MjYsNyBAQCB2b2lkIENhc2VDbGF1c2VOb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlCiAgICAgZWxzZQogICAgICAgICBzIDw8ICJkZWZhdWx0IjsKICAgICBzIDw8
ICI6IiA8PCBJbmRlbnQ7Ci0gICAgc3RhdGVtZW50TGlzdFN0cmVhbVRvKG1fY2hpbGRyZW4uZ2V0
KCksIHMpOworICAgIHN0YXRlbWVudExpc3RTdHJlYW1UbyhtX2NoaWxkcmVuLCBzKTsKICAgICBz
IDw8IFVuaW5kZW50OwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDI4OTM1
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTAgKzQ0LDYgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKLSNkZWZpbmUgS0pTX0JSRUFLUE9JTlQg
XAotICBpZiAoRGVidWdnZXI6OmRlYnVnZ2Vyc1ByZXNlbnQgPiAwICYmICFoaXRTdGF0ZW1lbnQo
ZXhlYykpIFwKLSAgICByZXR1cm4gMDsKLQogI2RlZmluZSBLSlNfQ0hFQ0tFWENFUFRJT04gXAog
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIFwKICAgICByZXR1cm4gcmV0aHJvd0V4Y2VwdGlv
bihleGVjKTsKQEAgLTcwLDEyICs2Niw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHJldHVybiBm
YWxzZTsgXAogICB9CiAKLSNkZWZpbmUgS0pTX0NIRUNLRVhDRVBUSU9OTElTVCBcCi0gIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgeyBcCi0gICAgaGFuZGxlRXhjZXB0aW9uKGV4ZWMpOyBcCi0g
ICAgcmV0dXJuOyBcCi0gIH0KLQogI2RlZmluZSBLSlNfQ0hFQ0tFWENFUFRJT05WT0lEIFwKICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7IFwKICAgICBoYW5kbGVFeGNlcHRpb24oZXhlYyk7
IFwKQEAgLTIxMSw3ICsyMDEsNyBAQCB2b2lkIFBhcnNlclJlZkNvdW50ZWQ6OmRlbGV0ZU5ld09i
amVjdHMoCiBOb2RlOjpOb2RlKCkKICAgICA6IG1fZXhwZWN0ZWRSZXR1cm5UeXBlKE9iamVjdFR5
cGUpCiB7Ci0gIG1fbGluZSA9IGxleGVyKCkubGluZU5vKCk7CisgICAgbV9saW5lID0gbGV4ZXIo
KS5saW5lTm8oKTsKIH0KIAogTm9kZTo6Tm9kZShKU1R5cGUgZXhwZWN0ZWRSZXR1cm4pCkBAIC0z
ODYsMTUgKzM3NiwzNSBAQCB2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyhpbnQgZmlyc3RMaW5l
CiAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwogfQogCi0vLyBTZXQgbm9ybWFsIGNvbXBsZXRp
b24gYW5kIHJldHVybiBmYWxzZSBpZiB0aGUgZGVidWdnZXIgd2FudHMgdXMgdG8gc3RvcCBhdCB0
aGlzIHBvaW50LgotLy8gRklYTUU6IFRoaXMgc2VlbXMgbGlrZSBwb29yIG5hbWluZyBhbmQgc3Ry
YW5nZSBkZXNpZ24uIFdoeSBmYWxzZSB0byBzdG9wPyBXaHkgImhpdCBzdGF0ZW1lbnQiPwotYm9v
bCBTdGF0ZW1lbnROb2RlOjpoaXRTdGF0ZW1lbnQoRXhlY1N0YXRlKiBleGVjKQotewotICAgIERl
YnVnZ2VyKiBkZWJ1Z2dlciA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIo
KTsKLSAgICBpZiAoIWRlYnVnZ2VyIHx8IGRlYnVnZ2VyLT5hdFN0YXRlbWVudChleGVjLCBjdXJy
ZW50U291cmNlSWQoZXhlYyksIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKLSAgICByZXR1
cm4gZmFsc2U7CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU291cmNlRWxlbWVu
dHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBTb3VyY2VFbGVtZW50
czo6YXBwZW5kKFBhc3NSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50KQoreworICAgIGlm
IChEZWJ1Z2dlcjo6ZGVidWdnZXJzUHJlc2VudCkKKyAgICAgICAgbV9zdGF0ZW1lbnRzLmFwcGVu
ZChuZXcgQnJlYWtwb2ludENoZWNrU3RhdGVtZW50KHN0YXRlbWVudCkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9zdGF0ZW1lbnRzLmFwcGVuZChzdGF0ZW1lbnQpOworfQorCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJlYWtwb2ludENoZWNrU3RhdGVtZW50IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6QnJlYWtw
b2ludENoZWNrU3RhdGVtZW50KFBhc3NSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50KQor
ICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQoreworICAgIEFTU0VSVChtX3N0YXRlbWVudCk7
Cit9CisKK0pTVmFsdWUqIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6ZXhlY3V0ZShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGV4ZWMtPmR5bmFtaWNH
bG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKKyAgICAgICAgaWYgKCFkZWJ1Z2dlci0+YXRTdGF0
ZW1lbnQoZXhlYywgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBtX3N0YXRlbWVudC0+Zmlyc3RMaW5l
KCksIG1fc3RhdGVtZW50LT5sYXN0TGluZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBleGVjLT5z
ZXROb3JtYWxDb21wbGV0aW9uKCk7CisgICAgcmV0dXJuIG1fc3RhdGVtZW50LT5leGVjdXRlKGV4
ZWMpOworfQorCit2b2lkIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzdHJlYW0pIGNvbnN0Cit7CisgICAgbV9zdGF0ZW1lbnQtPnN0cmVhbVRvKHN0cmVh
bSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdWxsTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MzgsNyArODQ4LDcgQEAgdm9p
ZCBBcmd1bWVudExpc3ROb2RlOjpldmFsdWF0ZUxpc3QoRXhlYwogewogICBmb3IgKEFyZ3VtZW50
TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkgewogICAgIEpTVmFsdWUg
KnYgPSBuLT5leHByLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05MSVNU
CisgICAgS0pTX0NIRUNLRVhDRVBUSU9OVk9JRAogICAgIGxpc3QuYXBwZW5kKHYpOwogICB9CiB9
CkBAIC0zNTUxLDggKzM1NjEsNiBAQCB2b2lkIFZhclN0YXRlbWVudE5vZGU6Om9wdGltaXplVmFy
aWFibGVBCiAvLyBFQ01BIDEyLjIKIEpTVmFsdWUqIFZhclN0YXRlbWVudE5vZGU6OmV4ZWN1dGUo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEtKU19CUkVBS1BPSU5UCi0KICAgICBuZXh0LT5ldmFs
dWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KIApAQCAtMzU2MSwyNCArMzU2OSwy
NCBAQCBKU1ZhbHVlKiBWYXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZWNTCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBW
ZWN0b3JzIG9mIFN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdGVtZW50TGlzdFB1c2hGSUZPKFNvdXJjZUVsZW1lbnRz
JiBzdGF0ZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8oU3RhdGVtZW50VmVjdG9yJiBzdGF0
ZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKIHsKLSAgICBTb3Vy
Y2VFbGVtZW50czo6aXRlcmF0b3IgaXQgPSBzdGF0ZW1lbnRzLmVuZCgpOwotICAgIFNvdXJjZUVs
ZW1lbnRzOjppdGVyYXRvciBiZWdpbiA9IHN0YXRlbWVudHMuYmVnaW4oKTsKKyAgICBTdGF0ZW1l
bnRWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc3RhdGVtZW50cy5lbmQoKTsKKyAgICBTdGF0ZW1lbnRW
ZWN0b3I6Oml0ZXJhdG9yIGJlZ2luID0gc3RhdGVtZW50cy5iZWdpbigpOwogICAgIHdoaWxlIChp
dCAhPSBiZWdpbikgewogICAgICAgICAtLWl0OwogICAgICAgICBzdGFjay5hcHBlbmQoKCppdCku
Z2V0KCkpOwogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBOb2RlKiBzdGF0ZW1lbnRMaXN0SW5p
dGlhbGl6ZVZhcmlhYmxlQWNjZXNzU3RhY2soU291cmNlRWxlbWVudHMmIHN0YXRlbWVudHMsIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIHN0YWNrKQorc3RhdGljIGlubGluZSBOb2RlKiBz
dGF0ZW1lbnRMaXN0SW5pdGlhbGl6ZVZhcmlhYmxlQWNjZXNzU3RhY2soU3RhdGVtZW50VmVjdG9y
JiBzdGF0ZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKIHsKICAg
ICBpZiAoIXN0YXRlbWVudHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFNvdXJj
ZUVsZW1lbnRzOjppdGVyYXRvciBpdCA9IHN0YXRlbWVudHMuZW5kKCk7Ci0gICAgU291cmNlRWxl
bWVudHM6Oml0ZXJhdG9yIGJlZ2luID0gc3RhdGVtZW50cy5iZWdpbigpOwotICAgIFNvdXJjZUVs
ZW1lbnRzOjppdGVyYXRvciBiZWdpblBsdXNPbmUgPSBiZWdpbiArIDE7CisgICAgU3RhdGVtZW50
VmVjdG9yOjppdGVyYXRvciBpdCA9IHN0YXRlbWVudHMuZW5kKCk7CisgICAgU3RhdGVtZW50VmVj
dG9yOjppdGVyYXRvciBiZWdpbiA9IHN0YXRlbWVudHMuYmVnaW4oKTsKKyAgICBTdGF0ZW1lbnRW
ZWN0b3I6Oml0ZXJhdG9yIGJlZ2luUGx1c09uZSA9IGJlZ2luICsgMTsKICAgICAKICAgICB3aGls
ZSAoaXQgIT0gYmVnaW5QbHVzT25lKSB7CiAgICAgICAgIC0taXQ7CkBAIC0zNTg4LDcgKzM1OTYs
NyBAQCBzdGF0aWMgaW5saW5lIE5vZGUqIHN0YXRlbWVudExpc3RJbml0aWFsCiAgICAgcmV0dXJu
ICgqYmVnaW4pLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVudExp
c3RFeGVjdXRlKFNvdXJjZUVsZW1lbnRzJiBzdGF0ZW1lbnRzLCBFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVudExpc3RFeGVjdXRlKFN0YXRlbWVudFZlY3Rv
ciYgc3RhdGVtZW50cywgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUqIHZhbHVlID0g
MDsKICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRlbWVudHMuc2l6ZSgpOwpAQCAtMzYwNSwyMCArMzYx
MywyMCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVudExpc3RFeGVjCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBCbG9ja05vZGU6OkJsb2NrTm9kZShTb3VyY2VFbGVtZW50cyog
Y2hpbGRyZW4pCi0gICAgOiBtX2NoaWxkcmVuKGNoaWxkcmVuID8gY2hpbGRyZW4gOiBuZXcgU291
cmNlRWxlbWVudHMpCiB7Ci0gICAgQVNTRVJUKG1fY2hpbGRyZW4pOworICAgIGlmIChjaGlsZHJl
bikKKyAgICAgICAgY2hpbGRyZW4tPnJlbGVhc2UobV9jaGlsZHJlbik7CiB9CiAKIHZvaWQgQmxv
Y2tOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25T
dGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIHN0YXRlbWVudExpc3RQdXNoRklG
TygqbV9jaGlsZHJlbiwgbm9kZVN0YWNrKTsKKyAgICBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8obV9j
aGlsZHJlbiwgbm9kZVN0YWNrKTsKIH0KIAogLy8gRUNNQSAxMi4xCiBKU1ZhbHVlKiBCbG9ja05v
ZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzdGF0ZW1lbnRMaXN0
RXhlY3V0ZSgqbV9jaGlsZHJlbiwgZXhlYyk7CisgICAgcmV0dXJuIHN0YXRlbWVudExpc3RFeGVj
dXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRW1wdHlTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt
MzY0MCw4ICszNjQ4LDYgQEAgdm9pZCBFeHByU3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJs
ZQogLy8gRUNNQSAxMi40CiBKU1ZhbHVlKiBFeHByU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgS0pTX0JSRUFLUE9JTlQKLQogICAgIEpTVmFsdWUqIHZhbHVl
ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKQEAgLTM2
NTksOCArMzY2NSw2IEBAIHZvaWQgSWZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWIK
IC8vIEVDTUEgMTIuNQogSlNWYWx1ZSogSWZOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBLSlNfQlJFQUtQT0lOVAotCiAgICAgYm9vbCBiID0gbV9jb25kaXRpb24tPmV2YWx1
YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTgogCkBAIC0zNjc4LDgg
KzM2ODIsNiBAQCB2b2lkIElmRWxzZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoCiAvLyBF
Q01BIDEyLjUKIEpTVmFsdWUqIElmRWxzZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIEtKU19CUkVBS1BPSU5UOwotCiAgICAgYm9vbCBiID0gbV9jb25kaXRpb24tPmV2YWx1
YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTgogCkBAIC0zNzAwLDgg
KzM3MDIsNiBAQCB2b2lkIERvV2hpbGVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzCiAvLyBF
Q01BIDEyLjYuMQogSlNWYWx1ZSogRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIEtKU19CUkVBS1BPSU5UCi0KICAgICBKU1ZhbHVlKiB2YWx1ZSA9IDA7CiAKICAg
ICB3aGlsZSAoMSkgewpAQCAtMzc0NCw4ICszNzQ0LDYgQEAgdm9pZCBXaGlsZU5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoUwogLy8gRUNNQSAxMi42LjIKIEpTVmFsdWUqIFdoaWxlTm9kZTo6
ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgS0pTX0JSRUFLUE9JTlQKLQogICAgIEpT
VmFsdWUqIHZhbHVlID0gMDsKIAogICAgIHdoaWxlICgxKSB7CkBAIC0zOTQ4LDggKzM5NDYsNiBA
QCBKU1ZhbHVlKiBGb3JJbk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBlCiAvLyBFQ01BIDEyLjcK
IEpTVmFsdWUqIENvbnRpbnVlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEtK
U19CUkVBS1BPSU5UCi0KICAgaWYgKGlkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+aW5JdGVyYXRp
b24oKSkKICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAi
SW52YWxpZCBjb250aW51ZSBzdGF0ZW1lbnQuIik7CiAgIGlmICghaWRlbnQuaXNFbXB0eSgpICYm
ICFleGVjLT5zZWVuTGFiZWxzKCktPmNvbnRhaW5zKGlkZW50KSkKQEAgLTM5NjIsOCArMzk1OCw2
IEBAIEpTVmFsdWUqIENvbnRpbnVlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUKIC8vIEVDTUEgMTIu
OAogSlNWYWx1ZSogQnJlYWtOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgS0pT
X0JSRUFLUE9JTlQKLQogICBpZiAoaWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5pbkl0ZXJhdGlv
bigpICYmICFleGVjLT5pblN3aXRjaCgpKQogICAgIHJldHVybiBzZXRFcnJvckNvbXBsZXRpb24o
ZXhlYywgU3ludGF4RXJyb3IsICJJbnZhbGlkIGJyZWFrIHN0YXRlbWVudC4iKTsKICAgaWYgKCFp
ZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPnNlZW5MYWJlbHMoKS0+Y29udGFpbnMoaWRlbnQpKQpA
QCAtMzk4Miw4ICszOTc2LDYgQEAgdm9pZCBSZXR1cm5Ob2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKAogLy8gRUNNQSAxMi45CiBKU1ZhbHVlKiBSZXR1cm5Ob2RlOjpleGVjdXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgS0pTX0JSRUFLUE9JTlQKLQogICBDb2RlVHlwZSBjb2RlVHlwZSA9IGV4
ZWMtPmNvZGVUeXBlKCk7CiAgIGlmIChjb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCiAgICAgcmV0
dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkludmFsaWQgcmV0dXJu
IHN0YXRlbWVudC4iKTsKQEAgLTQwMDgsOCArNDAwMCw2IEBAIHZvaWQgV2l0aE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoU3kKIC8vIEVDTUEgMTIuMTAKIEpTVmFsdWUqIFdpdGhOb2RlOjpl
eGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgS0pTX0JSRUFLUE9JTlQKLQogICBKU1ZhbHVl
ICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogICBKU09i
amVjdCAqbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwpAQCAtNDAyNyw4ICs0MDE3LDcgQEAgdm9pZCBD
YXNlQ2xhdXNlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjYwogewogICAgIGlmIChleHByKQogICAg
ICAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOwotICAgIGlmIChtX2NoaWxkcmVuKQot
ICAgICAgICBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8oKm1fY2hpbGRyZW4sIG5vZGVTdGFjayk7Cisg
ICAgc3RhdGVtZW50TGlzdFB1c2hGSUZPKG1fY2hpbGRyZW4sIG5vZGVTdGFjayk7CiB9CiAKIC8v
IEVDTUEgMTIuMTEKQEAgLTQwNDMsOSArNDAzMiw3IEBAIEpTVmFsdWUgKkNhc2VDbGF1c2VOb2Rl
OjpldmFsdWF0ZShFeGVjU3QKIC8vIEVDTUEgMTIuMTEKIEpTVmFsdWUqIENhc2VDbGF1c2VOb2Rl
OjpleGVjdXRlU3RhdGVtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIGlmIChtX2NoaWxkcmVu
KQotICAgIHJldHVybiBzdGF0ZW1lbnRMaXN0RXhlY3V0ZSgqbV9jaGlsZHJlbiwgZXhlYyk7Ci0g
IHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7CisgICAgcmV0dXJuIHN0YXRlbWVu
dExpc3RFeGVjdXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQ2xhdXNlTGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtNDE0NSw4ICs0MTMyLDYgQEAgdm9pZCBTd2l0Y2hOb2RlOjpvcHRpbWl6ZVZhcmlh
YmxlQWNjZXNzKAogLy8gRUNNQSAxMi4xMQogSlNWYWx1ZSogU3dpdGNoTm9kZTo6ZXhlY3V0ZShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEtKU19CUkVBS1BPSU5UCi0KICAgSlNWYWx1ZSAqdiA9IGV4
cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KIApAQCAtNDE4OSw4ICs0
MTc0LDYgQEAgdm9pZCBUaHJvd05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoUwogLy8gRUNN
QSAxMi4xMwogSlNWYWx1ZSogVGhyb3dOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgS0pTX0JSRUFLUE9JTlQKLQogICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7
CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogCkBAIC00MjExLDggKzQxOTQsNiBAQCB2b2lkIFRyeU5v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltCiAvLyBFQ01BIDEyLjE0CiBKU1ZhbHVlKiBU
cnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgS0pTX0JSRUFLUE9JTlQKLQog
ICBKU1ZhbHVlKiByZXN1bHQgPSB0cnlCbG9jay0+ZXhlY3V0ZShleGVjKTsKIAogICBpZiAoQ29s
bGVjdG9yOjppc091dE9mTWVtb3J5KCkpCkBAIC00MzQwLDcgKzQzMjEsNyBAQCB2b2lkIFByb2dy
YW1Ob2RlOjppbml0aWFsaXplU3ltYm9sVGFibGUoCiB2b2lkIFNjb3BlTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayBub2RlU3RhY2s7Ci0gICAgTm9kZSogbm9kZSA9IHN0YXRlbWVudExpc3RJbml0
aWFsaXplVmFyaWFibGVBY2Nlc3NTdGFjaygqbV9jaGlsZHJlbiwgbm9kZVN0YWNrKTsKKyAgICBO
b2RlKiBub2RlID0gc3RhdGVtZW50TGlzdEluaXRpYWxpemVWYXJpYWJsZUFjY2Vzc1N0YWNrKG1f
Y2hpbGRyZW4sIG5vZGVTdGFjayk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAg
ICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMuaAkocmV2aXNpb24gMjg5MzUpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvbm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw2IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIgJmlkKSBLSlNfRkFT
VF9DQUxMIHsgbHMucHVzaChpZCk7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsg
fQogICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBoaXRTdGF0ZW1lbnQoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICBMYWJlbFN0YWNrIGxzOwogICBwcml2YXRlOgogICAgIGludCBtX2xhc3RM
aW5lOwpAQCAtMTczNCwyNiArMTczMywxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBSZWZQdHI8
VmFyRGVjbE5vZGU+IG5leHQ7CiAgIH07CiAKLSAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0YXRl
bWVudE5vZGU+ID4gU291cmNlRWxlbWVudHM7CisgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxTdGF0
ZW1lbnROb2RlPiA+IFN0YXRlbWVudFZlY3RvcjsKKworICAgIGNsYXNzIFNvdXJjZUVsZW1lbnRz
IDogcHVibGljIFBhcnNlclJlZkNvdW50ZWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBh
cHBlbmQoUGFzc1JlZlB0cjxTdGF0ZW1lbnROb2RlPik7CisgICAgICAgIHZvaWQgcmVsZWFzZShT
dGF0ZW1lbnRWZWN0b3ImIGRlc3RpbmF0aW9uKSB7IG1fc3RhdGVtZW50cy5zd2FwKGRlc3RpbmF0
aW9uKTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFN0YXRlbWVudFZlY3RvciBtX3N0YXRlbWVu
dHM7CisgICAgfTsKIAotICBjbGFzcyBTb3VyY2VFbGVtZW50c1N0dWIgOiBwdWJsaWMgTm9kZSB7
Ci0gIHB1YmxpYzoKLSAgICBTb3VyY2VFbGVtZW50c1N0dWIoKQotICAgICAgOiBtX3NvdXJjZUVs
ZW1lbnRzKG5ldyBTb3VyY2VFbGVtZW50cykKLSAgICAgIHt9Ci0gICAgdm9pZCBhcHBlbmQoU3Rh
dGVtZW50Tm9kZSogZWxlbWVudCkgeyBtX3NvdXJjZUVsZW1lbnRzLT5hcHBlbmQoZWxlbWVudCk7
IH0KLSAgICBTb3VyY2VFbGVtZW50cyogcmVsZWFzZSgpIHsgCi0gICAgICAgIFNvdXJjZUVsZW1l
bnRzKiBlbGVtcyA9IG1fc291cmNlRWxlbWVudHMucmVsZWFzZSgpOyAKLSAgICAgICAgcmV0dXJu
IGVsZW1zOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhT
eW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTCAgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTCAgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgUHJlY2Vk
ZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFBy
ZWNFeHByZXNzaW9uOyB9Ci0gIHByaXZhdGU6Ci0gICAgT3duUHRyPFNvdXJjZUVsZW1lbnRzPiBt
X3NvdXJjZUVsZW1lbnRzOwotICB9OwotICAgIAogICBjbGFzcyBCbG9ja05vZGUgOiBwdWJsaWMg
U3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKICAgICBCbG9ja05vZGUoU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTc2MSw3ICsxNzUwLDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgIHByb3RlY3RlZDoKLSAgICBPd25QdHI8U291cmNlRWxlbWVudHM+IG1f
Y2hpbGRyZW47CisgICAgU3RhdGVtZW50VmVjdG9yIG1fY2hpbGRyZW47CiAgIH07CiAKICAgY2xh
c3MgRW1wdHlTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtMjA1OSw3
ICsyMDQ4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICAgIENhc2VDbGF1c2VO
b2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7IH0KICAgICAg
IENhc2VDbGF1c2VOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4pIEtKU19GQVNUX0NBTEwKLSAgICAgIDogZXhwcihlKSwgbV9jaGlsZHJlbihjaGlsZHJlbikg
eyB9CisgICAgICA6IGV4cHIoZSkgeyBpZiAoY2hpbGRyZW4pIGNoaWxkcmVuLT5yZWxlYXNlKG1f
Y2hpbGRyZW4pOyB9CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhT
eW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwogICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQpAQCAtMjA2OSw3
ICsyMDU4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgcHJpdmF0ZToKICAgICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjsKLSAgICAgIE93blB0cjxTb3VyY2VFbGVtZW50cz4gbV9jaGls
ZHJlbjsKKyAgICAgIFN0YXRlbWVudFZlY3RvciBtX2NoaWxkcmVuOwogICB9OwogICAKICAgICBj
bGFzcyBDbGF1c2VMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTIxMTIsNyArMjEwMSwxNiBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKICAg
ICAgIFJlZlB0cjxDYXNlQmxvY2tOb2RlPiBibG9jazsKICAgfTsKLSAgCisKKyAgICBjbGFzcyBC
cmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CisgICAgcHVi
bGljOgorICAgICAgICBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQoUGFzc1JlZlB0cjxTdGF0ZW1l
bnROb2RlPikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKKyAgICB9OworCiAgIHN0cnVj
dCBFbGVtZW50TGlzdCB7CiAgICAgICBFbGVtZW50Tm9kZSogaGVhZDsKICAgICAgIEVsZW1lbnRO
b2RlKiB0YWlsOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oCShyZXZpc2lvbiAyODkzNSkK
KysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw2IEBACiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KIC8qCi0g
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTMxLDkgKzMwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gUGFzc1JlZlB0cjxUPiBhZG9wdFJlZihUKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiAKLSAgICBjbGFzcyBQYXNzUmVmUHRyCi0gICAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIFBhc3NSZWZQdHIgewogICAgIHB1YmxpYzoKICAgICAgICAgUGFzc1JlZlB0cigpIDog
bV9wdHIoMCkge30KICAgICAgICAgUGFzc1JlZlB0cihUKiBwdHIpIDogbV9wdHIocHRyKSB7IGlm
IChwdHIpIHB0ci0+cmVmKCk7IH0KQEAgLTUxLDYgKzQ4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIAogICAgICAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCisgICAg
ICAgIHZvaWQgY2xlYXIoKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcHRyLT5kZXJlZigpOyBtX3B0
ciA9IDA7IH0KICAgICAgICAgVCogcmVsZWFzZVJlZigpIGNvbnN0IHsgVCogdG1wID0gbV9wdHI7
IG1fcHRyID0gMDsgcmV0dXJuIHRtcDsgfQogCiAgICAgICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICptX3B0cjsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHIuaAkocmV2aXNpb24gMjg5MzUp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUmVmUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDIw
ICszNCwyMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh
c3MgUmVmUHRyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlZlB0cigpIDogbV9wdHIoMCkge30K
LSAgICAgICAgUmVmUHRyKFQgKnB0cikgOiBtX3B0cihwdHIpIHsgaWYgKHB0cikgcHRyLT5yZWYo
KTsgfQotICAgICAgICBSZWZQdHIoY29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsg
aWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9CisgICAgICAgIFJlZlB0cihUKiBwdHIp
IDogbV9wdHIocHRyKSB7IGlmIChwdHIpIHB0ci0+cmVmKCk7IH0KKyAgICAgICAgUmVmUHRyKGNv
bnN0IFJlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcHRy
LT5yZWYoKTsgfQogICAgICAgICAvLyBzZWUgY29tbWVudCBpbiBQYXNzUmVmUHRyLmggZm9yIHdo
eSB0aGlzIHRha2VzIGNvbnN0IHJlZmVyZW5jZQogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4gUmVmUHRyKGNvbnN0IFBhc3NSZWZQdHI8VT4mKTsKIAogICAgICAgICAvLyBTcGVjaWFsIGNv
bnN0cnVjdG9yIGZvciBjYXNlcyB3aGVyZSB3ZSBvdmVyd3JpdGUgYW4gb2JqZWN0IGluIHBsYWNl
LgogICAgICAgICBSZWZQdHIoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSB7IH0KIAotICAgICAgICB+
UmVmUHRyKCkgeyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgfQorICAgICAgICB+
UmVmUHRyKCkgeyBpZiAoVCogcHRyID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgfQogICAgICAgICAK
LSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8p
IDogbV9wdHIoby5nZXQoKSkgeyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+cmVmKCk7IH0KKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDog
bV9wdHIoby5nZXQoKSkgeyBpZiAoVCogcHRyID0gbV9wdHIpIHB0ci0+cmVmKCk7IH0KICAgICAg
ICAgCi0gICAgICAgIFQgKmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgICAgIFQq
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGNs
ZWFyKCkgeyBpZiAoVCogcHRyID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgbV9wdHIgPSAwOyB9CiAg
ICAgICAgIFBhc3NSZWZQdHI8VD4gcmVsZWFzZSgpIHsgUGFzc1JlZlB0cjxUPiB0bXAgPSBhZG9w
dFJlZihtX3B0cik7IG1fcHRyID0gMDsgcmV0dXJuIHRtcDsgfQogCiAgICAgICAgIFQmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICptX3B0cjsgfQpAQCAtNTYsMTEgKzU3LDExIEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0
cjsgfQogICAgIAogICAgICAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGlt
cGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMu
Ci0gICAgICAgIHR5cGVkZWYgVCAqIChSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKSgpIGNv
bnN0OworICAgICAgICB0eXBlZGVmIFQqIChSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKSgp
IGNvbnN0OwogICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wdHIgPyAmUmVmUHRyOjpnZXQgOiAwOyB9CiAgICAgICAgIAogICAgICAgICBSZWZQ
dHImIG9wZXJhdG9yPShjb25zdCBSZWZQdHImKTsKLSAgICAgICAgUmVmUHRyJiBvcGVyYXRvcj0o
VCAqKTsKKyAgICAgICAgUmVmUHRyJiBvcGVyYXRvcj0oVCopOwogICAgICAgICBSZWZQdHImIG9w
ZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFQ+Jik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPiBSZWZQdHImIG9wZXJhdG9yPShjb25zdCBSZWZQdHI8VT4mKTsKICAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+IFJlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8VT4mKTsK
QEAgLTE3MSwxMiArMTcyLDEyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIAogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+IHN0YXRpY19wb2ludGVy
X2Nhc3QoY29uc3QgUmVmUHRyPFU+JiBwKQogICAgIHsgCi0gICAgICAgIHJldHVybiBSZWZQdHI8
VD4oc3RhdGljX2Nhc3Q8VCAqPihwLmdldCgpKSk7IAorICAgICAgICByZXR1cm4gUmVmUHRyPFQ+
KHN0YXRpY19jYXN0PFQqPihwLmdldCgpKSk7IAogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+IGNvbnN0X3BvaW50ZXJfY2FzdChj
b25zdCBSZWZQdHI8VT4mIHApCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFJlZlB0cjxUPihjb25z
dF9jYXN0PFQgKj4ocC5nZXQoKSkpOyAKKyAgICAgICAgcmV0dXJuIFJlZlB0cjxUPihjb25zdF9j
YXN0PFQqPihwLmdldCgpKSk7IAogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCogZ2V0UHRyKGNvbnN0IFJlZlB0cjxUPiYgcCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18038</attachid>
            <date>2007-12-21 12:56:14 -0800</date>
            <delta_ts>2007-12-21 13:40:31 -0800</delta_ts>
            <desc>improved patch; 1.022x as fast SunSpider</desc>
            <filename>DebuggerOverheadPatch.txt</filename>
            <type>text/plain</type>
            <size>30921</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4OTM2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMDctMTItMjEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1NjEKKyAgICAgICAgICByZW1vdmUgZGVidWdnZXIgb3ZlcmhlYWQgZnJvbSBub24tZGVidWdn
ZWQgSmF2YVNjcmlwdCBleGVjdXRpb24KKworICAgICAgICAxLjAyMnggYXMgZmFzdCBvbiBTdW5T
cGlkZXIuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IFVwZGF0ZWQuCisKKyAgICAg
ICAgKiBranMvTm9kZUluZm8uaDogUmVuYW1lZCBTb3VyY2VFbGVtZW50c1N0dWIgdG8gU291cmNl
RWxlbWVudHMsCisgICAgICAgIHNpbmNlIHRoYXQgbW9yZSBhY2N1cmF0ZWx5IGRlc2NyaWJlcyB0
aGUgcm9sZSBvZiB0aGlzIG9iamVjdCwgd2hpY2gKKyAgICAgICAgaXMgYSByZWZlcmVuY2UtY291
bnRlZCB3cmFwcGVyIGZvciBhIFZlY3Rvci4KKworICAgICAgICAqIGtqcy9QYXJzZXIuY3BwOgor
ICAgICAgICAoS0pTOjpQYXJzZXI6OmRpZEZpbmlzaFBhcnNpbmcpOiBDaGFuZ2VkIHBhcmFtZXRl
ciB0eXBlIHRvIFNvdXJjZUVsZW1lbnRzLAorICAgICAgICBhbmQgdXNlIHBsYWluIGFzc2lnbm1l
bnQgaW5zdGVhZCBvZiBzZXQuCisgICAgICAgICoga2pzL1BhcnNlci5oOiBDaGFuZ2VkIHBhcmFt
ZXRlciB0eXBlIG9mIGRpZEZpbmlzaFBhcnNpbmcgdG8gYQorICAgICAgICBTb3VyY2VFbGVtZW50
cy4gQWxzbyBjaGFuZ2VkIG1fc291cmNlRWxlbWVudHM7IHdlIG5vdyB1c2UgYSBSZWZQdHIgaW5z
dGVhZAorICAgICAgICBvZiBhbiBPd25QdHIgYXMgd2VsbC4KKworICAgICAgICAqIGtqcy9ncmFt
bWFyLnk6IEdvdCByaWQgb2YgYWxsIHRoZSBjYWxscyB0byByZWxlYXNlKCkgb24gU291cmNlRWxl
bWVudHMuCisgICAgICAgIFRoYXQncyBub3cgaGFuZGVkIGluc2lkZSB0aGUgY29uc3RydWN0b3Jz
IGZvciB2YXJpb3VzIG5vZGUgdHlwZXMsIHNpbmNlIHdlIG5vdworICAgICAgICB1c2UgdmVjdG9y
IHN3YXBwaW5nIGluc3RlYWQuCisKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAo
S0pTOjpOb2RlOjpyZXRocm93RXhjZXB0aW9uKTogQWRkZWQgTkVWRVJfSU5MSU5FLCBiZWNhdXNl
IHRoaXMgd2FzIGdldHRpbmcgaW5saW5lZAorICAgICAgICBhbmQgd2Ugd2FudCBleGNlcHRpb24g
aGFuZGxpbmcgb3V0IG9mIHRoZSBub3JtYWwgY29kZSBmbG93LgorICAgICAgICAoS0pTOjpTb3Vy
Y2VFbGVtZW50czo6YXBwZW5kKTogTW92ZWQgaGVyZSBmcm9tIHRoZSBoZWFkZXIuIFRoaXMgbm93
IGhhbmRsZXMKKyAgICAgICAgY3JlYXRpbmcgYSBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQgZm9y
IGVhY2ggc3RhdGVtZW50IGluIHRoZSBkZWJ1Z2dlciBjYXNlLgorICAgICAgICBUaGF0IHdheSB3
ZSBjYW4gZ2V0IGJyZWFrcG9pbnQgaGFuZGxpbmcgd2l0aG91dCBoYXZpbmcgaXQgaW4gZXZlcnkg
ZXhlY3V0ZSBmdW5jdGlvbi4KKyAgICAgICAgKEtKUzo6QnJlYWtwb2ludENoZWNrU3RhdGVtZW50
OjpCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6QnJlYWtw
b2ludENoZWNrU3RhdGVtZW50OjpleGVjdXRlKTogQWRkZWQuIENvbnRhaW5zIHRoZSBjb2RlIHRo
YXQgd2FzIGZvcm1lcmx5CisgICAgICAgIGluIHRoZSBTdGF0ZW1lbnROb2RlOjpoaXRTdGF0ZW1l
bnQgZnVuY3Rpb24gYW5kIHRoZSBLSlNfQlJFQUtQT0lOVCBtYWNyby4KKyAgICAgICAgKEtKUzo6
QnJlYWtwb2ludENoZWNrU3RhdGVtZW50OjpzdHJlYW1Ubyk6IEFkZGVkLgorICAgICAgICAoS0pT
OjpBcmd1bWVudExpc3ROb2RlOjpldmFsdWF0ZUxpc3QpOiBVc2UgS0pTX0NIRUNLRVhDRVBUSU9O
Vk9JRCBzaW5jZSB0aGUgcmV0dXJuCisgICAgICAgIHR5cGUgaXMgdm9pZC4KKyAgICAgICAgKEtK
Uzo6VmFyU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZSk6IFJlbW92ZWQgS0pTX0JSRUFLUE9JTlQuCisg
ICAgICAgIChLSlM6OkJsb2NrTm9kZTo6QmxvY2tOb2RlKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdHlw
ZSB0byBTb3VyY2VFbGVtZW50cy4KKyAgICAgICAgQ2hhbmdlZCBjb2RlIHRvIHVzZSByZWxlYXNl
IHNpbmNlIHRoZSBjbGFzcyBub3cgY29udGFpbnMgYSB2ZWN0b3IgcmF0aGVyIHRoYW4KKyAgICAg
ICAgYSB2ZWN0b3IgcG9pbnQuCisgICAgICAgIChLSlM6OkJsb2NrTm9kZTo6b3B0aW1pemVWYXJp
YWJsZUFjY2Vzcyk6IFVwZGF0ZWQgc2luY2UgbWVtYmVyIGlzIG5vdyBhIHZlY3RvcgorICAgICAg
ICByYXRoZXIgdGhhbiBhIHZlY3RvciBwb2ludGVyLgorICAgICAgICAoS0pTOjpCbG9ja05vZGU6
OmV4ZWN1dGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6RXhwclN0YXRlbWVudE5vZGU6OmV4ZWN1
dGUpOiBSZW1vdmVkIEtKU19CUkVBS1BPSU5ULgorICAgICAgICAoS0pTOjpJZk5vZGU6OmV4ZWN1
dGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6SWZFbHNlTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgor
ICAgICAgICAoS0pTOjpEb1doaWxlTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pT
OjpXaGlsZU5vZGU6OmV4ZWN1dGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6Q29udGludWVOb2Rl
OjpleGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6OkJyZWFrTm9kZTo6ZXhlY3V0ZSk6IERp
dHRvLgorICAgICAgICAoS0pTOjpSZXR1cm5Ob2RlOjpleGVjdXRlKTogRGl0dG8uCisgICAgICAg
IChLSlM6OldpdGhOb2RlOjpleGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6OkNhc2VDbGF1
c2VOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKTogVXBkYXRlZCBzaW5jZSBtZW1iZXIgaXMg
bm93IGEgdmVjdG9yCisgICAgICAgIHJhdGhlciB0aGFuIGEgdmVjdG9yIHBvaW50ZXIuCisgICAg
ICAgIChLSlM6OkNhc2VDbGF1c2VOb2RlOjpleGVjdXRlU3RhdGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAoS0pTOjpTd2l0Y2hOb2RlOjpleGVjdXRlKTogUmVtb3ZlZCBLSlNfQlJFQUtQT0lOVC4K
KyAgICAgICAgKEtKUzo6VGhyb3dOb2RlOjpleGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6
OlRyeU5vZGU6OmV4ZWN1dGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U2NvcGVOb2RlOjpTY29w
ZU5vZGUpOiBDaGFuZ2VkIHBhcmFtZXRlciB0eXBlIHRvIFNvdXJjZUVsZW1lbnRzLgorICAgICAg
ICAoS0pTOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6
RXZhbE5vZGU6OkV2YWxOb2RlKTogRGl0dG8uCisgICAgICAgIChLSlM6OkZ1bmN0aW9uQm9keU5v
ZGU6OkZ1bmN0aW9uQm9keU5vZGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U2NvcGVOb2RlOjpv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKTogVXBkYXRlZCBzaW5jZSBtZW1iZXIgaXMgbm93IGEgdmVj
dG9yCisgICAgICAgIHJhdGhlciB0aGFuIGEgdmVjdG9yIHBvaW50ZXIuCisKKyAgICAgICAgKiBr
anMvbm9kZXMuaDogUmVtb3ZlZCBoaXRTdGF0ZW1lbnQuIFJlbmFtZWQgU291cmNlRWxlbWVudHMg
dG8gU3RhdGVtZW50VmVjdG9yLgorICAgICAgICBSZW5hbWVkIFNvdXJjZUVsZW1lbnRzU3R1YiB0
byBTb3VyY2VFbGVtZW50cyBhbmQgbWFkZSBpdCBkZXJpdmUgZnJvbQorICAgICAgICBQYXJzZXJS
ZWZDb3VudGVkIHJhdGhlciB0aGFuIGZyb20gTm9kZSwgaG9sZCBhIHZlY3RvciByYXRoZXIgdGhh
biBhIHBvaW50ZXIgdG8KKyAgICAgICAgYSB2ZWN0b3IsIGFuZCBjaGFuZ2VkIHRoZSByZWxlYXNl
IGZ1bmN0aW9uIHRvIHN3YXAgd2l0aCBhbm90aGVyIHZlY3RvciByYXRoZXIKKyAgICAgICAgdGhh
biB0aGUgcG9pbnRlciBpZGlvbS4gVXBkYXRlZCBCbG9ja05vZGUgYW5kIENhc2VDbGF1c2VOb2Rl
IHRvIGhvbGQgYWN0dWFsCisgICAgICAgIHZlY3RvcnMgaW5zdGVhZCBvZiBwb2ludGVycyB0byB2
ZWN0b3JzLiBBZGRlZCBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQuCisKKyAgICAgICAgKiBranMv
bm9kZXMyc3RyaW5nLmNwcDoKKyAgICAgICAgKEtKUzo6c3RhdGVtZW50TGlzdFN0cmVhbVRvKTog
Q2hhbmdlZCB0byB3b3JrIG9uIGEgdmVjdG9yIGluc3RlYWQgb2YgYSBwb2ludGVyCisgICAgICAg
IHRvIGEgdmVjdG9yLgorICAgICAgICAoS0pTOjpCbG9ja05vZGU6OnN0cmVhbVRvKTogRGl0dG8u
CisgICAgICAgIChLSlM6OkNhc2VDbGF1c2VOb2RlOjpzdHJlYW1Ubyk6ICBEaXR0by4KKworICAg
ICAgICAqIHd0Zi9BbHdheXNJbmxpbmUuaDogQWRkZWQgTkVWRVJfSU5MSU5FLgorICAgICAgICAq
IHd0Zi9QYXNzUmVmUHRyLmg6IFR3ZWFrZWQgZm9ybWF0dGluZy4gQWRkZWQgY2xlYXIoKSBmdW5j
dGlvbiB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIG9uZXMgaW4gT3duUHRyIGFuZCBhdXRvX3B0
ci4KKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6IERpdHRvLgorCiAyMDA3LTEyLTIxICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICAtIGZpeCBicm9rZW4gcmVncmVzc2lv
biB0ZXN0cwpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMjg5MzUp
CisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw3ICsxMjAsNyBAQCBfX1pOM0tKUzExSW50ZXJwcmV0ZXI4ZXZhbHVhdGVFUE5TXzlFeGVj
CiBfX1pOM0tKUzExSlNJbW1lZGlhdGU0dHlwZUVQS05TXzdKU1ZhbHVlRQogX19aTjNLSlMxMUpT
SW1tZWRpYXRlOHRvT2JqZWN0RVBLTlNfN0pTVmFsdWVFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0tK
UzExSlNJbW1lZGlhdGU4dG9TdHJpbmdFUEtOU183SlNWYWx1ZUUKLV9fWk4zS0pTMTFQcm9ncmFt
Tm9kZUMxRVBOM1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJTlNfMTNTdGF0ZW1lbnROb2RlRUVFTG0w
RUVFUE5TMl9JUE5TXzExVmFyRGVjbE5vZGVFTG0xNkVFRVBOUzJfSVBOU18xMkZ1bmNEZWNsTm9k
ZUVMbTE2RUVFCitfX1pOM0tKUzExUHJvZ3JhbU5vZGVDMUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQ
TjNXVEY2VmVjdG9ySVBOU18xMVZhckRlY2xOb2RlRUxtMTZFRUVQTlM0X0lQTlNfMTJGdW5jRGVj
bE5vZGVFTG0xNkVFRQogX19aTjNLSlMxMVByb3BlcnR5TWFwMTFnZXRMb2NhdGlvbkVSS05TXzEw
SWRlbnRpZmllckUKIF9fWk4zS0pTMTFQcm9wZXJ0eU1hcDVjbGVhckV2CiBfX1pOM0tKUzExUHJv
cGVydHlNYXA3cmVzdG9yZUVSS05TXzE1U2F2ZWRQcm9wZXJ0aWVzRQpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL05vZGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL05v
ZGVJbmZvLmgJKHJldmlzaW9uIDI4OTM1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL05vZGVJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0cnVjdCBOb2RlSW5mbyB7CiB0eXBlZGVmIE5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPiBTdGF0
ZW1lbnROb2RlSW5mbzsKIHR5cGVkZWYgTm9kZUluZm88Q2FzZUJsb2NrTm9kZSo+IENhc2VCbG9j
a05vZGVJbmZvOwogdHlwZWRlZiBOb2RlSW5mbzxDYXNlQ2xhdXNlTm9kZSo+IENhc2VDbGF1c2VO
b2RlSW5mbzsKLXR5cGVkZWYgTm9kZUluZm88U291cmNlRWxlbWVudHNTdHViKj4gU291cmNlRWxl
bWVudHNJbmZvOwordHlwZWRlZiBOb2RlSW5mbzxTb3VyY2VFbGVtZW50cyo+IFNvdXJjZUVsZW1l
bnRzSW5mbzsKIHR5cGVkZWYgTm9kZUluZm88Q2xhdXNlTGlzdD4gQ2xhdXNlTGlzdEluZm87CiB0
eXBlZGVmIE5vZGVJbmZvPFZhckRlY2xMaXN0PiBWYXJEZWNsTGlzdEluZm87CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9QYXJzZXIuY3BwCShyZXZpc2lvbiAyODkzNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Q
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgUGFyc2VyOjpw
YXJzZShpbnQgc3RhcnRpbmdMaW5lTnVtYmUKIHZvaWQgUGFyc2VyOjpkaWRGaW5pc2hQYXJzaW5n
KFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgUGFyc2VyUmVmQ291bnRlZERhdGE8RGVj
bGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyU3RhY2ssIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0
aW9uU3RhY2s+KiBmdW5jU3RhY2ssIGludCBsYXN0TGluZSkKIHsKLSAgICBtX3NvdXJjZUVsZW1l
bnRzLnNldChzb3VyY2VFbGVtZW50cyA/IHNvdXJjZUVsZW1lbnRzIDogbmV3IFNvdXJjZUVsZW1l
bnRzKTsKKyAgICBtX3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxlbWVudHMgPyBzb3VyY2VFbGVt
ZW50cyA6IG5ldyBTb3VyY2VFbGVtZW50czsKICAgICBtX3ZhckRlY2xhcmF0aW9ucyA9IHZhclN0
YWNrOwogICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA9IGZ1bmNTdGFjazsKICAgICBtX2xhc3RMaW5l
ID0gbGFzdExpbmU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvUGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5oCShyZXZpc2lvbiAyODkzNSkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBVU3RyaW5nIG1fc291cmNlVVJMOwogICAgICAg
ICBpbnQgbV9zb3VyY2VJZDsKLSAgICAgICAgT3duUHRyPFNvdXJjZUVsZW1lbnRzPiBtX3NvdXJj
ZUVsZW1lbnRzOworICAgICAgICBSZWZQdHI8U291cmNlRWxlbWVudHM+IG1fc291cmNlRWxlbWVu
dHM7CiAgICAgICAgIFJlZlB0cjxQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNr
czo6VmFyU3RhY2s+ID4gbV92YXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIFJlZlB0cjxQYXJzZXJS
ZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4gPiBtX2Z1bmNE
ZWNsYXJhdGlvbnM7CiAgICAgICAgIGludCBtX2xhc3RMaW5lOwpAQCAtODQsNyArODQsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIG1fc291cmNlVVJMID0gVVN0cmluZygpOwogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPFBhcnNlZE5vZGU+
IG5vZGUgPSBuZXcgUGFyc2VkTm9kZShtX3NvdXJjZUVsZW1lbnRzLnJlbGVhc2UoKSwgCisgICAg
ICAgIFJlZlB0cjxQYXJzZWROb2RlPiBub2RlID0gbmV3IFBhcnNlZE5vZGUobV9zb3VyY2VFbGVt
ZW50cy5yZWxlYXNlKCkuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV92YXJEZWNsYXJhdGlvbnMgPyAmbV92YXJEZWNsYXJhdGlvbnMtPmRh
dGEgOiAwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAmbV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhIDogMCk7CiAg
ICAgICAgIG1fdmFyRGVjbGFyYXRpb25zID0gMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9n
cmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQkocmV2
aXNpb24gMjg5MzUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CSh3b3JraW5nIGNv
cHkpCkBAIC02OTgsNyArNjk4LDcgQEAgU3RhdGVtZW50OgogQmxvY2s6CiAgICAgJ3snICd9JyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPFN0YXRlbWVu
dE5vZGUqPihuZXcgQmxvY2tOb2RlKDApLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERCRygkJC5tX25vZGUsIEAxLCBAMik7IH0KLSAgfCAneycgU291
cmNlRWxlbWVudHMgJ30nICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVt
ZW50Tm9kZSo+KG5ldyBCbG9ja05vZGUoJDIubV9ub2RlLT5yZWxlYXNlKCkpLCAkMi5tX3ZhckRl
Y2xhcmF0aW9ucywgJDIubV9mdW5jRGVjbGFyYXRpb25zKTsKKyAgfCAneycgU291cmNlRWxlbWVu
dHMgJ30nICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50Tm9kZSo+
KG5ldyBCbG9ja05vZGUoJDIubV9ub2RlKSwgJDIubV92YXJEZWNsYXJhdGlvbnMsICQyLm1fZnVu
Y0RlY2xhcmF0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEQkcoJCQubV9ub2RlLCBAMSwgQDMpOyB9CiA7CiAKQEAgLTkxNiwxMiArOTE2LDEyIEBAIENh
c2VDbGF1c2VzOgogCiBDYXNlQ2xhdXNlOgogICAgIENBU0UgRXhwciAnOicgICAgICAgICAgICAg
ICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxDYXNlQ2xhdXNlTm9kZSo+KG5ldyBDYXNl
Q2xhdXNlTm9kZSgkMiksIDAsIDApOyB9Ci0gIHwgQ0FTRSBFeHByICc6JyBTb3VyY2VFbGVtZW50
cyAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPENhc2VDbGF1c2VOb2RlKj4obmV3IENhc2VD
bGF1c2VOb2RlKCQyLCAkNC5tX25vZGUtPnJlbGVhc2UoKSksICQ0Lm1fdmFyRGVjbGFyYXRpb25z
LCAkNC5tX2Z1bmNEZWNsYXJhdGlvbnMpOyB9CisgIHwgQ0FTRSBFeHByICc6JyBTb3VyY2VFbGVt
ZW50cyAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPENhc2VDbGF1c2VOb2RlKj4obmV3IENh
c2VDbGF1c2VOb2RlKCQyLCAkNC5tX25vZGUpLCAkNC5tX3ZhckRlY2xhcmF0aW9ucywgJDQubV9m
dW5jRGVjbGFyYXRpb25zKTsgfQogOwogCiBEZWZhdWx0Q2xhdXNlOgogICAgIERFRkFVTFQgJzon
ICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxDYXNlQ2xhdXNl
Tm9kZSo+KG5ldyBDYXNlQ2xhdXNlTm9kZSgwKSwgMCwgMCk7IH0KLSAgfCBERUZBVUxUICc6JyBT
b3VyY2VFbGVtZW50cyAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88Q2FzZUNsYXVzZU5v
ZGUqPihuZXcgQ2FzZUNsYXVzZU5vZGUoMCwgJDMubV9ub2RlLT5yZWxlYXNlKCkpLCAkMy5tX3Zh
ckRlY2xhcmF0aW9ucywgJDMubV9mdW5jRGVjbGFyYXRpb25zKTsgfQorICB8IERFRkFVTFQgJzon
IFNvdXJjZUVsZW1lbnRzICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxDYXNlQ2xhdXNl
Tm9kZSo+KG5ldyBDYXNlQ2xhdXNlTm9kZSgwLCAkMy5tX25vZGUpLCAkMy5tX3ZhckRlY2xhcmF0
aW9ucywgJDMubV9mdW5jRGVjbGFyYXRpb25zKTsgfQogOwogCiBMYWJlbGxlZFN0YXRlbWVudDoK
QEAgLTk3OSw3ICs5NzksNyBAQCBGb3JtYWxQYXJhbWV0ZXJMaXN0OgogCiBGdW5jdGlvbkJvZHk6
CiAgICAgLyogbm90IGluIHNwZWMgKi8gICAgICAgICAgIHsgJCQgPSBuZXcgRnVuY3Rpb25Cb2R5
Tm9kZSgwLCAwLCAwKTsgfQotICB8IFNvdXJjZUVsZW1lbnRzICAgICAgICAgICAgICB7ICQkID0g
bmV3IEZ1bmN0aW9uQm9keU5vZGUoJDEubV9ub2RlLT5yZWxlYXNlKCksICQxLm1fdmFyRGVjbGFy
YXRpb25zID8gJiQxLm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDogMCwgCisgIHwgU291cmNlRWxl
bWVudHMgICAgICAgICAgICAgIHsgJCQgPSBuZXcgRnVuY3Rpb25Cb2R5Tm9kZSgkMS5tX25vZGUs
ICQxLm1fdmFyRGVjbGFyYXRpb25zID8gJiQxLm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDogMCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJDEubV9mdW5jRGVjbGFyYXRpb25zID8gJiQxLm1f
ZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YSA6IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEFzIGluIG1lcmdlRGVjbGFyYXRpb25MaXN0cygpIHdlIGhhdmUgdG8gcmVmL2Rl
cmVmIHRvIHNhZmVseSBnZXQgcmlkIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIGRlY2xhcmF0aW9uIGxpc3RzLgpAQCAtOTk2LDExICs5OTYsMTEgQEAgRnVuY3Rp
b25Cb2R5OgogCiBQcm9ncmFtOgogICAgIC8qIG5vdCBpbiBzcGVjICovICAgICAgICAgICAgICAg
ICAgIHsgcGFyc2VyKCkuZGlkRmluaXNoUGFyc2luZygwLCAwLCAwLCBAMC5sYXN0X2xpbmUpOyB9
Ci0gICAgfCBTb3VyY2VFbGVtZW50cyAgICAgICAgICAgICAgICAgICAgeyBwYXJzZXIoKS5kaWRG
aW5pc2hQYXJzaW5nKCQxLm1fbm9kZS0+cmVsZWFzZSgpLCAkMS5tX3ZhckRlY2xhcmF0aW9ucywg
JDEubV9mdW5jRGVjbGFyYXRpb25zLCBAMS5sYXN0X2xpbmUpOyB9CisgICAgfCBTb3VyY2VFbGVt
ZW50cyAgICAgICAgICAgICAgICAgICAgeyBwYXJzZXIoKS5kaWRGaW5pc2hQYXJzaW5nKCQxLm1f
bm9kZSwgJDEubV92YXJEZWNsYXJhdGlvbnMsICQxLm1fZnVuY0RlY2xhcmF0aW9ucywgQDEubGFz
dF9saW5lKTsgfQogOwogCiBTb3VyY2VFbGVtZW50czoKLSAgICBTb3VyY2VFbGVtZW50ICAgICAg
ICAgICAgICAgICAgICAgICB7ICQkLm1fbm9kZSA9IG5ldyBTb3VyY2VFbGVtZW50c1N0dWI7Cisg
ICAgU291cmNlRWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5tX25vZGUgPSBuZXcg
U291cmNlRWxlbWVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkJC5tX25vZGUtPmFwcGVuZCgkMS5tX25vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMgPSAkMS5tX3ZhckRlY2xhcmF0
aW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fZnVu
Y0RlY2xhcmF0aW9ucyA9ICQxLm1fZnVuY0RlY2xhcmF0aW9uczsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9ub2RlczJzdHJpbmcuY3BwCShyZXZpc2lvbiAyODkzNSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9ub2RlczJzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjQsMTkgKzcyNCwxNiBAQCB2
b2lkIFZhclN0YXRlbWVudE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0CiAgICAgcyA8PCBFbmRsIDw8
IG5leHQgPDwgJzsnOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdGVtZW50TGlzdFN0cmVh
bVRvKFZlY3RvcjxSZWZQdHI8U3RhdGVtZW50Tm9kZT4gPiogbm9kZXMsIFNvdXJjZVN0cmVhbSYg
cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGF0ZW1lbnRMaXN0U3RyZWFtVG8oY29uc3QgVmVjdG9y
PFJlZlB0cjxTdGF0ZW1lbnROb2RlPiA+JiBub2RlcywgU291cmNlU3RyZWFtJiBzKQogewotICAg
IGlmICghbm9kZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKFZlY3RvcjxSZWZQ
dHI8U3RhdGVtZW50Tm9kZT4gPjo6aXRlcmF0b3IgcHRyID0gbm9kZXMtPmJlZ2luKCk7IHB0ciAh
PSBub2Rlcy0+ZW5kKCk7IHB0cisrKQorICAgIGZvciAoVmVjdG9yPFJlZlB0cjxTdGF0ZW1lbnRO
b2RlPiA+Ojpjb25zdF9pdGVyYXRvciBwdHIgPSBub2Rlcy5iZWdpbigpOyBwdHIgIT0gbm9kZXMu
ZW5kKCk7IHB0cisrKQogICAgICAgICBzIDw8ICpwdHI7CiB9CiAgICAgCiB2b2lkIEJsb2NrTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewogICAgIHMgPDwgRW5kbCA8PCAi
eyIgPDwgSW5kZW50OwotICAgIHN0YXRlbWVudExpc3RTdHJlYW1UbyhtX2NoaWxkcmVuLmdldCgp
LCBzKTsgCisgICAgc3RhdGVtZW50TGlzdFN0cmVhbVRvKG1fY2hpbGRyZW4sIHMpOyAKICAgICBz
IDw8IFVuaW5kZW50IDw8IEVuZGwgPDwgIn0iOwogfQogCkBAIC04MjksNyArODI2LDcgQEAgdm9p
ZCBDYXNlQ2xhdXNlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZQogICAgIGVsc2UKICAgICAgICAg
cyA8PCAiZGVmYXVsdCI7CiAgICAgcyA8PCAiOiIgPDwgSW5kZW50OwotICAgIHN0YXRlbWVudExp
c3RTdHJlYW1UbyhtX2NoaWxkcmVuLmdldCgpLCBzKTsKKyAgICBzdGF0ZW1lbnRMaXN0U3RyZWFt
VG8obV9jaGlsZHJlbiwgcyk7CiAgICAgcyA8PCBVbmluZGVudDsKIH0KIApJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
bm9kZXMuY3BwCShyZXZpc2lvbiAyODkzNSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCw2IEBACiAKIG5hbWVzcGFjZSBLSlMgewog
Ci0jZGVmaW5lIEtKU19CUkVBS1BPSU5UIFwKLSAgaWYgKERlYnVnZ2VyOjpkZWJ1Z2dlcnNQcmVz
ZW50ID4gMCAmJiAhaGl0U3RhdGVtZW50KGV4ZWMpKSBcCi0gICAgcmV0dXJuIDA7Ci0KICNkZWZp
bmUgS0pTX0NIRUNLRVhDRVBUSU9OIFwKICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSBcCiAg
ICAgcmV0dXJuIHJldGhyb3dFeGNlcHRpb24oZXhlYyk7CkBAIC03MCwxMiArNjYsNiBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICByZXR1cm4gZmFsc2U7IFwKICAgfQogCi0jZGVmaW5lIEtKU19DSEVD
S0VYQ0VQVElPTkxJU1QgXAotICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsgXAotICAgIGhh
bmRsZUV4Y2VwdGlvbihleGVjKTsgXAotICAgIHJldHVybjsgXAotICB9Ci0KICNkZWZpbmUgS0pT
X0NIRUNLRVhDRVBUSU9OVk9JRCBcCiAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeyBcCiAg
ICAgaGFuZGxlRXhjZXB0aW9uKGV4ZWMpOyBcCkBAIC0yMTEsNyArMjAxLDcgQEAgdm9pZCBQYXJz
ZXJSZWZDb3VudGVkOjpkZWxldGVOZXdPYmplY3RzKAogTm9kZTo6Tm9kZSgpCiAgICAgOiBtX2V4
cGVjdGVkUmV0dXJuVHlwZShPYmplY3RUeXBlKQogewotICBtX2xpbmUgPSBsZXhlcigpLmxpbmVO
bygpOworICAgIG1fbGluZSA9IGxleGVyKCkubGluZU5vKCk7CiB9CiAKIE5vZGU6Ok5vZGUoSlNU
eXBlIGV4cGVjdGVkUmV0dXJuKQpAQCAtMzY0LDcgKzM1NCw3IEBAIHZvaWQgTm9kZTo6aGFuZGxl
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXgKICAgICB9CiB9CiAKLUpTVmFsdWUqIE5vZGU6OnJldGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQorTkVWRVJfSU5MSU5FIEpTVmFsdWUqIE5vZGU6
OnJldGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUqIGV4Y2Vw
dGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CkBA
IC0zODYsMTUgKzM3NiwzNSBAQCB2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyhpbnQgZmlyc3RM
aW5lCiAgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOwogfQogCi0vLyBTZXQgbm9ybWFsIGNvbXBs
ZXRpb24gYW5kIHJldHVybiBmYWxzZSBpZiB0aGUgZGVidWdnZXIgd2FudHMgdXMgdG8gc3RvcCBh
dCB0aGlzIHBvaW50LgotLy8gRklYTUU6IFRoaXMgc2VlbXMgbGlrZSBwb29yIG5hbWluZyBhbmQg
c3RyYW5nZSBkZXNpZ24uIFdoeSBmYWxzZSB0byBzdG9wPyBXaHkgImhpdCBzdGF0ZW1lbnQiPwot
Ym9vbCBTdGF0ZW1lbnROb2RlOjpoaXRTdGF0ZW1lbnQoRXhlY1N0YXRlKiBleGVjKQotewotICAg
IERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKTsKLSAgICBpZiAoIWRlYnVnZ2VyIHx8IGRlYnVnZ2VyLT5hdFN0YXRlbWVudChleGVjLCBj
dXJyZW50U291cmNlSWQoZXhlYyksIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKLSAgICBy
ZXR1cm4gZmFsc2U7CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU291cmNlRWxl
bWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBTb3VyY2VFbGVt
ZW50czo6YXBwZW5kKFBhc3NSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50KQoreworICAg
IGlmIChEZWJ1Z2dlcjo6ZGVidWdnZXJzUHJlc2VudCkKKyAgICAgICAgbV9zdGF0ZW1lbnRzLmFw
cGVuZChuZXcgQnJlYWtwb2ludENoZWNrU3RhdGVtZW50KHN0YXRlbWVudCkpOworICAgIGVsc2UK
KyAgICAgICAgbV9zdGF0ZW1lbnRzLmFwcGVuZChzdGF0ZW1lbnQpOworfQorCisvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJlYWtwb2ludENoZWNrU3RhdGVtZW50IC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6QnJl
YWtwb2ludENoZWNrU3RhdGVtZW50KFBhc3NSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50
KQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQoreworICAgIEFTU0VSVChtX3N0YXRlbWVu
dCk7Cit9CisKK0pTVmFsdWUqIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6ZXhlY3V0ZShFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGV4ZWMtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKKyAgICAgICAgaWYgKCFkZWJ1Z2dlci0+YXRT
dGF0ZW1lbnQoZXhlYywgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBtX3N0YXRlbWVudC0+Zmlyc3RM
aW5lKCksIG1fc3RhdGVtZW50LT5sYXN0TGluZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBleGVj
LT5zZXROb3JtYWxDb21wbGV0aW9uKCk7CisgICAgcmV0dXJuIG1fc3RhdGVtZW50LT5leGVjdXRl
KGV4ZWMpOworfQorCit2b2lkIEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudDo6c3RyZWFtVG8oU291
cmNlU3RyZWFtJiBzdHJlYW0pIGNvbnN0Cit7CisgICAgbV9zdGF0ZW1lbnQtPnN0cmVhbVRvKHN0
cmVhbSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdWxsTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MzgsNyArODQ4LDcgQEAg
dm9pZCBBcmd1bWVudExpc3ROb2RlOjpldmFsdWF0ZUxpc3QoRXhlYwogewogICBmb3IgKEFyZ3Vt
ZW50TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkgewogICAgIEpTVmFs
dWUgKnYgPSBuLT5leHByLT5ldmFsdWF0ZShleGVjKTsKLSAgICBLSlNfQ0hFQ0tFWENFUFRJT05M
SVNUCisgICAgS0pTX0NIRUNLRVhDRVBUSU9OVk9JRAogICAgIGxpc3QuYXBwZW5kKHYpOwogICB9
CiB9CkBAIC0zNTUxLDggKzM1NjEsNiBAQCB2b2lkIFZhclN0YXRlbWVudE5vZGU6Om9wdGltaXpl
VmFyaWFibGVBCiAvLyBFQ01BIDEyLjIKIEpTVmFsdWUqIFZhclN0YXRlbWVudE5vZGU6OmV4ZWN1
dGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEtKU19CUkVBS1BPSU5UCi0KICAgICBuZXh0LT5l
dmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KIApAQCAtMzU2MSwyNCArMzU2
OSwyNCBAQCBKU1ZhbHVlKiBWYXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZWNTCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBoYW5kbGlu
ZyBWZWN0b3JzIG9mIFN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdGVtZW50TGlzdFB1c2hGSUZPKFNvdXJjZUVsZW1l
bnRzJiBzdGF0ZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKK3N0
YXRpYyBpbmxpbmUgdm9pZCBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8oU3RhdGVtZW50VmVjdG9yJiBz
dGF0ZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKIHsKLSAgICBT
b3VyY2VFbGVtZW50czo6aXRlcmF0b3IgaXQgPSBzdGF0ZW1lbnRzLmVuZCgpOwotICAgIFNvdXJj
ZUVsZW1lbnRzOjppdGVyYXRvciBiZWdpbiA9IHN0YXRlbWVudHMuYmVnaW4oKTsKKyAgICBTdGF0
ZW1lbnRWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc3RhdGVtZW50cy5lbmQoKTsKKyAgICBTdGF0ZW1l
bnRWZWN0b3I6Oml0ZXJhdG9yIGJlZ2luID0gc3RhdGVtZW50cy5iZWdpbigpOwogICAgIHdoaWxl
IChpdCAhPSBiZWdpbikgewogICAgICAgICAtLWl0OwogICAgICAgICBzdGFjay5hcHBlbmQoKCpp
dCkuZ2V0KCkpOwogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBOb2RlKiBzdGF0ZW1lbnRMaXN0
SW5pdGlhbGl6ZVZhcmlhYmxlQWNjZXNzU3RhY2soU291cmNlRWxlbWVudHMmIHN0YXRlbWVudHMs
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIHN0YWNrKQorc3RhdGljIGlubGluZSBOb2Rl
KiBzdGF0ZW1lbnRMaXN0SW5pdGlhbGl6ZVZhcmlhYmxlQWNjZXNzU3RhY2soU3RhdGVtZW50VmVj
dG9yJiBzdGF0ZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKIHsK
ICAgICBpZiAoIXN0YXRlbWVudHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFNv
dXJjZUVsZW1lbnRzOjppdGVyYXRvciBpdCA9IHN0YXRlbWVudHMuZW5kKCk7Ci0gICAgU291cmNl
RWxlbWVudHM6Oml0ZXJhdG9yIGJlZ2luID0gc3RhdGVtZW50cy5iZWdpbigpOwotICAgIFNvdXJj
ZUVsZW1lbnRzOjppdGVyYXRvciBiZWdpblBsdXNPbmUgPSBiZWdpbiArIDE7CisgICAgU3RhdGVt
ZW50VmVjdG9yOjppdGVyYXRvciBpdCA9IHN0YXRlbWVudHMuZW5kKCk7CisgICAgU3RhdGVtZW50
VmVjdG9yOjppdGVyYXRvciBiZWdpbiA9IHN0YXRlbWVudHMuYmVnaW4oKTsKKyAgICBTdGF0ZW1l
bnRWZWN0b3I6Oml0ZXJhdG9yIGJlZ2luUGx1c09uZSA9IGJlZ2luICsgMTsKICAgICAKICAgICB3
aGlsZSAoaXQgIT0gYmVnaW5QbHVzT25lKSB7CiAgICAgICAgIC0taXQ7CkBAIC0zNTg4LDcgKzM1
OTYsNyBAQCBzdGF0aWMgaW5saW5lIE5vZGUqIHN0YXRlbWVudExpc3RJbml0aWFsCiAgICAgcmV0
dXJuICgqYmVnaW4pLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVu
dExpc3RFeGVjdXRlKFNvdXJjZUVsZW1lbnRzJiBzdGF0ZW1lbnRzLCBFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVudExpc3RFeGVjdXRlKFN0YXRlbWVudFZl
Y3RvciYgc3RhdGVtZW50cywgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUqIHZhbHVl
ID0gMDsKICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRlbWVudHMuc2l6ZSgpOwpAQCAtMzYwNSwyMCAr
MzYxMywyMCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUqIHN0YXRlbWVudExpc3RFeGVjCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBCbG9ja05vZGU6OkJsb2NrTm9kZShTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4pCi0gICAgOiBtX2NoaWxkcmVuKGNoaWxkcmVuID8gY2hpbGRyZW4gOiBuZXcg
U291cmNlRWxlbWVudHMpCiB7Ci0gICAgQVNTRVJUKG1fY2hpbGRyZW4pOworICAgIGlmIChjaGls
ZHJlbikKKyAgICAgICAgY2hpbGRyZW4tPnJlbGVhc2UobV9jaGlsZHJlbik7CiB9CiAKIHZvaWQg
QmxvY2tOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQogewotICAgIHN0YXRlbWVudExpc3RQdXNo
RklGTygqbV9jaGlsZHJlbiwgbm9kZVN0YWNrKTsKKyAgICBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8o
bV9jaGlsZHJlbiwgbm9kZVN0YWNrKTsKIH0KIAogLy8gRUNNQSAxMi4xCiBKU1ZhbHVlKiBCbG9j
a05vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzdGF0ZW1lbnRM
aXN0RXhlY3V0ZSgqbV9jaGlsZHJlbiwgZXhlYyk7CisgICAgcmV0dXJuIHN0YXRlbWVudExpc3RF
eGVjdXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRW1wdHlTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMzY0MCw4ICszNjQ4LDYgQEAgdm9pZCBFeHByU3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJp
YWJsZQogLy8gRUNNQSAxMi40CiBKU1ZhbHVlKiBFeHByU3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgS0pTX0JSRUFLUE9JTlQKLQogICAgIEpTVmFsdWUqIHZh
bHVlID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKQEAg
LTM2NTksOCArMzY2NSw2IEBAIHZvaWQgSWZOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5
bWIKIC8vIEVDTUEgMTIuNQogSlNWYWx1ZSogSWZOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBLSlNfQlJFQUtQT0lOVAotCiAgICAgYm9vbCBiID0gbV9jb25kaXRpb24tPmV2
YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTgogCkBAIC0zNjc4
LDggKzM2ODIsNiBAQCB2b2lkIElmRWxzZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoCiAv
LyBFQ01BIDEyLjUKIEpTVmFsdWUqIElmRWxzZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIEtKU19CUkVBS1BPSU5UOwotCiAgICAgYm9vbCBiID0gbV9jb25kaXRpb24tPmV2
YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTgogCkBAIC0zNzAw
LDggKzM3MDIsNiBAQCB2b2lkIERvV2hpbGVOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzCiAv
LyBFQ01BIDEyLjYuMQogSlNWYWx1ZSogRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIEtKU19CUkVBS1BPSU5UCi0KICAgICBKU1ZhbHVlKiB2YWx1ZSA9IDA7CiAK
ICAgICB3aGlsZSAoMSkgewpAQCAtMzc0NCw4ICszNzQ0LDYgQEAgdm9pZCBXaGlsZU5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoUwogLy8gRUNNQSAxMi42LjIKIEpTVmFsdWUqIFdoaWxlTm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgS0pTX0JSRUFLUE9JTlQKLQogICAg
IEpTVmFsdWUqIHZhbHVlID0gMDsKIAogICAgIHdoaWxlICgxKSB7CkBAIC0zOTQ4LDggKzM5NDYs
NiBAQCBKU1ZhbHVlKiBGb3JJbk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBlCiAvLyBFQ01BIDEy
LjcKIEpTVmFsdWUqIENvbnRpbnVlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
IEtKU19CUkVBS1BPSU5UCi0KICAgaWYgKGlkZW50LmlzRW1wdHkoKSAmJiAhZXhlYy0+aW5JdGVy
YXRpb24oKSkKICAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9y
LCAiSW52YWxpZCBjb250aW51ZSBzdGF0ZW1lbnQuIik7CiAgIGlmICghaWRlbnQuaXNFbXB0eSgp
ICYmICFleGVjLT5zZWVuTGFiZWxzKCktPmNvbnRhaW5zKGlkZW50KSkKQEAgLTM5NjIsOCArMzk1
OCw2IEBAIEpTVmFsdWUqIENvbnRpbnVlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUKIC8vIEVDTUEg
MTIuOAogSlNWYWx1ZSogQnJlYWtOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAg
S0pTX0JSRUFLUE9JTlQKLQogICBpZiAoaWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5pbkl0ZXJh
dGlvbigpICYmICFleGVjLT5pblN3aXRjaCgpKQogICAgIHJldHVybiBzZXRFcnJvckNvbXBsZXRp
b24oZXhlYywgU3ludGF4RXJyb3IsICJJbnZhbGlkIGJyZWFrIHN0YXRlbWVudC4iKTsKICAgaWYg
KCFpZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPnNlZW5MYWJlbHMoKS0+Y29udGFpbnMoaWRlbnQp
KQpAQCAtMzk4Miw4ICszOTc2LDYgQEAgdm9pZCBSZXR1cm5Ob2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKAogLy8gRUNNQSAxMi45CiBKU1ZhbHVlKiBSZXR1cm5Ob2RlOjpleGVjdXRlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgS0pTX0JSRUFLUE9JTlQKLQogICBDb2RlVHlwZSBjb2RlVHlwZSA9
IGV4ZWMtPmNvZGVUeXBlKCk7CiAgIGlmIChjb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCiAgICAg
cmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkludmFsaWQgcmV0
dXJuIHN0YXRlbWVudC4iKTsKQEAgLTQwMDgsOCArNDAwMCw2IEBAIHZvaWQgV2l0aE5vZGU6Om9w
dGltaXplVmFyaWFibGVBY2Nlc3MoU3kKIC8vIEVDTUEgMTIuMTAKIEpTVmFsdWUqIFdpdGhOb2Rl
OjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgS0pTX0JSRUFLUE9JTlQKLQogICBKU1Zh
bHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogICBK
U09iamVjdCAqbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwpAQCAtNDAyNyw4ICs0MDE3LDcgQEAgdm9p
ZCBDYXNlQ2xhdXNlTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjYwogewogICAgIGlmIChleHByKQog
ICAgICAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOwotICAgIGlmIChtX2NoaWxkcmVu
KQotICAgICAgICBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8oKm1fY2hpbGRyZW4sIG5vZGVTdGFjayk7
CisgICAgc3RhdGVtZW50TGlzdFB1c2hGSUZPKG1fY2hpbGRyZW4sIG5vZGVTdGFjayk7CiB9CiAK
IC8vIEVDTUEgMTIuMTEKQEAgLTQwNDMsOSArNDAzMiw3IEBAIEpTVmFsdWUgKkNhc2VDbGF1c2VO
b2RlOjpldmFsdWF0ZShFeGVjU3QKIC8vIEVDTUEgMTIuMTEKIEpTVmFsdWUqIENhc2VDbGF1c2VO
b2RlOjpleGVjdXRlU3RhdGVtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIGlmIChtX2NoaWxk
cmVuKQotICAgIHJldHVybiBzdGF0ZW1lbnRMaXN0RXhlY3V0ZSgqbV9jaGlsZHJlbiwgZXhlYyk7
Ci0gIHJldHVybiBleGVjLT5zZXROb3JtYWxDb21wbGV0aW9uKCk7CisgICAgcmV0dXJuIHN0YXRl
bWVudExpc3RFeGVjdXRlKG1fY2hpbGRyZW4sIGV4ZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gQ2xhdXNlTGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtNDE0NSw4ICs0MTMyLDYgQEAgdm9pZCBTd2l0Y2hOb2RlOjpvcHRpbWl6ZVZh
cmlhYmxlQWNjZXNzKAogLy8gRUNNQSAxMi4xMQogSlNWYWx1ZSogU3dpdGNoTm9kZTo6ZXhlY3V0
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEtKU19CUkVBS1BPSU5UCi0KICAgSlNWYWx1ZSAqdiA9
IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KIApAQCAtNDE4OSw4
ICs0MTc0LDYgQEAgdm9pZCBUaHJvd05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoUwogLy8g
RUNNQSAxMi4xMwogSlNWYWx1ZSogVGhyb3dOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgS0pTX0JSRUFLUE9JTlQKLQogICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhl
Yyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogCkBAIC00MjExLDggKzQxOTQsNiBAQCB2b2lkIFRy
eU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltCiAvLyBFQ01BIDEyLjE0CiBKU1ZhbHVl
KiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgS0pTX0JSRUFLUE9JTlQK
LQogICBKU1ZhbHVlKiByZXN1bHQgPSB0cnlCbG9jay0+ZXhlY3V0ZShleGVjKTsKIAogICBpZiAo
Q29sbGVjdG9yOjppc091dE9mTWVtb3J5KCkpCkBAIC00MzQwLDcgKzQzMjEsNyBAQCB2b2lkIFBy
b2dyYW1Ob2RlOjppbml0aWFsaXplU3ltYm9sVGFibGUoCiB2b2lkIFNjb3BlTm9kZTo6b3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayBub2RlU3RhY2s7Ci0gICAgTm9kZSogbm9kZSA9IHN0YXRlbWVudExpc3RJ
bml0aWFsaXplVmFyaWFibGVBY2Nlc3NTdGFjaygqbV9jaGlsZHJlbiwgbm9kZVN0YWNrKTsKKyAg
ICBOb2RlKiBub2RlID0gc3RhdGVtZW50TGlzdEluaXRpYWxpemVWYXJpYWJsZUFjY2Vzc1N0YWNr
KG1fY2hpbGRyZW4sIG5vZGVTdGFjayk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkocmV2aXNpb24gMjg5MzUpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvbm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw2IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIgJmlkKSBLSlNf
RkFTVF9DQUxMIHsgbHMucHVzaChpZCk7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lv
bjsgfQogICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBoaXRTdGF0ZW1lbnQoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICBMYWJlbFN0YWNrIGxzOwogICBwcml2YXRlOgogICAgIGludCBtX2xh
c3RMaW5lOwpAQCAtMTczNCwyNiArMTczMywxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBSZWZQ
dHI8VmFyRGVjbE5vZGU+IG5leHQ7CiAgIH07CiAKLSAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0
YXRlbWVudE5vZGU+ID4gU291cmNlRWxlbWVudHM7CisgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxT
dGF0ZW1lbnROb2RlPiA+IFN0YXRlbWVudFZlY3RvcjsKKworICAgIGNsYXNzIFNvdXJjZUVsZW1l
bnRzIDogcHVibGljIFBhcnNlclJlZkNvdW50ZWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdm9p
ZCBhcHBlbmQoUGFzc1JlZlB0cjxTdGF0ZW1lbnROb2RlPik7CisgICAgICAgIHZvaWQgcmVsZWFz
ZShTdGF0ZW1lbnRWZWN0b3ImIGRlc3RpbmF0aW9uKSB7IG1fc3RhdGVtZW50cy5zd2FwKGRlc3Rp
bmF0aW9uKTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFN0YXRlbWVudFZlY3RvciBtX3N0YXRl
bWVudHM7CisgICAgfTsKIAotICBjbGFzcyBTb3VyY2VFbGVtZW50c1N0dWIgOiBwdWJsaWMgTm9k
ZSB7Ci0gIHB1YmxpYzoKLSAgICBTb3VyY2VFbGVtZW50c1N0dWIoKQotICAgICAgOiBtX3NvdXJj
ZUVsZW1lbnRzKG5ldyBTb3VyY2VFbGVtZW50cykKLSAgICAgIHt9Ci0gICAgdm9pZCBhcHBlbmQo
U3RhdGVtZW50Tm9kZSogZWxlbWVudCkgeyBtX3NvdXJjZUVsZW1lbnRzLT5hcHBlbmQoZWxlbWVu
dCk7IH0KLSAgICBTb3VyY2VFbGVtZW50cyogcmVsZWFzZSgpIHsgCi0gICAgICAgIFNvdXJjZUVs
ZW1lbnRzKiBlbGVtcyA9IG1fc291cmNlRWxlbWVudHMucmVsZWFzZSgpOyAKLSAgICAgICAgcmV0
dXJuIGVsZW1zOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTCAgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTCAgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IFByZWNFeHByZXNzaW9uOyB9Ci0gIHByaXZhdGU6Ci0gICAgT3duUHRyPFNvdXJjZUVsZW1lbnRz
PiBtX3NvdXJjZUVsZW1lbnRzOwotICB9OwotICAgIAogICBjbGFzcyBCbG9ja05vZGUgOiBwdWJs
aWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKICAgICBCbG9ja05vZGUoU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTc2MSw3ICsxNzUwLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19G
QVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CiAgIHByb3RlY3RlZDoKLSAgICBPd25QdHI8U291cmNlRWxlbWVudHM+
IG1fY2hpbGRyZW47CisgICAgU3RhdGVtZW50VmVjdG9yIG1fY2hpbGRyZW47CiAgIH07CiAKICAg
Y2xhc3MgRW1wdHlTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtMjA1
OSw3ICsyMDQ4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICAgIENhc2VDbGF1
c2VOb2RlKEV4cHJlc3Npb25Ob2RlKiBlKSBLSlNfRkFTVF9DQUxMIDogZXhwcihlKSB7IH0KICAg
ICAgIENhc2VDbGF1c2VOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4pIEtKU19GQVNUX0NBTEwKLSAgICAgIDogZXhwcihlKSwgbV9jaGlsZHJlbihjaGlsZHJl
bikgeyB9CisgICAgICA6IGV4cHIoZSkgeyBpZiAoY2hpbGRyZW4pIGNoaWxkcmVuLT5yZWxlYXNl
KG1fY2hpbGRyZW4pOyB9CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9D
QUxMOwogICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQpAQCAtMjA2
OSw3ICsyMDU4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgcHJpdmF0ZToKICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKLSAgICAgIE93blB0cjxTb3VyY2VFbGVtZW50cz4gbV9j
aGlsZHJlbjsKKyAgICAgIFN0YXRlbWVudFZlY3RvciBtX2NoaWxkcmVuOwogICB9OwogICAKICAg
ICBjbGFzcyBDbGF1c2VMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKQEAgLTIxMTIsNyArMjEwMSwx
NiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsK
ICAgICAgIFJlZlB0cjxDYXNlQmxvY2tOb2RlPiBibG9jazsKICAgfTsKLSAgCisKKyAgICBjbGFz
cyBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CisgICAg
cHVibGljOgorICAgICAgICBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQoUGFzc1JlZlB0cjxTdGF0
ZW1lbnROb2RlPikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVj
dXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKKyAgICB9OworCiAgIHN0
cnVjdCBFbGVtZW50TGlzdCB7CiAgICAgICBFbGVtZW50Tm9kZSogaGVhZDsKICAgICAgIEVsZW1l
bnROb2RlKiB0YWlsOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lubGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaAkocmV2aXNpb24g
Mjg5MzUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvQWx3YXlzSW5saW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
bGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDMgKzI3LDExIEBACiAjZGVmaW5lIEFMV0FZ
U19JTkxJTkUgaW5saW5lCiAjZW5kaWYKICNlbmRpZgorCisjaWZuZGVmIE5FVkVSX0lOTElORQor
I2lmIENPTVBJTEVSKEdDQykKKyNkZWZpbmUgTkVWRVJfSU5MSU5FIF9fYXR0cmlidXRlX18gKChf
X25vaW5saW5lX18pKQorI2Vsc2UKKyNkZWZpbmUgTkVWRVJfSU5MSU5FCisjZW5kaWYKKyNlbmRp
ZgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oCShyZXZpc2lvbiAyODkzNSkKKysrIEphdmFT
Y3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw2IEBA
CiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KIC8qCi0gKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTMxLDkgKzMwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gUGFzc1Jl
ZlB0cjxUPiBhZG9wdFJlZihUKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAKLSAgICBj
bGFzcyBQYXNzUmVmUHRyCi0gICAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBh
c3NSZWZQdHIgewogICAgIHB1YmxpYzoKICAgICAgICAgUGFzc1JlZlB0cigpIDogbV9wdHIoMCkg
e30KICAgICAgICAgUGFzc1JlZlB0cihUKiBwdHIpIDogbV9wdHIocHRyKSB7IGlmIChwdHIpIHB0
ci0+cmVmKCk7IH0KQEAgLTUxLDYgKzQ4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIAog
ICAgICAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCisgICAgICAgIHZvaWQg
Y2xlYXIoKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcHRyLT5kZXJlZigpOyBtX3B0ciA9IDA7IH0K
ICAgICAgICAgVCogcmVsZWFzZVJlZigpIGNvbnN0IHsgVCogdG1wID0gbV9wdHI7IG1fcHRyID0g
MDsgcmV0dXJuIHRtcDsgfQogCiAgICAgICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
ICptX3B0cjsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHIuaAkocmV2aXNpb24gMjg5MzUpCisrKyBKYXZh
U2NyaXB0Q29yZS93dGYvUmVmUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDIwICszNCwyMSBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRy
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlZlB0cigpIDogbV9wdHIoMCkge30KLSAgICAgICAg
UmVmUHRyKFQgKnB0cikgOiBtX3B0cihwdHIpIHsgaWYgKHB0cikgcHRyLT5yZWYoKTsgfQotICAg
ICAgICBSZWZQdHIoY29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQgKnB0
ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9CisgICAgICAgIFJlZlB0cihUKiBwdHIpIDogbV9wdHIo
cHRyKSB7IGlmIChwdHIpIHB0ci0+cmVmKCk7IH0KKyAgICAgICAgUmVmUHRyKGNvbnN0IFJlZlB0
ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcHRyLT5yZWYoKTsg
fQogICAgICAgICAvLyBzZWUgY29tbWVudCBpbiBQYXNzUmVmUHRyLmggZm9yIHdoeSB0aGlzIHRh
a2VzIGNvbnN0IHJlZmVyZW5jZQogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gUmVmUHRy
KGNvbnN0IFBhc3NSZWZQdHI8VT4mKTsKIAogICAgICAgICAvLyBTcGVjaWFsIGNvbnN0cnVjdG9y
IGZvciBjYXNlcyB3aGVyZSB3ZSBvdmVyd3JpdGUgYW4gb2JqZWN0IGluIHBsYWNlLgogICAgICAg
ICBSZWZQdHIoUGxhY2VtZW50TmV3QWRvcHRUeXBlKSB7IH0KIAotICAgICAgICB+UmVmUHRyKCkg
eyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgfQorICAgICAgICB+UmVmUHRyKCkg
eyBpZiAoVCogcHRyID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgfQogICAgICAgICAKLSAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDogbV9wdHIo
by5nZXQoKSkgeyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+cmVmKCk7IH0KKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDogbV9wdHIoby5n
ZXQoKSkgeyBpZiAoVCogcHRyID0gbV9wdHIpIHB0ci0+cmVmKCk7IH0KICAgICAgICAgCi0gICAg
ICAgIFQgKmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgICAgIFQqIGdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFyKCkgeyBp
ZiAoVCogcHRyID0gbV9wdHIpIHB0ci0+ZGVyZWYoKTsgbV9wdHIgPSAwOyB9CiAgICAgICAgIFBh
c3NSZWZQdHI8VD4gcmVsZWFzZSgpIHsgUGFzc1JlZlB0cjxUPiB0bXAgPSBhZG9wdFJlZihtX3B0
cik7IG1fcHRyID0gMDsgcmV0dXJuIHRtcDsgfQogCiAgICAgICAgIFQmIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuICptX3B0cjsgfQpAQCAtNTYsMTEgKzU3LDExIEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQogICAg
IAogICAgICAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNv
bnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCi0gICAgICAg
IHR5cGVkZWYgVCAqIChSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKSgpIGNvbnN0OworICAg
ICAgICB0eXBlZGVmIFQqIChSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKSgpIGNvbnN0Owog
ICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9w
dHIgPyAmUmVmUHRyOjpnZXQgOiAwOyB9CiAgICAgICAgIAogICAgICAgICBSZWZQdHImIG9wZXJh
dG9yPShjb25zdCBSZWZQdHImKTsKLSAgICAgICAgUmVmUHRyJiBvcGVyYXRvcj0oVCAqKTsKKyAg
ICAgICAgUmVmUHRyJiBvcGVyYXRvcj0oVCopOwogICAgICAgICBSZWZQdHImIG9wZXJhdG9yPShj
b25zdCBQYXNzUmVmUHRyPFQ+Jik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBSZWZQ
dHImIG9wZXJhdG9yPShjb25zdCBSZWZQdHI8VT4mKTsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+IFJlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8VT4mKTsKQEAgLTE3MSwx
MiArMTcyLDEyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29u
c3QgUmVmUHRyPFU+JiBwKQogICAgIHsgCi0gICAgICAgIHJldHVybiBSZWZQdHI8VD4oc3RhdGlj
X2Nhc3Q8VCAqPihwLmdldCgpKSk7IAorICAgICAgICByZXR1cm4gUmVmUHRyPFQ+KHN0YXRpY19j
YXN0PFQqPihwLmdldCgpKSk7IAogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+IGNvbnN0X3BvaW50ZXJfY2FzdChjb25zdCBSZWZQ
dHI8VT4mIHApCiAgICAgeyAKLSAgICAgICAgcmV0dXJuIFJlZlB0cjxUPihjb25zdF9jYXN0PFQg
Kj4ocC5nZXQoKSkpOyAKKyAgICAgICAgcmV0dXJuIFJlZlB0cjxUPihjb25zdF9jYXN0PFQqPihw
LmdldCgpKSk7IAogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCog
Z2V0UHRyKGNvbnN0IFJlZlB0cjxUPiYgcCkK
</data>
<flag name="review"
          id="7825"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>