<?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>16471</bug_id>
          
          <creation_ts>2007-12-17 03:31:15 -0800</creation_ts>
          <short_desc>Completions need to be smaller (or not exist at all)</short_desc>
          <delta_ts>2007-12-20 13:58:00 -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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>64502</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-17 03:31:15 -0800</bug_when>
    <thetext>Completions need to be smaller (or not exist at all)

Looking at the Shark samples, it seems to me we&apos;re spending a significant amount of time copying completions around (during the return from an execute() call).  Perhaps I&apos;m reading the asm wrong, and it&apos;s simply virtual function call overhead, but I think if we make Completions smaller (i.e. remove the m_target member, and possibly even the type -- thus just turning all executes into evaluates and storing the type and target on the ExecState), we&apos;d see a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64504</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-17 03:47:51 -0800</bug_when>
    <thetext>Yeah, looking again at the asm, I&apos;m quite certain we&apos;re spending tons of extra time copying these return values onto the stack after each function call.  Most of the time all we care about is the value.  Storing the completion type and target on the ExecState and just returning a value could be a large win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64788</commentid>
    <comment_count>2</comment_count>
      <attachid>18003</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-20 01:51:38 -0800</bug_when>
    <thetext>Created attachment 18003
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64790</commentid>
    <comment_count>3</comment_count>
      <attachid>18003</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-20 03:13:13 -0800</bug_when>
    <thetext>Comment on attachment 18003
patch

Ok, first of all, this is an absolutely wonderful change!  2.4%, wow.

I have two nits:

First,
CaseClauseNode::executeStatements:
seems strange that that returns jsUndefined() instead of 0 (like other excute statements).  I didn&apos;t follow the logic all the way through to see if jsUndefined was necessary in this case.


Second,
I dislike exposing of setCompletionType.  I think that doing so is error prone, and leads to less-clean code.

I like your use of setErrorCompletion and setBreakCompletion and would suggest changing the expected for *all* completion returns to:

return setNormalCompletion(ret);
return setNormalCompletion();
return setThrowCompletion(val);
return setInteruptedCompletion();

That would basically make setCompletionType an &quot;implementation detail&quot; and in all cases (except perhaps due to try/catch/finally) could be a private method on ExecState.  It would also turn current 2-line statements of:
setInteruptedCompletion()
return 0;

into a single line:
return setInterupedCompletion();


Oh, and also:
I kinda laughed at &quot;continueDoLoop&quot;, I probably would have named it doWhileLoop. :)

Oh, and if you change to use the &quot;return setNormalCompletion();&quot; idiom, you would end up make hitStatement() not alter the completion type directly.  (which looks kinda odd to me currently).

Great patch.  Landable as is.  I&apos;d prefer to see it change to the return set*Completion(); idiom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64813</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-20 07:38:51 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; CaseClauseNode::executeStatements:
&gt; seems strange that that returns jsUndefined() instead of 0 (like other excute
&gt; statements).  I didn&apos;t follow the logic all the way through to see if
&gt; jsUndefined was necessary in this case.

I noticed and preserved this strangeness because it was not relevant to performance and I didn&apos;t feel I should make a correctness fix without a test case.

&gt; I dislike exposing of setCompletionType.  I think that doing so is error prone,
&gt; and leads to less-clean code.

I share your bias. An earlier version of the patch had separate calls for separate completions, although they didn&apos;t have the return value trick.

I added setCompletionType because of TryNode::execute, and I won&apos;t be able to remove it because of that function.

What I didn&apos;t think of was including the JSValue pointers to avoid the multiple line return statements. I think that&apos;s a good idea.

&gt; Oh, and if you change to use the &quot;return setNormalCompletion();&quot; idiom, you
&gt; would end up make hitStatement() not alter the completion type directly. 
&gt; (which looks kinda odd to me currently).

No, I won&apos;t change that; it would make the code bigger for debugging -- it&apos;s a feature that the code to set the completion type for the debugger case is not compiled in-line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64865</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-12-20 13:58:00 -0800</bug_when>
    <thetext>r28907</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18003</attachid>
            <date>2007-12-20 01:51:38 -0800</date>
            <delta_ts>2007-12-20 03:13:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>CompletionPatch.txt</filename>
            <type>text/plain</type>
            <size>54140</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4ODg1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODkgQEAKKzIwMDctMTItMjAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0NzEKKyAgICAgICAgICBDb21wbGV0aW9ucyBuZWVkIHRvIGJlIHNtYWxsZXIgKG9yIG5vdCBl
eGlzdCBhdCBhbGwpCisKKyAgICAgICAgU3VTcGlkZXIgc2hvd3MgMi40JSBzcGVlZHVwLgorCisg
ICAgICAgIFN0b3AgdXNpbmcgY29tcGxldGlvbnMgaW4gdGhlIGV4ZWN1dGlvbiBlbmdpbmUuCisg
ICAgICAgIEluc3RlYWQsIHRoZSBjb21wbGV0aW9uIHR5cGUgYW5kIGxhYmVsIHRhcmdldCBhcmUg
Ym90aAorICAgICAgICBzdG9yZWQgaW4gdGhlIEV4ZWNTdGF0ZS4KKworICAgICAgICAqIEFQSS9K
U0NvbnRleHRSZWYuY3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgImNvbXBsZXRpb24u
aCIuCisgICAgICAgICogYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwOiBSZW1vdmVkIHVudXNl
ZCBleGVjdXRlIGZ1bmN0aW9uLgorICAgICAgICAqIGJpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmg6
IERpdHRvLgorCisgICAgICAgICoga2pzL0V4ZWNTdGF0ZS5oOiBBZGRlZCBjb21wbGV0aW9uVHlw
ZSwgYnJlYWtPckNvbnRpbnV0ZVRhcmdldCwKKyAgICAgICAgc2V0Q29tcGxldGlvblR5cGUsIHNl
dEJyZWFrQ29tcGxldGlvbiwgc2V0Q29udGludWVDb21wbGV0aW9uLAorICAgICAgICBtX2NvbXBs
ZXRpb25UeXBlLCBtX2JyZWFrT3JDb250aW51ZVRhcmdldC4KKworICAgICAgICAqIGtqcy9jb21w
bGV0aW9uLmg6IFJlbW92ZWQgY29uc3RydWN0b3IgYW5kIGdldHRlciBmb3IgdGFyZ2V0CisgICAg
ICAgIGZvciBicmVhayBhbmQgY29udGludWUgZnJvbSBDb21wbGV0aW9uLiBUaGlzIGNsYXNzIGlz
IG5vdyBvbmx5CisgICAgICAgIHVzZWQgZm9yIHRoZSBwdWJsaWMgQVBJIHRvIEludGVycHJldGVy
IGFuZCBzdWNoLgorCisgICAgICAgICoga2pzL2RhdGVfb2JqZWN0Lmg6IFJlbW92ZWQgdW51c2Vk
IGV4ZWN1dGUgZnVuY3Rpb24uCisKKyAgICAgICAgKiBranMvZnVuY3Rpb24uY3BwOgorICAgICAg
ICAoS0pTOjpGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24pOiBSZW1vdmVkIHNvbWUgdW5uZWVk
ZWQKKyAgICAgICAgZXhjZXB0aW9uIHByb2Nlc3NpbmcuIFVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3
IGV4ZWN1dGUgZnVuY3Rpb24KKyAgICAgICAgYW5kIHRvIGdldCB0aGUgY29tcGxldGlvbiB0eXBl
IGZyb20gdGhlIEV4ZWNTdGF0ZS4gTWVyZ2VkIGluCisgICAgICAgIHRoZSBleGVjdXRlIGZ1bmN0
aW9uLCB3aGljaCByZXBlYXRlZCBzb21lIG9mIHRoZSBzYW1lIGxvZ2ljIGFuZAorICAgICAgICB3
YXMgY2FsbGVkIG9ubHkgZnJvbSBoZXJlLgorICAgICAgICAoS0pTOjpHbG9iYWxGdW5jSW1wOjpj
YWxsQXNGdW5jdGlvbik6IE1vcmUgb2YgdGhlIHNhbWUgZm9yIGV2YWwuCisgICAgICAgICoga2pz
L2Z1bmN0aW9uLmg6IFJlbW92ZWQgZXhlY3V0ZS4KKworICAgICAgICAqIGtqcy9pbnRlcnByZXRl
ci5jcHA6CisgICAgICAgIChLSlM6OkludGVycHJldGVyOjpldmFsdWF0ZSk6IEFkZGVkIGNvZGUg
dG8gY29udmVydCB0aGUgcmVzdWx0IG9mCisgICAgICAgIGV4ZWN1dCBpbnRvIGEgQ29tcGxldGlv
bi4KKworICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChLSlM6Ok5vZGU6OnNldEVy
cm9yQ29tcGxldGlvbik6IFJlbmFtZWQgZnJvbSBjcmVhdGVFcnJvckNvbXBsZXRpb24uCisgICAg
ICAgIE5vdyBzZXRzIHRoZSBjb21wbGV0aW9uIHR5cGUgaW4gdGhlIEV4ZWNTdGF0ZS4KKyAgICAg
ICAgKEtKUzo6Tm9kZTo6cmV0aHJvd0V4Y2VwdGlvbik6IE5vdyBzZXRzIHRoZSBjb21wbGV0aW9u
IHR5cGUgaW4gdGhlCisgICAgICAgIEV4ZWNTdGF0ZS4KKyAgICAgICAgKEtKUzo6U3RhdGVtZW50
Tm9kZTo6aGl0U3RhdGVtZW50KTogTm93IHNldHMgdGhlIGNvbXBsZXRpb24gdHlwZSBpbgorICAg
ICAgICB0aGUgRXhlY1N0YXRlLgorICAgICAgICAoS0pTOjpWYXJTdGF0ZW1lbnROb2RlOjpleGVj
dXRlKTogVXBkYXRlZCB0byBwdXQgY29tcGxldGlvbiB0eXBlIGluCisgICAgICAgIHRoZSBFeGVj
U3RhdGUgaW5zdGVhZCBvZiBhIENvbXBsZXRpb24gb2JqZWN0LgorICAgICAgICAoS0pTOjpzdGF0
ZW1lbnRMaXN0RXhlY3V0ZSk6IERpdHRvLiBBbHNvIGNoYW5nZWQgdGhlIGZvciBsb29wIHRvIHVz
ZQorICAgICAgICBpbmRpY2VzIGluc3RlYWQgb2YgaXRlcmF0b3JzLgorICAgICAgICAoS0pTOjpC
bG9ja05vZGU6OmV4ZWN1dGUpOiBVcGRhdGVkIHJldHVybiB0eXBlLgorICAgICAgICAoS0pTOjpF
bXB0eVN0YXRlbWVudE5vZGU6OmV4ZWN1dGUpOiBVcGRhdGVkIHRvIHB1dCBjb21wbGV0aW9uIHR5
cGUgaW4KKyAgICAgICAgdGhlIEV4ZWNTdGF0ZSBpbnN0ZWFkIG9mIGEgQ29tcGxldGlvbiBvYmpl
Y3QuCisgICAgICAgIChLSlM6OkV4cHJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKTogRGl0dG8uCisg
ICAgICAgIChLSlM6OklmTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpEb1do
aWxlTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLiBBbHNvIHN0cmVhbWxpbmVkIHRoZSBsb2dpYyBhIGxp
dHRsZQorICAgICAgICB0byBtYWtlIHRoZSBub3JtYWwgY2FzZSBhIGxpdHRsZSBmYXN0ZXIgYW5k
IG1vdmVkIHRoZSBlbmQgb3V0c2lkZSB0aGUKKyAgICAgICAgbG9vcCBzbyB0aGF0ICJicmVhayIg
Y2FuIGRvIGEgYnJlYWsuCisgICAgICAgIChLSlM6OldoaWxlTm9kZTo6ZXhlY3V0ZSk6IERpdHRv
LgorICAgICAgICAoS0pTOjpGb3JOb2RlOjpleGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6
OkZvckluTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpDb250aW51ZU5vZGU6
OmV4ZWN1dGUpOiBVcGRhdGVkIHRvIHB1dCBjb21wbGV0aW9uIHR5cGUgaW4KKyAgICAgICAgdGhl
IEV4ZWNTdGF0ZSBpbnN0ZWFkIG9mIGEgQ29tcGxldGlvbiBvYmplY3QuCisgICAgICAgIChLSlM6
OkJyZWFrTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpSZXR1cm5Ob2RlOjpl
eGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6OldpdGhOb2RlOjpleGVjdXRlKTogRGl0dG8u
CisgICAgICAgIChLSlM6OkNhc2VDbGF1c2VOb2RlOjpleGVjdXRlU3RhdGVtZW50cyk6IERpdHRv
LiBBbHNvIHJlbmFtZWQgdG8gaGF2ZQorICAgICAgICBleGVjdXRlIGluIGl0cyBuYW1lIHRvIHJl
ZmxlY3QgdGhlIGZhY3QgdGhhdCBpdCdzIGEgbWVtYmVyIG9mIHRoZSBzYW1lCisgICAgICAgIGZh
bWlseSBvZiBmdW5jdGlvbnMuCisgICAgICAgIChLSlM6OkNhc2VCbG9ja05vZGU6OmV4ZWN1dGVC
bG9jayk6IERpdHRvLgorICAgICAgICAoS0pTOjpTd2l0Y2hOb2RlOjpleGVjdXRlKTogRGl0dG8u
CisgICAgICAgIChLSlM6OkxhYmVsTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pT
OjpUaHJvd05vZGU6OmV4ZWN1dGUpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6VHJ5Tm9kZTo6ZXhl
Y3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpQcm9ncmFtTm9kZTo6ZXhlY3V0ZSk6IERpdHRv
LgorICAgICAgICAoS0pTOjpFdmFsTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorICAgICAgICAoS0pT
OjpGdW5jdGlvbkJvZHlOb2RlOjpleGVjdXRlKTogRGl0dG8uCisgICAgICAgIChLSlM6OkZ1bmNE
ZWNsTm9kZTo6ZXhlY3V0ZSk6IERpdHRvLgorCisgICAgICAgICoga2pzL25vZGVzLmg6IFJlbmFt
ZWQgc2V0RXJyb3JDb21wbGV0aW9uIHRvIGNyZWF0ZUVycm9yQ29tcGxldGlvbiwgbWFkZQorICAg
ICAgICBoaXRTdGF0ZW1lbnQgcHJvdGVjdGVkLCBjaGFuZ2VkIHJldHVybiB2YWx1ZSBvZiBleGVj
dXRlIHRvIGEgSlNWYWx1ZSwKKyAgICAgICAgcmVuYW1lZCBldmFsU3RhdGVtZW50cyB0byBleGVj
dXRlU3RhdGVtZW50cywgYW5kIGV2YWxCbG9jayB0byBleGVjdXRlQmxvY2suCisKKyAgICAgICAg
KiBranMvbnVtYmVyX29iamVjdC5oOiBSZW1vdmVkIHVudXNlZCBleGVjdXRlIGZ1bmN0aW9uLgor
CiAyMDA3LTEyLTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGludXggYnVpbGQgZml4OiBjb25maWcuaCBoYXMgdG8gY29tZSBmaXJzdC4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lvbiAyODg4NSkKKysrIEphdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2
IEBACiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYu
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgImNvbXBsZXRpb24uaCIK
ICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIApJbmRleDog
SmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMjg4
ODUpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDggKzkyLDMgQEAgSlNWYWx1ZSAqUnVudGltZU1ldGhvZDo6Y2FsbEFz
RnVuY3Rpb24oRQogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICByZXR1cm4gYVZhbHVlOwogfQot
Ci1Db21wbGV0aW9uIFJ1bnRpbWVNZXRob2Q6OmV4ZWN1dGUoRXhlY1N0YXRlKikKLXsKLSAgICBy
ZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIGpzVW5kZWZpbmVkKCkpOwotfQpJbmRleDogSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAyODg4NSkKKysrIEph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDkgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKLQotY2xhc3MgUnVudGltZU1ldGhv
ZCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIAoteworY2xhc3MgUnVudGltZU1ldGhvZCA6
IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKIHB1YmxpYzoKICAgICBSdW50aW1lTWV0aG9k
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmbiwgQmluZGluZ3M6Ok1ldGhvZExp
c3QgJm1ldGhvZExpc3QpOwogICAgIApAQCAtNDIsOCArNDAsNiBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCi0gICAgdmlydHVhbCBDb21wbGV0aW9uIGV4
ZWN1dGUoRXhlY1N0YXRlICpleGVjKTsKLQogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZSAq
bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHJldmlz
aW9uIDI4ODg1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDgsNyArMTA4LDMzIEBAIG5hbWVzcGFjZSBLSlMgIHsKICAgICAgICAgY29uc3Qg
Q29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9wcm9w
ZXJ0eU5hbWVzOyB9CiAKICAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UoKSB7IHJl
dHVybiAqbV9sb2NhbFN0b3JhZ2U7IH0KLSAgICAKKworICAgICAgICAvLyBUaGVzZSBhcmUgb25s
eSB2YWxpZCByaWdodCBhZnRlciBjYWxsaW5nIGV4ZWN1dGUoKS4KKyAgICAgICAgQ29tcGxUeXBl
IGNvbXBsZXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb21wbGV0aW9uVHlwZTsgfQorICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBicmVha09yQ29udGludWVUYXJnZXQoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9jb21wbGV0aW9uVHlwZSA9PSBCcmVhayB8fCBt
X2NvbXBsZXRpb25UeXBlID09IENvbnRpbnVlKTsKKyAgICAgICAgICAgIHJldHVybiAqbV9icmVh
a09yQ29udGludWVUYXJnZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IGZvciB1c2Ug
aW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGV4ZWN1dGUoKS4KKyAgICAgICAgdm9pZCBzZXRDb21w
bGV0aW9uVHlwZShDb21wbFR5cGUgdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KHR5cGUgIT0gQnJlYWspOworICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQ29udGludWUpOwor
ICAgICAgICAgICAgbV9jb21wbGV0aW9uVHlwZSA9IHR5cGU7CisgICAgICAgIH0KKyAgICAgICAg
dm9pZCBzZXRCcmVha0NvbXBsZXRpb24oY29uc3QgSWRlbnRpZmllciogdGFyZ2V0KQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2NvbXBsZXRpb25UeXBlID0gQnJlYWs7CisgICAgICAgICAgICBt
X2JyZWFrT3JDb250aW51ZVRhcmdldCA9IHRhcmdldDsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IHNldENvbnRpbnVlQ29tcGxldGlvbihjb25zdCBJZGVudGlmaWVyKiB0YXJnZXQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fY29tcGxldGlvblR5cGUgPSBDb250aW51ZTsKKyAgICAgICAgICAg
IG1fYnJlYWtPckNvbnRpbnVlVGFyZ2V0ID0gdGFyZ2V0OworICAgICAgICB9CisKICAgICBwdWJs
aWM6CiAgICAgICAgIEV4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYiwgSlNPYmplY3QqIHRo
aXNWLAogICAgICAgICAgICAgICAgICAgU2NvcGVOb2RlKiBzY29wZU5vZGUsIENvZGVUeXBlIHR5
cGUgPSBHbG9iYWxDb2RlLApAQCAtMTQxLDYgKzE2Nyw5IEBAIG5hbWVzcGFjZSBLSlMgIHsKICAg
ICAgICAgaW50IG1faXRlcmF0aW9uRGVwdGg7CiAgICAgICAgIGludCBtX3N3aXRjaERlcHRoOwog
ICAgICAgICBDb2RlVHlwZSBtX2NvZGVUeXBlOworCisgICAgICAgIENvbXBsVHlwZSBtX2NvbXBs
ZXRpb25UeXBlOworICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBtX2JyZWFrT3JDb250aW51ZVRh
cmdldDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9jb21wbGV0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2NvbXBs
ZXRpb24uaAkocmV2aXNpb24gMjg4ODUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvY29tcGxldGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAKIG5hbWVzcGFjZSBLSlMgewog
Ci0gIGNsYXNzIElkZW50aWZpZXI7CiAgIGNsYXNzIEpTVmFsdWU7CiAKICAgZW51bSBDb21wbFR5
cGUgeyBOb3JtYWwsIEJyZWFrLCBDb250aW51ZSwgUmV0dXJuVmFsdWUsIFRocm93LCBJbnRlcnJ1
cHRlZCB9OwpAQCAtNDQsMjAgKzQzLDE1IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBDb21w
bGV0aW9uIHsKICAgcHVibGljOgogICAgIENvbXBsZXRpb24oQ29tcGxUeXBlIHR5cGUgPSBOb3Jt
YWwsIEpTVmFsdWUqIHZhbHVlID0gMCkKLSAgICAgICAgOiBtX3R5cGUodHlwZSksIG1fdmFsdWUo
dmFsdWUpLCBtX3RhcmdldCgwKSB7IH0KLSAgICBDb21wbGV0aW9uKENvbXBsVHlwZSB0eXBlLCBj
b25zdCBJZGVudGlmaWVyKiB0YXJnZXQpCi0gICAgICAgIDogbV90eXBlKHR5cGUpLCBtX3ZhbHVl
KDApLCBtX3RhcmdldCh0YXJnZXQpIHsgfQorICAgICAgICA6IG1fdHlwZSh0eXBlKSwgbV92YWx1
ZSh2YWx1ZSkgeyB9CiAKICAgICBDb21wbFR5cGUgY29tcGxUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAgICAgSlNWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
CiAgICAgdm9pZCBzZXRWYWx1ZShKU1ZhbHVlKiB2KSB7IG1fdmFsdWUgPSB2OyB9Ci0gICAgY29u
c3QgSWRlbnRpZmllciYgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gKm1fdGFyZ2V0OyB9Ci0gICAg
Ym9vbCBpc1ZhbHVlQ29tcGxldGlvbigpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQogCiAg
IHByaXZhdGU6CiAgICAgQ29tcGxUeXBlIG1fdHlwZTsKICAgICBKU1ZhbHVlKiBtX3ZhbHVlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIG1fdGFyZ2V0OwogICB9OwogCiB9CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvZGF0ZV9vYmplY3QuaAkocmV2aXNpb24gMjg4ODUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
ZGF0ZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw2IEBAIEZPUl9FQUNI
X0NMQVNTKEtKU19JTVBMRU1FTlRfUFJPVE9UWVBFX0YKICAgICAgICAgdmlydHVhbCBKU09iamVj
dCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgICAgICAgdmly
dHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCi0gICAgICAgIENvbXBsZXRpb24gZXhlY3V0ZShjb25z
dCBMaXN0ICYpOwogICAgICAgICBKU09iamVjdCAqY29uc3RydWN0KGNvbnN0IExpc3QgJik7CiAg
ICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyODg4NSkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDI0
ICs3MCwxNCBAQCB2b2lkIEZ1bmN0aW9uSW1wOjptYXJrKCkKIAogSlNWYWx1ZSogRnVuY3Rpb25J
bXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCiB7Ci0gIC8vIGVudGVyIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0Ci0g
IEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgdGhpc09iaiwg
Ym9keS5nZXQoKSwgRnVuY3Rpb25Db2RlLCBleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCktPmN1cnJlbnRFeGVjKCksIHRoaXMsICZhcmdzKTsKLSAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgIG5ld0V4ZWMuc2V0RXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKTsKLQotICBD
b21wbGV0aW9uIGNvbXAgPSBleGVjdXRlKCZuZXdFeGVjKTsKLQotICAvLyBpZiBhbiBleGNlcHRp
b24gb2NjdXJlZCwgcHJvcG9nYXRlIGl0IGJhY2sgdG8gdGhlIHByZXZpb3VzIGV4ZWN1dGlvbiBv
YmplY3QKLSAgaWYgKG5ld0V4ZWMuaGFkRXhjZXB0aW9uKCkpCi0gICAgY29tcCA9IENvbXBsZXRp
b24oVGhyb3csIG5ld0V4ZWMuZXhjZXB0aW9uKCkpOwotCi0gIGlmIChjb21wLmNvbXBsVHlwZSgp
ID09IFRocm93KSB7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNvbXAudmFsdWUoKSk7Ci0gICAg
cmV0dXJuIGNvbXAudmFsdWUoKTsKLSAgfQotICBlbHNlIGlmIChjb21wLmNvbXBsVHlwZSgpID09
IFJldHVyblZhbHVlKQotICAgIHJldHVybiBjb21wLnZhbHVlKCk7Ci0gIGVsc2UKKyAgICBFeGVj
U3RhdGUgbmV3RXhlYyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCksIHRoaXNPYmosIGJvZHku
Z2V0KCksIEZ1bmN0aW9uQ29kZSwgZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5j
dXJyZW50RXhlYygpLCB0aGlzLCAmYXJncyk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gYm9keS0+
ZXhlY3V0ZSgmbmV3RXhlYyk7CisgICAgaWYgKG5ld0V4ZWMuY29tcGxldGlvblR5cGUoKSA9PSBU
aHJvdykgeworICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24ocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgaWYgKG5ld0V4ZWMuY29tcGxldGlvblR5cGUoKSA9PSBS
ZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIApAQCAtMjE0LDE1ICsyMDQsNiBAQCBKU09iamVjdCogRnVuY3Rpb25JbXA6OmNv
bnN0cnVjdChFeGVjU3RhCiAgICAgcmV0dXJuIG9iajsKIH0KIAotQ29tcGxldGlvbiBGdW5jdGlv
bkltcDo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gIENvbXBsZXRpb24gcmVzdWx0ID0g
Ym9keS0+ZXhlY3V0ZShleGVjKTsKLQotICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93
IHx8IHJlc3VsdC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkKLSAgICAgIHJldHVybiByZXN1
bHQ7Ci0gIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwganNVbmRlZmluZWQoKSk7IC8vIFRPRE86
IG9yIFJldHVyblZhbHVlID8KLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEluZGV4VG9OYW1lTWFwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBX
ZSBtYXAgaW5kZXhlcyBpbiB0aGUgYXJndW1lbnRzIGFycmF5IHRvIHRoZWlyIGNvcnJlc3BvbmRp
bmcgYXJndW1lbnQgbmFtZXMuIApAQCAtNzE4LDMwICs2OTksMjEgQEAgSlNWYWx1ZSogR2xvYmFs
RnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRQogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3dpdGNoR2xvYmFsID8gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlz
T2JqKSA6IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKICAgICAgICAgSlNPYmplY3QqIHRo
aXNWYWwgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICAg
ICAgRXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsLCBldmFsTm9kZS5nZXQo
KSwgRXZhbENvZGUsIGV4ZWMsIGdsb2JhbE9iamVjdC0+Y3VycmVudEV4ZWMoKSk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIG5ld0V4ZWMuc2V0RXhjZXB0
aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAKICAgICAgICAgaWYgKHN3aXRjaEds
b2JhbCkgewogICAgICAgICAgICAgbmV3RXhlYy5wdXNoU2NvcGUodGhpc09iaik7CiAgICAgICAg
ICAgICBuZXdFeGVjLnNldFZhcmlhYmxlT2JqZWN0KHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0
Kj4odGhpc09iaikpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBDb21wbGV0aW9uIGMg
PSBldmFsTm9kZS0+ZXhlY3V0ZSgmbmV3RXhlYyk7Ci0gICAgICAgICAgCisgICAgICAgIEpTVmFs
dWUqIHZhbHVlID0gZXZhbE5vZGUtPmV4ZWN1dGUoJm5ld0V4ZWMpOwogICAgICAgICBpZiAoc3dp
dGNoR2xvYmFsKQogICAgICAgICAgICAgbmV3RXhlYy5wb3BTY29wZSgpOwogCi0gICAgICAgIC8v
IGlmIGFuIGV4Y2VwdGlvbiBvY2N1cmVkLCBwcm9wb2dhdGUgaXQgYmFjayB0byB0aGUgcHJldmlv
dXMgZXhlY3V0aW9uIG9iamVjdAotICAgICAgICBpZiAobmV3RXhlYy5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24obmV3RXhlYy5leGNlcHRpb24oKSk7Ci0KLSAg
ICAgICAgcmVzID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgaWYgKGMuY29tcGxUeXBlKCkgPT0g
VGhyb3cpCi0gICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGMudmFsdWUoKSk7Ci0gICAgICAg
IGVsc2UgaWYgKGMuaXNWYWx1ZUNvbXBsZXRpb24oKSkKLSAgICAgICAgICAgIHJlcyA9IGMudmFs
dWUoKTsKKyAgICAgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKKyAg
ICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbih2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUgOiBqc1VuZGVm
aW5lZCgpOwogICAgICAgfQotICAgICAgYnJlYWs7CiAgICAgfQogICBjYXNlIFBhcnNlSW50Ogog
ICAgIHJlcyA9IGpzTnVtYmVyKHBhcnNlSW50KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBhcmdz
WzFdLT50b0ludDMyKGV4ZWMpKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkocmV2aXNpb24g
Mjg4ODUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYgYXJncyk7CiAgICAgCiAgICAgdmlydHVh
bCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYgYXJncyk7Ci0gICAgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopOwog
CiAgICAgLy8gTm90ZTogdW5saWtlIGJvZHktPnBhcmFtTmFtZSwgdGhpcyByZXR1cm5zIElkZW50
aWZpZXI6Om51bGwgZm9yIHBhcmFtZXRlcnMgCiAgICAgLy8gdGhhdCB3aWxsIG5ldmVyIGdldCBz
ZXQsIGR1ZSB0byBsYXRlciBwYXJhbSBoYXZpbmcgdGhlIHNhbWUgbmFtZQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyODg4NSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsOCBAQCBD
b21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShFeGVjU3RhCiAgICAgZWxzZSB7CiAgICAg
ICAgIC8vIGV4ZWN1dGUgdGhlIGNvZGUKICAgICAgICAgRXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqLCBwcm9nTm9kZS5nZXQoKSk7Ci0gICAgICAgIHJlcyA9IHByb2dOb2Rl
LT5leGVjdXRlKCZuZXdFeGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBwcm9nTm9kZS0+
ZXhlY3V0ZSgmbmV3RXhlYyk7CisgICAgICAgIHJlcyA9IENvbXBsZXRpb24obmV3RXhlYy5jb21w
bGV0aW9uVHlwZSgpLCB2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIGdsb2JhbE9iamVjdC0+ZGVj
UmVjdXJzaW9uKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDI4ODg1KQorKysg
SmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogI2RlZmluZSBLSlNfQlJFQUtQT0lOVCBcCiAgIGlmIChE
ZWJ1Z2dlcjo6ZGVidWdnZXJzUHJlc2VudCA+IDAgJiYgIWhpdFN0YXRlbWVudChleGVjKSkgXAot
ICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CisgICAgcmV0dXJuIDA7CiAKICNkZWZpbmUg
S0pTX0NIRUNLRVhDRVBUSU9OIFwKICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSBcCkBAIC0y
NzEsMTYgKzI3MSwxOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFVTdHJpbmcmIGN1cnJlbnRTb3Vy
CiAgICAgcmV0dXJuIGV4ZWMtPnNjb3BlTm9kZSgpLT5zb3VyY2VVUkwoKTsKIH0KIAotQ29tcGxl
dGlvbiBOb2RlOjpjcmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5
cGUgZSwgY29uc3QgY2hhciAqbXNnKQorSlNWYWx1ZSogTm9kZTo6c2V0RXJyb3JDb21wbGV0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZykKIHsKLSAgICBy
ZXR1cm4gQ29tcGxldGlvbihUaHJvdywgRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtc2csIGxpbmVO
bygpLCBjdXJyZW50U291cmNlSWQoZXhlYyksIGN1cnJlbnRTb3VyY2VVUkwoZXhlYykpKTsKKyAg
ICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShUaHJvdyk7CisgICAgcmV0dXJuIEVycm9yOjpjcmVh
dGUoZXhlYywgZSwgbXNnLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50
U291cmNlVVJMKGV4ZWMpKTsKIH0KIAotQ29tcGxldGlvbiBOb2RlOjpjcmVhdGVFcnJvckNvbXBs
ZXRpb24oRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBjb25z
dCBJZGVudGlmaWVyICZpZGVudCkKK0pTVmFsdWUqIE5vZGU6OnNldEVycm9yQ29tcGxldGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50
aWZpZXImIGlkZW50KQogewogICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKICAgICBzdWJzdGl0
dXRlKG1lc3NhZ2UsIGlkZW50LnVzdHJpbmcoKSk7Ci0gICAgcmV0dXJuIENvbXBsZXRpb24oVGhy
b3csIEVycm9yOjpjcmVhdGUoZXhlYywgZSwgbWVzc2FnZSwgbGluZU5vKCksIGN1cnJlbnRTb3Vy
Y2VJZChleGVjKSwgY3VycmVudFNvdXJjZVVSTChleGVjKSkpOworICAgIGV4ZWMtPnNldENvbXBs
ZXRpb25UeXBlKFRocm93KTsKKyAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtZXNz
YWdlLCBsaW5lTm8oKSwgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBjdXJyZW50U291cmNlVVJMKGV4
ZWMpKTsKIH0KIAogSlNWYWx1ZSAqTm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVy
cm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2cpCkBAIC0zNjQsMTIgKzM2NiwxMyBAQCB2b2lkIE5v
ZGU6OmhhbmRsZUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4CiAgICAgfQogfQogCi1Db21wbGV0aW9u
IE5vZGU6OnJldGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSogTm9kZTo6
cmV0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSogZXhjZXB0
aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAg
ICBoYW5kbGVFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gQ29tcGxldGlv
bihUaHJvdywgZXhjZXB0aW9uKTsKKyAgICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShUaHJvdyk7
CisgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFN0YXRlbWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTM4NiwxNCArMzg5LDE1IEBAIHZvaWQgU3RhdGVtZW50Tm9kZTo6c2V0TG9jKGludCBmaXJzdExp
bmUKICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiB9CiAKLS8vIHJldHVybiB0cnVlIGlmIHRo
ZSBkZWJ1Z2dlciB3YW50cyB1cyB0byBzdG9wIGF0IHRoaXMgcG9pbnQKKy8vIFNldCBub3JtYWwg
Y29tcGxldGlvbiBhbmQgcmV0dXJuIGZhbHNlIGlmIHRoZSBkZWJ1Z2dlciB3YW50cyB1cyB0byBz
dG9wIGF0IHRoaXMgcG9pbnQuCisvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHBvb3IgbmFtaW5n
IGFuZCBzdHJhbmdlIGRlc2lnbi4gV2h5IGZhbHNlIHRvIHN0b3A/IFdoeSAiaGl0IHN0YXRlbWVu
dCI/CiBib29sIFN0YXRlbWVudE5vZGU6OmhpdFN0YXRlbWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gIERlYnVnZ2VyICpkYmcgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2Vy
KCk7Ci0gIGlmIChkYmcpCi0gICAgcmV0dXJuIGRiZy0+YXRTdGF0ZW1lbnQoZXhlYywgY3VycmVu
dFNvdXJjZUlkKGV4ZWMpLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7Ci0gIGVsc2UKLSAgICBy
ZXR1cm4gdHJ1ZTsgLy8gY29udGludWUKKyAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgaWYgKCFkZWJ1Z2dlciB8fCBk
ZWJ1Z2dlci0+YXRTdGF0ZW1lbnQoZXhlYywgY3VycmVudFNvdXJjZUlkKGV4ZWMpLCBmaXJzdExp
bmUoKSwgbGFzdExpbmUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGV4ZWMtPnNldENv
bXBsZXRpb25UeXBlKE5vcm1hbCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVsbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtMzU0OCwxNCArMzU1MiwxNSBAQCB2b2lkIFZhclN0YXRlbWVudE5v
ZGU6Om9wdGltaXplVmFyaWFibGVBCiB9CiAKIC8vIEVDTUEgMTIuMgotQ29tcGxldGlvbiBWYXJT
dGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKK0pTVmFsdWUqIFZhclN0YXRl
bWVudE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEtKU19CUkVBS1BPSU5U
OworICAgIEtKU19CUkVBS1BPSU5UCiAKICAgICBuZXh0LT5ldmFsdWF0ZShleGVjKTsKICAgICBL
SlNfQ0hFQ0tFWENFUFRJT04KIAotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CisgICAg
ZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgICByZXR1cm4gMDsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhlbHBlciBmdW5jdGlvbnMgZm9yIGhhbmRs
aW5nIFZlY3RvcnMgb2YgU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkBAIC0zNTg3LDI0ICszNTkyLDIxIEBAIHN0YXRpYyBpbmxpbmUgTm9kZSogc3RhdGVtZW50
TGlzdEluaXRpYWwKICAgICByZXR1cm4gKCpiZWdpbikuZ2V0KCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgQ29tcGxldGlvbiBzdGF0ZW1lbnRMaXN0RXhlY3V0ZShTb3VyY2VFbGVtZW50cyYgc3RhdGVt
ZW50cywgRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIGlubGluZSBKU1ZhbHVlKiBzdGF0ZW1lbnRM
aXN0RXhlY3V0ZShTb3VyY2VFbGVtZW50cyYgc3RhdGVtZW50cywgRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIEpTVmFsdWUqIHYgPSAwOwotICAgIENvbXBsZXRpb24gYyhOb3JtYWwpOwotICAgIGNv
bnN0IFNvdXJjZUVsZW1lbnRzOjppdGVyYXRvciBlbmQgPSBzdGF0ZW1lbnRzLmVuZCgpOwotICAg
IGZvciAoU291cmNlRWxlbWVudHM6Oml0ZXJhdG9yIHB0ciA9IHN0YXRlbWVudHMuYmVnaW4oKTsg
cHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgYyA9ICgqcHRyKS0+ZXhlY3V0ZShleGVjKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChKU1ZhbHVlKiB2MiA9IGMudmFsdWUoKSkKLSAgICAgICAg
ICAgIHYgPSB2MjsKLSAgICAgICAgYy5zZXRWYWx1ZSh2KTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjLmNvbXBsVHlwZSgpICE9IE5vcm1hbCkKLSAgICAgICAgICAgIHJldHVybiBjOworICAgIEpT
VmFsdWUqIHZhbHVlID0gMDsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXRlbWVudHMuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkgeworICAgICAgICBKU1ZhbHVl
KiBzdGF0ZW1lbnRWYWx1ZSA9IHN0YXRlbWVudHNbaV0tPmV4ZWN1dGUoZXhlYyk7CisgICAgICAg
IGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkKKyAgICAgICAgICAgIHJldHVy
biBzdGF0ZW1lbnRWYWx1ZTsKKyAgICAgICAgaWYgKHN0YXRlbWVudFZhbHVlKQorICAgICAgICAg
ICAgdmFsdWUgPSBzdGF0ZW1lbnRWYWx1ZTsKICAgICB9Ci0gICAgcmV0dXJuIGM7CisgICAgZXhl
Yy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9Ci0gICAg
CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCbG9ja05vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEJsb2NrTm9kZTo6QmxvY2tOb2RlKFNvdXJj
ZUVsZW1lbnRzKiBjaGlsZHJlbikKQEAgLTM2MTksNyArMzYyMSw3IEBAIHZvaWQgQmxvY2tOb2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFMKIH0KIAogLy8gRUNNQSAxMi4xCi1Db21wbGV0aW9u
IEJsb2NrTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBCbG9ja05vZGU6
OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBzdGF0ZW1lbnRMaXN0RXhl
Y3V0ZSgqbV9jaGlsZHJlbiwgZXhlYyk7CiB9CkBAIC0zNjI3LDkgKzM2MjksMTAgQEAgQ29tcGxl
dGlvbiBCbG9ja05vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEVtcHR5U3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogLy8gRUNNQSAxMi4zCi1Db21wbGV0aW9uIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZXhlY3V0
ZShFeGVjU3RhdGUgKikKK0pTVmFsdWUqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CisgICAgZXhlYy0+
c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgICByZXR1cm4gMDsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV4cHJTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTM2NDEsMTQgKzM2NDQsMTUgQEAgdm9pZCBFeHByU3RhdGVtZW50
Tm9kZTo6b3B0aW1pemVWYXJpYWJsZQogfQogCiAvLyBFQ01BIDEyLjQKLUNvbXBsZXRpb24gRXhw
clN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogRXhwclN0
YXRlbWVudE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICBLSlNfQlJFQUtQT0lO
VDsKKyAgICBLSlNfQlJFQUtQT0lOVAogCi0gIEpTVmFsdWUgKnYgPSBleHByLT5ldmFsdWF0ZShl
eGVjKTsKLSAgS0pTX0NIRUNLRVhDRVBUSU9OCisgICAgSlNWYWx1ZSogdmFsdWUgPSBleHByLT5l
dmFsdWF0ZShleGVjKTsKKyAgICBLSlNfQ0hFQ0tFWENFUFRJT04KIAotICByZXR1cm4gQ29tcGxl
dGlvbihOb3JtYWwsIHYpOworICAgIGV4ZWMtPnNldENvbXBsZXRpb25UeXBlKE5vcm1hbCk7Cisg
ICAgcmV0dXJuIHZhbHVlOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
SWZOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzY2NCw5
ICszNjY4LDkgQEAgdm9pZCBJZk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYgogfQog
CiAvLyBFQ01BIDEyLjUKLUNvbXBsZXRpb24gSWZOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUqIElmTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgS0pT
X0JSRUFLUE9JTlQ7CisgICAgS0pTX0JSRUFLUE9JTlQKIAogICAgIGJvb2wgYiA9IGV4cHItPmV2
YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTgpAQCAtMzY3Niw4
ICszNjgwLDEwIEBAIENvbXBsZXRpb24gSWZOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXgKICAg
ICAgICAgcmV0dXJuIHN0YXRlbWVudDEtPmV4ZWN1dGUoZXhlYyk7CiAKICAgICAvLyBubyBlbHNl
Ci0gICAgaWYgKCFzdGF0ZW1lbnQyKQotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwp
OworICAgIGlmICghc3RhdGVtZW50MikgeworICAgICAgICBleGVjLT5zZXRDb21wbGV0aW9uVHlw
ZShOb3JtYWwpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICAvLyBlbHNlCiAgICAg
cmV0dXJuIHN0YXRlbWVudDItPmV4ZWN1dGUoZXhlYyk7CkBAIC0zNjkyLDM3ICszNjk4LDQ0IEBA
IHZvaWQgRG9XaGlsZU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MKIH0KIAogLy8gRUNNQSAx
Mi42LjEKLUNvbXBsZXRpb24gRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQor
SlNWYWx1ZSogRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEtK
U19CUkVBS1BPSU5UOworICAgIEtKU19CUkVBS1BPSU5UCiAKICAgICBKU1ZhbHVlKiB2YWx1ZSA9
IDA7CiAKICAgICB3aGlsZSAoMSkgewogICAgICAgICBleGVjLT5wdXNoSXRlcmF0aW9uKCk7Ci0g
ICAgICAgIENvbXBsZXRpb24gYyA9IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKKyAgICAgICAg
SlNWYWx1ZSogc3RhdGVtZW50VmFsdWUgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgICAg
ICAgIGV4ZWMtPnBvcEl0ZXJhdGlvbigpOwogCi0gICAgICAgIGlmIChleGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCktPnRpbWVkT3V0KCkpCi0gICAgICAgICAgICByZXR1cm4gQ29tcGxldGlvbihJ
bnRlcnJ1cHRlZCk7CisgICAgICAgIGlmIChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRp
bWVkT3V0KCkpIHsKKyAgICAgICAgICAgIGV4ZWMtPnNldENvbXBsZXRpb25UeXBlKEludGVycnVw
dGVkKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKGMu
aXNWYWx1ZUNvbXBsZXRpb24oKSkKLSAgICAgICAgICAgIHZhbHVlID0gYy52YWx1ZSgpOworICAg
ICAgICBpZiAoc3RhdGVtZW50VmFsdWUpCisgICAgICAgICAgICB2YWx1ZSA9IHN0YXRlbWVudFZh
bHVlOwogCi0gICAgICAgIGlmICghKChjLmNvbXBsVHlwZSgpID09IENvbnRpbnVlKSAmJiBscy5j
b250YWlucyhjLnRhcmdldCgpKSkpIHsKLSAgICAgICAgICAgIGlmICgoYy5jb21wbFR5cGUoKSA9
PSBCcmVhaykgJiYgbHMuY29udGFpbnMoYy50YXJnZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIENvbXBsZXRpb24oTm9ybWFsLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoYy5jb21wbFR5
cGUoKSAhPSBOb3JtYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIGlmIChl
eGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkgeworICAgICAgICAgICAgaWYgKGV4ZWMt
PmNvbXBsZXRpb25UeXBlKCkgPT0gQ29udGludWUgJiYgbHMuY29udGFpbnMoZXhlYy0+YnJlYWtP
ckNvbnRpbnVlVGFyZ2V0KCkpKQorICAgICAgICAgICAgICAgIGdvdG8gY29udGludWVEb0xvb3A7
CisgICAgICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9PSBCcmVhayAmJiBscy5j
b250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50VmFsdWU7CiAgICAgICAgIH0KIAor
Y29udGludWVEb0xvb3A6CiAgICAgICAgIGJvb2wgYiA9IGV4cHItPmV2YWx1YXRlVG9Cb29sZWFu
KGV4ZWMpOwogICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAgICAgICAgaWYgKCFiKQotICAg
ICAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCB2YWx1ZSk7CisgICAgICAgIGlmICgh
YikgeworICAgICAgICAgICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBDb21w
bGV0aW9uKCk7IC8vIHdvcmsgYXJvdW5kIGdjYyA0LjAgYnVnCisgICAgZXhlYy0+c2V0Q29tcGxl
dGlvblR5cGUoTm9ybWFsKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBXaGlsZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0zNzM0LDkgKzM3NDcsOSBAQCB2b2lkIFdoaWxlTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhTCiB9CiAKIC8vIEVDTUEgMTIuNi4yCi1Db21wbGV0aW9uIFdoaWxlTm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBXaGlsZU5vZGU6OmV4ZWN1dGUo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEtKU19CUkVBS1BPSU5UOworICAgIEtKU19CUkVBS1BP
SU5UCiAKICAgICBKU1ZhbHVlKiB2YWx1ZSA9IDA7CiAKQEAgLTM3NDQsMjcgKzM3NTcsMzEgQEAg
Q29tcGxldGlvbiBXaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogICAgICAgICBib29sIGIg
PSBleHByLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKICAgICAgICAgS0pTX0NIRUNLRVhDRVBU
SU9OCiAgICAgICAgIGlmICghYikKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1h
bCwgdmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZXhlYy0+cHVzaEl0ZXJh
dGlvbigpOwotICAgICAgICBDb21wbGV0aW9uIGMgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7
CisgICAgICAgIEpTVmFsdWUqIHN0YXRlbWVudFZhbHVlID0gc3RhdGVtZW50LT5leGVjdXRlKGV4
ZWMpOwogICAgICAgICBleGVjLT5wb3BJdGVyYXRpb24oKTsKIAotICAgICAgICBpZiAoZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50aW1lZE91dCgpKQotICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXRpb24oSW50ZXJydXB0ZWQpOworICAgICAgICBpZiAoZXhlYy0+ZHluYW1pY0dsb2JhbE9i
amVjdCgpLT50aW1lZE91dCgpKSB7CisgICAgICAgICAgICBleGVjLT5zZXRDb21wbGV0aW9uVHlw
ZShJbnRlcnJ1cHRlZCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIAot
ICAgICAgICBpZiAoYy5pc1ZhbHVlQ29tcGxldGlvbigpKQotICAgICAgICAgICAgdmFsdWUgPSBj
LnZhbHVlKCk7CisgICAgICAgIGlmIChzdGF0ZW1lbnRWYWx1ZSkKKyAgICAgICAgICAgIHZhbHVl
ID0gc3RhdGVtZW50VmFsdWU7CiAKLSAgICAgICAgaWYgKChjLmNvbXBsVHlwZSgpID09IENvbnRp
bnVlKSAmJiBscy5jb250YWlucyhjLnRhcmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoKGMuY29tcGxUeXBlKCkgPT0gQnJlYWspICYmIGxzLmNvbnRhaW5zKGMudGFy
Z2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCB2YWx1ZSk7Ci0g
ICAgICAgIGlmIChjLmNvbXBsVHlwZSgpICE9IE5vcm1hbCkKLSAgICAgICAgICAgIHJldHVybiBj
OworICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwpIHsKKyAgICAg
ICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENvbnRpbnVlICYmIGxzLmNvbnRh
aW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYm
IGxzLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnRWYWx1ZTsKKyAgICAgICAg
fQogICAgIH0KIAotICAgIHJldHVybiBDb21wbGV0aW9uKCk7IC8vIHdvcmsgYXJvdW5kIGdjYyA0
LjAgYnVnCisgICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgICByZXR1cm4g
dmFsdWU7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNzgxLDkgKzM3OTgsOSBA
QCB2b2lkIEZvck5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltCiB9CiAKIC8vIEVDTUEg
MTIuNi4zCi1Db21wbGV0aW9uIEZvck5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQorSlNW
YWx1ZSogRm9yTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSog
Y3ZhbCA9IDA7CisgICAgSlNWYWx1ZSogdmFsdWUgPSAwOwogCiAgICAgaWYgKGV4cHIxKSB7CiAg
ICAgICAgIGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKQEAgLTM3OTUsMzEgKzM4MTIsMzcgQEAgQ29t
cGxldGlvbiBGb3JOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZQogICAgICAgICAgICAgYm9vbCBi
ID0gZXhwcjItPmV2YWx1YXRlVG9Cb29sZWFuKGV4ZWMpOwogICAgICAgICAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OCiAgICAgICAgICAgICBpZiAoIWIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENv
bXBsZXRpb24oTm9ybWFsLCBjdmFsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIGV4ZWMtPnB1c2hJdGVyYXRpb24oKTsKLSAgICAgICAgQ29tcGxldGlvbiBj
ID0gc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlKiBzdGF0ZW1lbnRW
YWx1ZSA9IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKICAgICAgICAgZXhlYy0+cG9wSXRlcmF0
aW9uKCk7Ci0gICAgICAgIGlmIChjLmlzVmFsdWVDb21wbGV0aW9uKCkpCi0gICAgICAgICAgICBj
dmFsID0gYy52YWx1ZSgpOwotICAgICAgICBpZiAoISgoYy5jb21wbFR5cGUoKSA9PSBDb250aW51
ZSkgJiYgbHMuY29udGFpbnMoYy50YXJnZXQoKSkpKSB7Ci0gICAgICAgICAgICBpZiAoKGMuY29t
cGxUeXBlKCkgPT0gQnJlYWspICYmIGxzLmNvbnRhaW5zKGMudGFyZ2V0KCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgY3ZhbCk7Ci0gICAgICAgICAgICBpZiAo
Yy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGM7CisgICAg
ICAgIGlmIChzdGF0ZW1lbnRWYWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGVtZW50VmFs
dWU7CisKKyAgICAgICAgaWYgKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGltZWRPdXQo
KSkgeworICAgICAgICAgICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoSW50ZXJydXB0ZWQpOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLT50aW1lZE91dCgpKQotICAgICAgICAgICAgcmV0dXJuIENvbXBs
ZXRpb24oSW50ZXJydXB0ZWQpOworICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAh
PSBOb3JtYWwpIHsKKyAgICAgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENv
bnRpbnVlICYmIGxzLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKKyAg
ICAgICAgICAgICAgICBnb3RvIGNvbnRpbnVlRm9yTG9vcDsKKyAgICAgICAgICAgIGlmIChleGVj
LT5jb21wbGV0aW9uVHlwZSgpID09IEJyZWFrICYmIGxzLmNvbnRhaW5zKGV4ZWMtPmJyZWFrT3JD
b250aW51ZVRhcmdldCgpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0ZW1lbnRWYWx1ZTsKKyAgICAgICAgfQogCitjb250aW51ZUZvckxvb3A6CiAgICAg
ICAgIGlmIChleHByMykgewogICAgICAgICAgICAgZXhwcjMtPmV2YWx1YXRlKGV4ZWMpOwogICAg
ICAgICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAgICAgICAgIH0KICAgICB9CiAgIAotICAgIHJl
dHVybiBDb21wbGV0aW9uKCk7IC8vIHdvcmsgYXJvdW5kIGdjYyA0LjAgYnVnCisgICAgZXhlYy0+
c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JJbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zODQ3LDM1ICszODcwLDMyIEBAIHZvaWQgRm9ySW5Ob2Rl
OjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFMKIH0KIAogLy8gRUNNQSAxMi42LjQKLUNvbXBsZXRp
b24gRm9ySW5Ob2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKK0pTVmFsdWUqIEZvckluTm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gIEpTVmFsdWUgKmU7CiAgIEpTVmFsdWUg
KnJldHZhbCA9IDA7Ci0gIEpTT2JqZWN0ICp2OwotICBDb21wbGV0aW9uIGM7Ci0gIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnR5TmFtZXM7CiAKICAgaWYgKHZhckRlY2wpIHsKICAgICB2YXJEZWNs
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgfQogCi0gIGUgPSBl
eHByLT5ldmFsdWF0ZShleGVjKTsKKyAgSlNWYWx1ZSogZSA9IGV4cHItPmV2YWx1YXRlKGV4ZWMp
OwogCi0gIC8vIGZvciBOdWxsIGFuZCBVbmRlZmluZWQsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIG5v
dCB0byBnbyB0aHJvdWdoCi0gIC8vIHRoZSBsb29wIGF0IGFsbCwgYmVjYXVzZSB0aGVpciBvYmpl
Y3Qgd3JhcHBlcnMgd2lsbCBoYXZlIGEKLSAgLy8gcHJvcGVydHkgbGlzdCBidXQgd2lsbCB0aHJv
dyBhbiBleGNlcHRpb24gaWYgeW91IGF0dGVtcHQgdG8KLSAgLy8gYWNjZXNzIGFueSBwcm9wZXJ0
eS4KLSAgaWYgKGUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgcmV0dXJuIENvbXBsZXRpb24o
Tm9ybWFsKTsKKyAgLy8gRm9yIE51bGwgYW5kIFVuZGVmaW5lZCwgd2Ugd2FudCB0byBtYWtlIHN1
cmUgbm90IHRvIGdvIHRocm91Z2gKKyAgLy8gdGhlIGxvb3AgYXQgYWxsLCBiZWNhdXNlIHRvT2Jq
ZWN0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgorICBpZiAoZS0+aXNVbmRlZmluZWRPck51bGwo
KSkgeworICAgIGV4ZWMtPnNldENvbXBsZXRpb25UeXBlKE5vcm1hbCk7CisgICAgcmV0dXJuIDA7
CisgIH0KIAogICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAgdiA9IGUtPnRvT2JqZWN0KGV4ZWMpOwor
ICBKU09iamVjdCogdiA9IGUtPnRvT2JqZWN0KGV4ZWMpOworICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0eU5hbWVzOwogICB2LT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMp
OwogICAKICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnR5
TmFtZXMuZW5kKCk7CiAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcHJvcGVydHlOYW1lcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgIGNvbnN0
IElkZW50aWZpZXIgJm5hbWUgPSAqaXQ7CisgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lID0g
Kml0OwogICAgICAgaWYgKCF2LT5oYXNQcm9wZXJ0eShleGVjLCBuYW1lKSkKICAgICAgICAgICBj
b250aW51ZTsKIApAQCAtMzkyOCw1MCArMzk0OCw1MiBAQCBDb21wbGV0aW9uIEZvckluTm9kZTo6
ZXhlY3V0ZShFeGVjU3RhdGUgCiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAgICBleGVjLT5w
dXNoSXRlcmF0aW9uKCk7Ci0gICAgYyA9IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKKyAgICBK
U1ZhbHVlKiBzdGF0ZW1lbnRWYWx1ZSA9IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKICAgICBl
eGVjLT5wb3BJdGVyYXRpb24oKTsKLSAgICBpZiAoYy5pc1ZhbHVlQ29tcGxldGlvbigpKQotICAg
ICAgcmV0dmFsID0gYy52YWx1ZSgpOworICAgIGlmIChzdGF0ZW1lbnRWYWx1ZSkKKyAgICAgIHJl
dHZhbCA9IHN0YXRlbWVudFZhbHVlOwogCi0gICAgaWYgKCEoKGMuY29tcGxUeXBlKCkgPT0gQ29u
dGludWUpICYmIGxzLmNvbnRhaW5zKGMudGFyZ2V0KCkpKSkgewotICAgICAgaWYgKChjLmNvbXBs
VHlwZSgpID09IEJyZWFrKSAmJiBscy5jb250YWlucyhjLnRhcmdldCgpKSkKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBpZiAoYy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpIHsKLSAgICAgICAgcmV0dXJu
IGM7Ci0gICAgICB9CisgICAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKSB7
CisgICAgICAgIGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IENvbnRpbnVlICYmIGxzLmNv
bnRhaW5zKGV4ZWMtPmJyZWFrT3JDb250aW51ZVRhcmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9PSBCcmVhayAmJiBscy5j
b250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIHN0YXRlbWVudFZhbHVlOwogICAgIH0KICAgfQogCi0gIHJldHVy
biBDb21wbGV0aW9uKE5vcm1hbCwgcmV0dmFsKTsKKyAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUo
Tm9ybWFsKTsKKyAgcmV0dXJuIHJldHZhbDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIENvbnRpbnVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogLy8gRUNNQSAxMi43Ci1Db21wbGV0aW9uIENvbnRpbnVlTm9kZTo6ZXhlY3V0ZShFeGVjU3Rh
dGUgKmV4ZWMpCitKU1ZhbHVlKiBDb250aW51ZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVj
KQogewotICBLSlNfQlJFQUtQT0lOVDsKKyAgS0pTX0JSRUFLUE9JTlQKIAogICBpZiAoaWRlbnQu
aXNFbXB0eSgpICYmICFleGVjLT5pbkl0ZXJhdGlvbigpKQotICAgIHJldHVybiBjcmVhdGVFcnJv
ckNvbXBsZXRpb24oZXhlYywgU3ludGF4RXJyb3IsICJJbnZhbGlkIGNvbnRpbnVlIHN0YXRlbWVu
dC4iKTsKKyAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAi
SW52YWxpZCBjb250aW51ZSBzdGF0ZW1lbnQuIik7CiAgIGlmICghaWRlbnQuaXNFbXB0eSgpICYm
ICFleGVjLT5zZWVuTGFiZWxzKCktPmNvbnRhaW5zKGlkZW50KSkKLSAgICByZXR1cm4gY3JlYXRl
RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAiTGFiZWwgJXMgbm90IGZvdW5kLiIs
IGlkZW50KTsKLSAgcmV0dXJuIENvbXBsZXRpb24oQ29udGludWUsICZpZGVudCk7CisgICAgcmV0
dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkxhYmVsICVzIG5vdCBm
b3VuZC4iLCBpZGVudCk7CisgIGV4ZWMtPnNldENvbnRpbnVlQ29tcGxldGlvbigmaWRlbnQpOwor
ICByZXR1cm4gMDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyZWFr
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAxMi44
Ci1Db21wbGV0aW9uIEJyZWFrTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVl
KiBCcmVha05vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQogewotICBLSlNfQlJFQUtQT0lO
VDsKKyAgS0pTX0JSRUFLUE9JTlQKIAotICBpZiAoaWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5p
bkl0ZXJhdGlvbigpICYmCi0gICAgICAhZXhlYy0+aW5Td2l0Y2goKSkKLSAgICByZXR1cm4gY3Jl
YXRlRXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRheEVycm9yLCAiSW52YWxpZCBicmVhayBzdGF0
ZW1lbnQuIik7CisgIGlmIChpZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPmluSXRlcmF0aW9uKCkg
JiYgIWV4ZWMtPmluU3dpdGNoKCkpCisgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVj
LCBTeW50YXhFcnJvciwgIkludmFsaWQgYnJlYWsgc3RhdGVtZW50LiIpOwogICBpZiAoIWlkZW50
LmlzRW1wdHkoKSAmJiAhZXhlYy0+c2VlbkxhYmVscygpLT5jb250YWlucyhpZGVudCkpCi0gICAg
cmV0dXJuIGNyZWF0ZUVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkxhYmVsICVz
IG5vdCBmb3VuZC4iKTsKLSAgcmV0dXJuIENvbXBsZXRpb24oQnJlYWssICZpZGVudCk7CisgICAg
cmV0dXJuIHNldEVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkxhYmVsICVzIG5v
dCBmb3VuZC4iKTsKKyAgZXhlYy0+c2V0QnJlYWtDb21wbGV0aW9uKCZpZGVudCk7CisgIHJldHVy
biAwOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmV0dXJuTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzk4MywyMSArNDAwNSwyNCBA
QCB2b2lkIFJldHVybk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoCiB9CiAKIC8vIEVDTUEg
MTIuOQotQ29tcGxldGlvbiBSZXR1cm5Ob2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKK0pT
VmFsdWUqIFJldHVybk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICBLSlNfQlJF
QUtQT0lOVDsKKyAgS0pTX0JSRUFLUE9JTlQKIAogICBDb2RlVHlwZSBjb2RlVHlwZSA9IGV4ZWMt
PmNvZGVUeXBlKCk7CiAgIGlmIChjb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCi0gICAgcmV0dXJu
IGNyZWF0ZUVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJvciwgIkludmFsaWQgcmV0dXJu
IHN0YXRlbWVudC4iKTsKKyAgICByZXR1cm4gc2V0RXJyb3JDb21wbGV0aW9uKGV4ZWMsIFN5bnRh
eEVycm9yLCAiSW52YWxpZCByZXR1cm4gc3RhdGVtZW50LiIpOwogCi0gIGlmICghdmFsdWUpCi0g
ICAgcmV0dXJuIENvbXBsZXRpb24oUmV0dXJuVmFsdWUsIGpzVW5kZWZpbmVkKCkpOworICBpZiAo
IXZhbHVlKSB7CisgICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoUmV0dXJuVmFsdWUpOworICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICB9CiAKLSAgSlNWYWx1ZSAqdiA9IHZhbHVlLT5ldmFs
dWF0ZShleGVjKTsKKyAgSlNWYWx1ZSogdiA9IHZhbHVlLT5ldmFsdWF0ZShleGVjKTsKICAgS0pT
X0NIRUNLRVhDRVBUSU9OCiAKLSAgcmV0dXJuIENvbXBsZXRpb24oUmV0dXJuVmFsdWUsIHYpOwor
ICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShSZXR1cm5WYWx1ZSk7CisgIHJldHVybiB2OwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2l0aE5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDAwOSwxOSArNDAzNCwxOSBAQCB2b2lkIFdp
dGhOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5CiB9CiAKIC8vIEVDTUEgMTIuMTAKLUNv
bXBsZXRpb24gV2l0aE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1ZSogV2l0
aE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQogewotICBLSlNfQlJFQUtQT0lOVDsKKyAg
S0pTX0JSRUFLUE9JTlQKIAogICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAg
IEtKU19DSEVDS0VYQ0VQVElPTgogICBKU09iamVjdCAqbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwog
ICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgZXhlYy0+cHVzaFNjb3BlKG8pOwotICBDb21wbGV0aW9u
IHJlcyA9IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKKyAgSlNWYWx1ZSogdmFsdWUgPSBzdGF0
ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgIGV4ZWMtPnBvcFNjb3BlKCk7CiAKLSAgcmV0dXJuIHJl
czsKKyAgcmV0dXJuIHZhbHVlOwogfQogICAgIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIENhc2VDbGF1c2VOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTQwNDQsMTIgKzQwNjksMTIgQEAgSlNWYWx1ZSAqQ2FzZUNsYXVzZU5vZGU6OmV2YWx1YXRlKEV4
ZWNTdAogfQogCiAvLyBFQ01BIDEyLjExCi1Db21wbGV0aW9uIENhc2VDbGF1c2VOb2RlOjpldmFs
U3RhdGVtZW50cyhFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBDYXNlQ2xhdXNlTm9kZTo6ZXhl
Y3V0ZVN0YXRlbWVudHMoRXhlY1N0YXRlKiBleGVjKQogewogICBpZiAobV9jaGlsZHJlbikKICAg
ICByZXR1cm4gc3RhdGVtZW50TGlzdEV4ZWN1dGUoKm1fY2hpbGRyZW4sIGV4ZWMpOwotICBlbHNl
Ci0gICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCBqc1VuZGVmaW5lZCgpKTsKKyAgZXhlYy0+
c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDbGF1c2VMaXN0Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MDgxLDQxICs0MTA2LDM2IEBAIHZvaWQgQ2Fz
ZUJsb2NrTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2UKIH0KIAogLy8gRUNNQSAxMi4xMQotQ29t
cGxldGlvbiBDYXNlQmxvY2tOb2RlOjpldmFsQmxvY2soRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVl
ICppbnB1dCkKK0pTVmFsdWUqIENhc2VCbG9ja05vZGU6OmV4ZWN1dGVCbG9jayhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIGlucHV0KQogewotICBKU1ZhbHVlICp2OwotICBDb21wbGV0aW9uIHJl
czsKLSAgQ2xhdXNlTGlzdE5vZGUgKmEgPSBsaXN0MS5nZXQoKTsKLSAgQ2xhdXNlTGlzdE5vZGUg
KmIgPSBsaXN0Mi5nZXQoKTsKLSAgQ2FzZUNsYXVzZU5vZGUgKmNsYXVzZTsKLQorICBDbGF1c2VM
aXN0Tm9kZSogYSA9IGxpc3QxLmdldCgpOwogICAgIHdoaWxlIChhKSB7Ci0gICAgICBjbGF1c2Ug
PSBhLT5nZXRDbGF1c2UoKTsKKyAgICAgIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UgPSBhLT5nZXRD
bGF1c2UoKTsKICAgICAgIGEgPSBhLT5nZXROZXh0KCk7Ci0gICAgICB2ID0gY2xhdXNlLT5ldmFs
dWF0ZShleGVjKTsKKyAgICAgIEpTVmFsdWUqIHYgPSBjbGF1c2UtPmV2YWx1YXRlKGV4ZWMpOwog
ICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAgICAgICBpZiAoc3RyaWN0RXF1YWwoZXhlYywgaW5w
dXQsIHYpKSB7Ci0gICAgICAgIHJlcyA9IGNsYXVzZS0+ZXZhbFN0YXRlbWVudHMoZXhlYyk7Ci0g
ICAgICAgIGlmIChyZXMuY29tcGxUeXBlKCkgIT0gTm9ybWFsKQorICAgICAgICBKU1ZhbHVlKiBy
ZXMgPSBjbGF1c2UtPmV4ZWN1dGVTdGF0ZW1lbnRzKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+
Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwpCiAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAg
ICAgd2hpbGUgKGEpIHsKLSAgICAgICAgICByZXMgPSBhLT5nZXRDbGF1c2UoKS0+ZXZhbFN0YXRl
bWVudHMoZXhlYyk7Ci0gICAgICAgICAgaWYgKHJlcy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCisg
ICAgICAgIGZvciAoOyBhOyBhID0gYS0+Z2V0TmV4dCgpKSB7CisgICAgICAgICAgSlNWYWx1ZSog
cmVzID0gYS0+Z2V0Q2xhdXNlKCktPmV4ZWN1dGVTdGF0ZW1lbnRzKGV4ZWMpOworICAgICAgICAg
IGlmIChleGVjLT5jb21wbGV0aW9uVHlwZSgpICE9IE5vcm1hbCkKICAgICAgICAgICAgIHJldHVy
biByZXM7Ci0gICAgICAgICAgYSA9IGEtPmdldE5leHQoKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICAgIH0KICAgICB9CiAKKyAgQ2xhdXNlTGlzdE5vZGUqIGIgPSBsaXN0Mi5nZXQo
KTsKICAgd2hpbGUgKGIpIHsKLSAgICBjbGF1c2UgPSBiLT5nZXRDbGF1c2UoKTsKKyAgICBDYXNl
Q2xhdXNlTm9kZSogY2xhdXNlID0gYi0+Z2V0Q2xhdXNlKCk7CiAgICAgYiA9IGItPmdldE5leHQo
KTsKLSAgICB2ID0gY2xhdXNlLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlKiB2ID0gY2xh
dXNlLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgICBpZiAoc3Ry
aWN0RXF1YWwoZXhlYywgaW5wdXQsIHYpKSB7Ci0gICAgICByZXMgPSBjbGF1c2UtPmV2YWxTdGF0
ZW1lbnRzKGV4ZWMpOwotICAgICAgaWYgKHJlcy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCisgICAg
ICBKU1ZhbHVlKiByZXMgPSBjbGF1c2UtPmV4ZWN1dGVTdGF0ZW1lbnRzKGV4ZWMpOworICAgICAg
aWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKQogICAgICAgICByZXR1cm4gcmVz
OwogICAgICAgZ290byBzdGVwMTg7CiAgICAgfQpAQCAtNDEyMywxNiArNDE0MywxNiBAQCBDb21w
bGV0aW9uIENhc2VCbG9ja05vZGU6OmV2YWxCbG9jayhFeGVjCiAKICAgLy8gZGVmYXVsdCBjbGF1
c2UKICAgaWYgKGRlZikgewotICAgIHJlcyA9IGRlZi0+ZXZhbFN0YXRlbWVudHMoZXhlYyk7Ci0g
ICAgaWYgKHJlcy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCisgICAgSlNWYWx1ZSogcmVzID0gZGVm
LT5leGVjdXRlU3RhdGVtZW50cyhleGVjKTsKKyAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUo
KSAhPSBOb3JtYWwpCiAgICAgICByZXR1cm4gcmVzOwogICB9CiAgIGIgPSBsaXN0Mi5nZXQoKTsK
ICBzdGVwMTg6CiAgIHdoaWxlIChiKSB7Ci0gICAgY2xhdXNlID0gYi0+Z2V0Q2xhdXNlKCk7Ci0g
ICAgcmVzID0gY2xhdXNlLT5ldmFsU3RhdGVtZW50cyhleGVjKTsKLSAgICBpZiAocmVzLmNvbXBs
VHlwZSgpICE9IE5vcm1hbCkKKyAgICBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlID0gYi0+Z2V0Q2xh
dXNlKCk7CisgICAgSlNWYWx1ZSogcmVzID0gY2xhdXNlLT5leGVjdXRlU3RhdGVtZW50cyhleGVj
KTsKKyAgICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSAhPSBOb3JtYWwpCiAgICAgICByZXR1
cm4gcmVzOwogICAgIGIgPSBiLT5nZXROZXh0KCk7CiAgIH0KQEAgLTQxNDAsNyArNDE2MCw4IEBA
IENvbXBsZXRpb24gQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2NrKEV4ZWMKICAgLy8gYmFpbCBvdXQg
b24gZXJyb3IKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKLSAgcmV0dXJuIENvbXBsZXRpb24oTm9y
bWFsKTsKKyAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgcmV0dXJuIDA7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTd2l0Y2hOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MTUyLDIwICs0MTczLDIwIEBAIHZvaWQg
U3dpdGNoTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcygKIH0KIAogLy8gRUNNQSAxMi4xMQot
Q29tcGxldGlvbiBTd2l0Y2hOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKK0pTVmFsdWUq
IFN3aXRjaE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICBLSlNfQlJFQUtQT0lO
VDsKKyAgS0pTX0JSRUFLUE9JTlQKIAogICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhl
Yyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogCiAgIGV4ZWMtPnB1c2hTd2l0Y2goKTsKLSAgQ29t
cGxldGlvbiByZXMgPSBibG9jay0+ZXZhbEJsb2NrKGV4ZWMsdik7CisgIEpTVmFsdWUqIHJlc3Vs
dCA9IGJsb2NrLT5leGVjdXRlQmxvY2soZXhlYywgdik7CiAgIGV4ZWMtPnBvcFN3aXRjaCgpOwog
Ci0gIGlmICgocmVzLmNvbXBsVHlwZSgpID09IEJyZWFrKSAmJiBscy5jb250YWlucyhyZXMudGFy
Z2V0KCkpKQotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgcmVzLnZhbHVlKCkpOwotICBy
ZXR1cm4gcmVzOworICBpZiAoZXhlYy0+Y29tcGxldGlvblR5cGUoKSA9PSBCcmVhayAmJiBscy5j
b250YWlucyhleGVjLT5icmVha09yQ29udGludWVUYXJnZXQoKSkpCisgICAgZXhlYy0+c2V0Q29t
cGxldGlvblR5cGUoTm9ybWFsKTsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIExhYmVsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTQxNzYsMTYgKzQxOTcsMTYgQEAgdm9pZCBMYWJlbE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoUwogfQogCiAvLyBFQ01BIDEyLjEyCi1Db21wbGV0aW9uIExhYmVs
Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBMYWJlbE5vZGU6OmV4ZWN1
dGUoRXhlY1N0YXRlICpleGVjKQogewogICBpZiAoIWV4ZWMtPnNlZW5MYWJlbHMoKS0+cHVzaChs
YWJlbCkpCi0gICAgcmV0dXJuIGNyZWF0ZUVycm9yQ29tcGxldGlvbihleGVjLCBTeW50YXhFcnJv
ciwgIkR1cGxpY2F0ZWQgbGFiZWwgJXMgZm91bmQuIiwgbGFiZWwpOwotICBDb21wbGV0aW9uIGUg
PSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CisgICAgcmV0dXJuIHNldEVycm9yQ29tcGxldGlv
bihleGVjLCBTeW50YXhFcnJvciwgIkR1cGxpY2F0ZWQgbGFiZWwgJXMgZm91bmQuIiwgbGFiZWwp
OworICBKU1ZhbHVlKiByZXN1bHQgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgIGV4ZWMt
PnNlZW5MYWJlbHMoKS0+cG9wKCk7CiAKLSAgaWYgKChlLmNvbXBsVHlwZSgpID09IEJyZWFrKSAm
JiAoZS50YXJnZXQoKSA9PSBsYWJlbCkpCi0gICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCBl
LnZhbHVlKCkpOwotICByZXR1cm4gZTsKKyAgaWYgKGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0g
QnJlYWsgJiYgZXhlYy0+YnJlYWtPckNvbnRpbnVlVGFyZ2V0KCkgPT0gbGFiZWwpCisgICAgZXhl
Yy0+c2V0Q29tcGxldGlvblR5cGUoTm9ybWFsKTsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRocm93Tm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxOTYsMTUgKzQyMTcsMTYgQEAgdm9pZCBUaHJvd05v
ZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoUwogfQogCiAvLyBFQ01BIDEyLjEzCi1Db21wbGV0
aW9uIFRocm93Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCitKU1ZhbHVlKiBUaHJvd05v
ZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQogewotICBLSlNfQlJFQUtQT0lOVDsKKyAgS0pT
X0JSRUFLUE9JTlQKIAogICBKU1ZhbHVlICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtK
U19DSEVDS0VYQ0VQVElPTgogCiAgIGhhbmRsZUV4Y2VwdGlvbihleGVjLCB2KTsKLSAgcmV0dXJu
IENvbXBsZXRpb24oVGhyb3csIHYpOworICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShUaHJvdyk7
CisgIHJldHVybiB2OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJ5
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDIxOCwzMCAr
NDI0MCwzMyBAQCB2b2lkIFRyeU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltCiB9CiAK
IC8vIEVDTUEgMTIuMTQKLUNvbXBsZXRpb24gVHJ5Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4
ZWMpCitKU1ZhbHVlKiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgS0pT
X0JSRUFLUE9JTlQ7CisgIEtKU19CUkVBS1BPSU5UCiAKLSAgQ29tcGxldGlvbiBjID0gdHJ5Qmxv
Y2stPmV4ZWN1dGUoZXhlYyk7CisgIEpTVmFsdWUqIHJlc3VsdCA9IHRyeUJsb2NrLT5leGVjdXRl
KGV4ZWMpOwogCiAgIGlmIChDb2xsZWN0b3I6OmlzT3V0T2ZNZW1vcnkoKSkKLSAgICAgIHJldHVy
biBjOyAvLyBkb24ndCB0cnkgdG8gY2F0Y2ggYW4gb3V0IG9mIG1lbW9yeSBleGNlcHRpb24gdGhy
b3duIGJ5IHRoZSBjb2xsZWN0b3IKKyAgICAgIHJldHVybiByZXN1bHQ7IC8vIGRvbid0IHRyeSB0
byBjYXRjaCBhbiBvdXQgb2YgbWVtb3J5IGV4Y2VwdGlvbiB0aHJvd24gYnkgdGhlIGNvbGxlY3Rv
cgogICAKLSAgaWYgKGNhdGNoQmxvY2sgJiYgYy5jb21wbFR5cGUoKSA9PSBUaHJvdykgewotICAg
IEpTT2JqZWN0ICpvYmogPSBuZXcgSlNPYmplY3Q7Ci0gICAgb2JqLT5wdXQoZXhlYywgZXhjZXB0
aW9uSWRlbnQsIGMudmFsdWUoKSwgRG9udERlbGV0ZSk7CisgIGlmIChjYXRjaEJsb2NrICYmIGV4
ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKKyAgICBKU09iamVjdCogb2JqID0gbmV3
IEpTT2JqZWN0OworICAgIG9iai0+cHV0KGV4ZWMsIGV4Y2VwdGlvbklkZW50LCByZXN1bHQsIERv
bnREZWxldGUpOwogICAgIGV4ZWMtPnB1c2hTY29wZShvYmopOwotICAgIGMgPSBjYXRjaEJsb2Nr
LT5leGVjdXRlKGV4ZWMpOworICAgIHJlc3VsdCA9IGNhdGNoQmxvY2stPmV4ZWN1dGUoZXhlYyk7
CiAgICAgZXhlYy0+cG9wU2NvcGUoKTsKICAgfQogCiAgIGlmIChmaW5hbGx5QmxvY2spIHsKLSAg
ICBDb21wbGV0aW9uIGMyID0gZmluYWxseUJsb2NrLT5leGVjdXRlKGV4ZWMpOwotICAgIGlmIChj
Mi5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCi0gICAgICBjID0gYzI7CisgICAgQ29tcGxUeXBlIHNh
dmVkQ29tcGxldGlvblR5cGUgPSBleGVjLT5jb21wbGV0aW9uVHlwZSgpOworICAgIEpTVmFsdWUq
IGZpbmFsbHlSZXN1bHQgPSBmaW5hbGx5QmxvY2stPmV4ZWN1dGUoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmNvbXBsZXRpb25UeXBlKCkgIT0gTm9ybWFsKQorICAgICAgICByZXN1bHQgPSBmaW5hbGx5
UmVzdWx0OworICAgIGVsc2UKKyAgICAgICAgZXhlYy0+c2V0Q29tcGxldGlvblR5cGUoc2F2ZWRD
b21wbGV0aW9uVHlwZSk7CiAgIH0KIAotICByZXR1cm4gYzsKKyAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQm9keU5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0OTYsNDMgKzQ1MjEsNDQgQEAgVVN0cmlu
ZyBGdW5jdGlvbkJvZHlOb2RlOjpwYXJhbVN0cmluZygpIAogICByZXR1cm4gczsKIH0KIAotQ29t
cGxldGlvbiBQcm9ncmFtTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlKiBQ
cm9ncmFtTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcHJvY2Vzc0RlY2xh
cmF0aW9ucyhleGVjKTsKICAgICByZXR1cm4gU2NvcGVOb2RlOjpleGVjdXRlKGV4ZWMpOwogfQog
Ci1Db21wbGV0aW9uIEV2YWxOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUq
IEV2YWxOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBwcm9jZXNzRGVjbGFy
YXRpb25zKGV4ZWMpOwogICAgIHJldHVybiBTY29wZU5vZGU6OmV4ZWN1dGUoZXhlYyk7CiB9CiAK
LUNvbXBsZXRpb24gRnVuY3Rpb25Cb2R5Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlKiBGdW5jdGlvbkJvZHlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBwcm9jZXNzRGVjbGFyYXRpb25zKGV4ZWMpOwogCiAgICAgaWYgKERlYnVnZ2VyKiBkYmcgPSBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKICAgICAgICAgaWYgKCFk
YmctPmNhbGxFdmVudChleGVjLCBzb3VyY2VJZCgpLCBsaW5lTm8oKSwgZXhlYy0+ZnVuY3Rpb24o
KSwgKmV4ZWMtPmFyZ3VtZW50cygpKSkgewogICAgICAgICAgICAgZGJnLT5pbXAoKS0+YWJvcnQo
KTsKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV0aW9uKEludGVycnVwdGVkLCBqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgICAgIGV4ZWMtPnNldENvbXBsZXRpb25UeXBlKEludGVycnVwdGVkKTsK
KyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfSAgICAKICAgICAKLSAgICBD
b21wbGV0aW9uIGNvbXBsZXRpb24gPSBTY29wZU5vZGU6OmV4ZWN1dGUoZXhlYyk7CisgICAgSlNW
YWx1ZSogcmVzdWx0ID0gU2NvcGVOb2RlOjpleGVjdXRlKGV4ZWMpOwogICAgIAogICAgIGlmIChE
ZWJ1Z2dlciogZGJnID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7
Ci0gICAgICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KQotICAgICAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNvbXBsZXRpb24udmFsdWUoKSk7Ci0KKyAgICAgICAgaWYg
KGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpCisgICAgICAgICAgICBleGVjLT5zZXRF
eGNlcHRpb24ocmVzdWx0KTsKICAgICAgICAgaWYgKCFkYmctPnJldHVybkV2ZW50KGV4ZWMsIHNv
dXJjZUlkKCksIGxpbmVObygpLCBleGVjLT5mdW5jdGlvbigpKSkgewogICAgICAgICAgICAgZGJn
LT5pbXAoKS0+YWJvcnQoKTsKLSAgICAgICAgICAgIHJldHVybiBDb21wbGV0aW9uKEludGVycnVw
dGVkLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIGV4ZWMtPnNldENvbXBsZXRpb25UeXBl
KEludGVycnVwdGVkKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgCi0gICAgcmV0dXJuIGNvbXBsZXRpb247CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmNEZWNsTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ1NTUsOSArNDU4MSwxMCBAQCBGdW5jdGlvbklt
cCogRnVuY0RlY2xOb2RlOjptYWtlRnVuY3Rpb24oCiAgIHJldHVybiBmdW5jOwogfQogCi1Db21w
bGV0aW9uIEZ1bmNEZWNsTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKikKK0pTVmFsdWUqIEZ1bmNE
ZWNsTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIENvbXBsZXRp
b24oTm9ybWFsKTsKKyAgICBleGVjLT5zZXRDb21wbGV0aW9uVHlwZShOb3JtYWwpOworICAgIHJl
dHVybiAwOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY0V4cHJO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJ
KHJldmlzaW9uIDI4ODg1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NCw5ICsxNDQsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgcHJvdGVjdGVk
OgogICAgIE5vZGUoSlNUeXBlKSBLSlNfRkFTVF9DQUxMOyAvLyB1c2VkIGJ5IEV4cHJlc3Npb25O
b2RlCi0gICAgQ29tcGxldGlvbiBjcmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRlICosIEVy
cm9yVHlwZSwgY29uc3QgY2hhciAqbXNnKSBLSlNfRkFTVF9DQUxMOwotICAgIENvbXBsZXRpb24g
Y3JlYXRlRXJyb3JDb21wbGV0aW9uKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIg
Km1zZywgY29uc3QgSWRlbnRpZmllciAmKSBLSlNfRkFTVF9DQUxMOwogCisgICAgLy8gZm9yIHVz
ZSBpbiBleGVjdXRlKCkKKyAgICBKU1ZhbHVlKiBzZXRFcnJvckNvbXBsZXRpb24oRXhlY1N0YXRl
KiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtc2cpIEtKU19GQVNUX0NBTEw7CisgICAgSlNWYWx1
ZSogc2V0RXJyb3JDb21wbGV0aW9uKEV4ZWNTdGF0ZSosIEVycm9yVHlwZSwgY29uc3QgY2hhciog
bXNnLCBjb25zdCBJZGVudGlmaWVyJikgS0pTX0ZBU1RfQ0FMTDsKKworICAgIC8vIGZvciB1c2Ug
aW4gZXZhbHVhdGUoKQogICAgIEpTVmFsdWUqIHRocm93RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JU
eXBlLCBjb25zdCBjaGFyKiBtc2cpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogdGhyb3dF
cnJvcihFeGVjU3RhdGUqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgY2hhciop
IEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogdGhyb3dFcnJvcihFeGVjU3RhdGUqLCBFcnJv
clR5cGUsIGNvbnN0IGNoYXIqIG1zZywgSlNWYWx1ZSosIE5vZGUqKSBLSlNfRkFTVF9DQUxMOwpA
QCAtMTYwLDcgKzE2Myw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZvaWQgaGFuZGxlRXhjZXB0
aW9uKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdm9pZCBoYW5kbGVFeGNlcHRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSopIEtKU19GQVNUX0NBTEw7CiAKLSAgICBDb21wbGV0aW9uIHJl
dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAvLyBmb3IgdXNl
IGluIGV4ZWN1dGUoKQorICAgIEpTVmFsdWUqIHJldGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKIAogICAgIGludCBtX2xpbmUgOiAyODsKICAgICB1bnNpZ25lZCBtX2V4
cGVjdGVkUmV0dXJuVHlwZSA6IDM7IC8vIEpTVHlwZQpAQCAtMjAwLDExICsyMDQsMTEgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBzZXRMb2MoaW50IGxpbmUwLCBpbnQgbGluZTEpIEtKU19G
QVNUX0NBTEw7CiAgICAgaW50IGZpcnN0TGluZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gbGluZU5vKCk7IH0KICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsg
cmV0dXJuIG1fbGFzdExpbmU7IH0KLSAgICBib29sIGhpdFN0YXRlbWVudChFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAq
ZXhlYykgS0pTX0ZBU1RfQ0FMTCA9IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4
ZWNTdGF0ZSAqZXhlYykgS0pTX0ZBU1RfQ0FMTCA9IDA7CiAgICAgdm9pZCBwdXNoTGFiZWwoY29u
c3QgSWRlbnRpZmllciAmaWQpIEtKU19GQVNUX0NBTEwgeyBscy5wdXNoKGlkKTsgfQogICAgIHZp
cnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgIHByb3RlY3RlZDoKKyAgICBib29sIGhpdFN0
YXRlbWVudChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIExhYmVsU3RhY2sgbHM7CiAg
IHByaXZhdGU6CiAgICAgaW50IG1fbGFzdExpbmU7CkBAIC0xNzI0LDcgKzE3MjgsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIFZhclN0YXRlbWVudE5vZGUoVmFyRGVjbE5vZGUq
IGwpIEtKU19GQVNUX0NBTEwgOiBuZXh0KGwpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFj
ayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKICAgICBSZWZQdHI8VmFyRGVj
bE5vZGU+IG5leHQ7CkBAIC0xNzQzLDcgKzE3NDcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgcmV0dXJuIGVsZW1zOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNf
RkFTVF9DQUxMIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIENvbXBsZXRp
b24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMICB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gQ29tcGxldGlvbigpOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEwgIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtK
U19GQVNUX0NBTEwgIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQ
cmVjRXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgpAQCAtMTc1NCw3ICsxNzU4LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBCbG9ja05vZGUoU291cmNlRWxlbWVudHMqIGNoaWxk
cmVuKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNj
ZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7Ci0gICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKICAgcHJvdGVjdGVkOgogICAgIE93blB0cjxTb3VyY2VFbGVtZW50cz4g
bV9jaGlsZHJlbjsKQEAgLTE3NjMsNyArMTc2Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFz
cyBFbXB0eVN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoK
ICAgICBFbXB0eVN0YXRlbWVudE5vZGUoKSBLSlNfRkFTVF9DQUxMIHsgfSAvLyBkZWJ1ZwotICAg
IHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAgIH07CiAKQEAgLTE3NzEsNyArMTc3NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJs
aWM6CiAgICAgRXhwclN0YXRlbWVudE5vZGUoRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NB
TEwgOiBleHByKGUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NB
TEw7Ci0gICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pT
X0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7
CkBAIC0xNzgyLDcgKzE3ODYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBJZk5vZGUoRXhwcmVz
c2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUgKnMxLCBTdGF0ZW1lbnROb2RlICpzMikgS0pTX0ZB
U1RfQ0FMTAogICAgICAgOiBleHByKGUpLCBzdGF0ZW1lbnQxKHMxKSwgc3RhdGVtZW50MihzMikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUm
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0
dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwog
ICBwcml2YXRlOgogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsKQEAgLTE3OTQsNyAr
MTc5OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRG9XaGlsZU5vZGUoU3Rh
dGVtZW50Tm9kZSAqcywgRXhwcmVzc2lvbk5vZGUqIGUpIEtKU19GQVNUX0NBTEwgOiBzdGF0ZW1l
bnQocyksIGV4cHIoZSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nl
c3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1Rf
Q0FMTDsKLSAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBL
SlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0
ZW1lbnQ7CkBAIC0xODA1LDcgKzE4MDksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgog
ICAgIFdoaWxlTm9kZShFeHByZXNzaW9uTm9kZSogZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZB
U1RfQ0FMTCA6IGV4cHIoZSksIHN0YXRlbWVudChzKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4
ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBleHByOwpAQCAtMTgyNCw3ICsxODI4LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9s
VGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAg
ICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwor
ICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwogICBwcml2YXRlOgogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjE7CkBAIC0x
ODM4LDcgKzE4NDIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBGb3JJbk5vZGUoRXhwcmVzc2lv
bk5vZGUqICBsLCBFeHByZXNzaW9uTm9kZSogZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1Rf
Q0FMTDsKICAgICBGb3JJbk5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgQXNzaWduRXhwck5vZGUg
KmluLCBFeHByZXNzaW9uTm9kZSogZSwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTDsK
ICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERl
Y2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwg
Q29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAg
VmFyRGVjbE5vZGUqIGdldFZhckRlY2woKSB7IHJldHVybiB2YXJEZWNsLmdldCgpOyB9CiAgIHBy
aXZhdGU6CkBAIC0xODU0LDcgKzE4NTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgog
ICAgIENvbnRpbnVlTm9kZSgpIEtKU19GQVNUX0NBTEwgeyB9CiAgICAgQ29udGludWVOb2RlKGNv
bnN0IElkZW50aWZpZXIgJmkpIEtKU19GQVNUX0NBTEwgOiBpZGVudChpKSB7IH0KLSAgICB2aXJ0
dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwog
ICBwcml2YXRlOgogICAgIElkZW50aWZpZXIgaWRlbnQ7CkBAIC0xODY0LDcgKzE4NjgsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEJyZWFrTm9kZSgpIEtKU19GQVNUX0NBTEwg
eyB9CiAgICAgQnJlYWtOb2RlKGNvbnN0IElkZW50aWZpZXIgJmkpIEtKU19GQVNUX0NBTEwgOiBp
ZGVudChpKSB7IH0KLSAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIElkZW50aWZpZXIgaWRlbnQ7CkBA
IC0xODc0LDcgKzE4NzgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIFJldHVy
bk5vZGUoRXhwcmVzc2lvbk5vZGUqIHYpIEtKU19GQVNUX0NBTEwgOiB2YWx1ZSh2KSB7fQogICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFy
YXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBDb21w
bGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpT
VmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0
ZToKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IHZhbHVlOwpAQCAtMTg4NCw3ICsxODg4LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBXaXRoTm9kZShFeHByZXNzaW9uTm9k
ZSogZSwgU3RhdGVtZW50Tm9kZSogcykgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIHN0YXRlbWVu
dChzKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xU
YWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAg
IHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NB
TEw7CiAgIHByaXZhdGU6CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwpAQCAtMTg5
NSw3ICsxODk5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBMYWJlbE5vZGUo
Y29uc3QgSWRlbnRpZmllciAmbCwgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTCA6IGxh
YmVsKGwpLCBzdGF0ZW1lbnQocykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOworICAgIHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgogICAgIElkZW50aWZpZXIgbGFiZWw7CkBA
IC0xOTA2LDcgKzE5MTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIFRocm93
Tm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgQ29tcGxl
dGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVhbCBKU1Zh
bHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6
CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwpAQCAtMTkxNyw3ICsxOTIxLDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgVHJ5Tm9kZShTdGF0ZW1lbnROb2RlICpiLCBjb25zdCBJZGVu
dGlmaWVyICZlLCBTdGF0ZW1lbnROb2RlICpjLCBTdGF0ZW1lbnROb2RlICpmKSBLSlNfRkFTVF9D
QUxMCiAgICAgICA6IHRyeUJsb2NrKGIpLCBleGNlcHRpb25JZGVudChlKSwgY2F0Y2hCbG9jayhj
KSwgZmluYWxseUJsb2NrKGYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7Ci0gICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4g
dHJ5QmxvY2s7CkBAIC0xOTY0LDcgKzE5NjgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3Mg
UHJvZ3JhbU5vZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgcHVibGljOgogICAgIFByb2dyYW1O
b2RlKFNvdXJjZUVsZW1lbnRzKiwgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrKiwgRGVjbGFy
YXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwg
Q29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CisgICAgdmlydHVh
bCBKU1ZhbHVlKiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgCiAgIHBy
aXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplU3ltYm9sVGFibGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKQEAgLTE5NzcsNyArMTk4MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBF
dmFsTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICBwdWJsaWM6CiAgICAgRXZhbE5vZGUoU291
cmNlRWxlbWVudHMqLCBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2sqLCBEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjayopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBDb21wbGV0
aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFs
dWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAKICAgcHJpdmF0ZToK
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHJvY2Vzc0RlY2xhcmF0aW9ucyhFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwpAQCAtMTk4Nyw3ICsxOTkxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1
YmxpYzoKICAgICBGdW5jdGlvbkJvZHlOb2RlKFNvdXJjZUVsZW1lbnRzKiwgRGVjbGFyYXRpb25T
dGFja3M6OlZhclN0YWNrKiwgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sqKSBLSlNf
RkFTVF9DQUxMOwogCi0gICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKIAogICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIEtKU19GQVNU
X0NBTEwgeyByZXR1cm4gbV9zeW1ib2xUYWJsZTsgfQogCkBAIC0yMDI1LDcgKzIwMjksNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgIDogaWRlbnQoaSksIGJvZHkoYikgeyBhZGRQYXJhbXMoKTsg
fQogICAgIEZ1bmNEZWNsTm9kZShjb25zdCBJZGVudGlmaWVyJiBpLCBQYXJhbWV0ZXJOb2RlKiBw
LCBGdW5jdGlvbkJvZHlOb2RlKiBiKSBLSlNfRkFTVF9DQUxMCiAgICAgICA6IGlkZW50KGkpLCBw
YXJhbShwKSwgYm9keShiKSB7IGFkZFBhcmFtcygpOyB9Ci0gICAgdmlydHVhbCBDb21wbGV0aW9u
IGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUq
IGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICBBTFdBWVNfSU5M
SU5FIEZ1bmN0aW9uSW1wKiBtYWtlRnVuY3Rpb24oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICBJZGVudGlmaWVyIGlkZW50OwpAQCAtMjA0NSw3ICsyMDQ5LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogCiAgICAgICBKU1ZhbHVl
KiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgICAgQ29tcGxldGlvbiBl
dmFsU3RhdGVtZW50cyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgSlNWYWx1ZSog
ZXhlY3V0ZVN0YXRlbWVudHMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKIAogICBwcml2YXRl
OgogICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwpAQCAtMjA3Myw3ICsyMDc3LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICAgIENhc2VCbG9ja05vZGUoQ2xhdXNl
TGlzdE5vZGUqIGwxLCBDYXNlQ2xhdXNlTm9kZSogZCwgQ2xhdXNlTGlzdE5vZGUqIGwyKSBLSlNf
RkFTVF9DQUxMOwogICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3lt
Ym9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
LSAgICAgIENvbXBsZXRpb24gZXZhbEJsb2NrKEV4ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZSAqaW5w
dXQpIEtKU19GQVNUX0NBTEw7CisgICAgICBKU1ZhbHVlKiBleGVjdXRlQmxvY2soRXhlY1N0YXRl
KiwgSlNWYWx1ZSAqaW5wdXQpIEtKU19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwg
UHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgIHByaXZhdGU6CkBAIC0yMDg2LDcgKzIwOTAsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgICAgU3dpdGNoTm9kZShFeHByZXNzaW9uTm9k
ZSogZSwgQ2FzZUJsb2NrTm9kZSAqYikgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSksIGJsb2NrKGIp
IHsgfQogICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFi
bGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKLSAgICAg
IHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Cisg
ICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICBwcml2YXRlOgogICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5oCShyZXZpc2lvbiAyODg4NSkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcg
Kzg4LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwogICAgIGVudW0geyBOYU5WYWx1ZSwgTmVnSW5maW5pdHksIFBvc0luZmluaXR5LCBNYXhWYWx1
ZSwgTWluVmFsdWUgfTsKIAotICAgIENvbXBsZXRpb24gZXhlY3V0ZShjb25zdCBMaXN0ICYpOwog
ICAgIEpTT2JqZWN0ICpjb25zdHJ1Y3QoY29uc3QgTGlzdCAmKTsKICAgfTsKIAo=
</data>
<flag name="review"
          id="7808"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>