<?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>10169</bug_id>
          
          <creation_ts>2006-07-31 07:58:45 -0700</creation_ts>
          <short_desc>REGRESSION: NativeTextArea: Text dragged from &lt;input type=text&gt; to textarea disappears</short_desc>
          <delta_ts>2006-08-24 15:01:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>420+</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>http://bugzilla.opendarwin.org/enter_bug.cgi?product=WebKit</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jonathanjohnsson</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>51197</commentid>
    <comment_count>0</comment_count>
    <who name="">jonathanjohnsson</who>
    <bug_when>2006-07-31 07:58:45 -0700</bug_when>
    <thetext>If you drag text from any &lt;input type=&quot;text&quot;&gt; element to a textarea (e.g. from URL: to Description: on the bug report page), the text disappears from the input element, but doesn&apos;t enter the textarea. Instead, nothing is added to the textarea, and it becomes &quot;semi-selected&quot; -- it gets the blue square, but not the cursor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51759</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-04 06:48:05 -0700</bug_when>
    <thetext>The problem here is in WebCore::Frame::appliedEditing.

When you drop the text into the &lt;textarea&gt;, the new select is inside the &lt;texarea&gt;. So the appliedEditing function ends up focusing the &lt;texarea&gt; when setSelection is called.

But it&apos;s only after that when dispatchEditableContentChangedEvent is called. There are other things wrong too, for example, if the selection delegate refuses to change the selection then we won&apos;t communicate where the change took place, which is incorrect. Whether the selection moves or not is unimportant.

I&apos;ll try rearranging code to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>51879</commentid>
    <comment_count>2</comment_count>
      <attachid>9893</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-05 13:00:22 -0700</bug_when>
    <thetext>Created attachment 9893
editing cleanup patch that fixes this bug (needs change log, tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53227</commentid>
    <comment_count>3</comment_count>
      <attachid>10186</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-23 17:00:20 -0700</bug_when>
    <thetext>Created attachment 10186
editing cleanup patch that also fixes this bug, including change log and test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53235</commentid>
    <comment_count>4</comment_count>
      <attachid>10186</attachid>
    <who name="">mitz</who>
    <bug_when>2006-08-23 22:33:21 -0700</bug_when>
    <thetext>Comment on attachment 10186
editing cleanup patch that also fixes this bug, including change log and test

+    // FIXME: Ugh, don&apos;t want delays in layout tests!
+    eventSender.leapForward(400);
leapForward() works by offsetting the timestamps on subsequent events, so there&apos;s no delay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53245</commentid>
    <comment_count>5</comment_count>
      <attachid>10186</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-08-23 23:20:30 -0700</bug_when>
    <thetext>Comment on attachment 10186
editing cleanup patch that also fixes this bug, including change log and test

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53265</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-24 09:46:43 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 10186 [edit])
&gt; +    // FIXME: Ugh, don&apos;t want delays in layout tests!
&gt; +    eventSender.leapForward(400);
&gt; leapForward() works by offsetting the timestamps on subsequent events, so
&gt; there&apos;s no delay.

OK. Great. I&apos;ll remove that comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53384</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-24 15:01:54 -0700</bug_when>
    <thetext>Committed revision 16026.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>9893</attachid>
            <date>2006-08-05 13:00:22 -0700</date>
            <delta_ts>2006-08-23 17:00:20 -0700</delta_ts>
            <desc>editing cleanup patch that fixes this bug (needs change log, tests)</desc>
            <filename>EditingPatch.txt</filename>
            <type>text/plain</type>
            <size>180036</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1ODA3KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAyLDIz
ICsxNjAyLDYgQEAKIAkJRkFFMDQxOTAwOTc1OTZDOTAwMDU0MEJFIC8qIFNWR0ltYWdlTG9hZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQUUwNDE4
RTA5NzU5NkM5MDAwNTQwQkUgLyogU1ZHSW1hZ2VMb2FkZXIuaCAqLzsgfTsKIC8qIEVuZCBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLwogCi0vKiBCZWdpbiBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8K
LQkJQkNGRTM0ODcwQTgyRjE2QTAwQjU5OEJFIC8qIERldmVsb3BtZW50ICovID0gewotCQkJaXNh
ID0gUEJYQnVpbGRTdHlsZTsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJQ09QWV9QSEFTRV9T
VFJJUCA9IE5POwotCQkJfTsKLQkJCW5hbWUgPSBEZXZlbG9wbWVudDsKLQkJfTsKLQkJQkNGRTM0
ODgwQTgyRjE2QTAwQjU5OEJFIC8qIERlcGxveW1lbnQgKi8gPSB7Ci0JCQlpc2EgPSBQQlhCdWls
ZFN0eWxlOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVT
OwotCQkJfTsKLQkJCW5hbWUgPSBEZXBsb3ltZW50OwotCQl9OwotLyogRW5kIFBCWEJ1aWxkU3R5
bGUgc2VjdGlvbiAqLwotCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAq
LwogCQlERDA0MUZGMDA5RDlFMzI1MDAxMEFGMkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwpAQCAtNjQ2OCwxMiArNjQ1MSw2
IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsK
IAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4
NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJv
amVjdCAiV2ViQ29yZSIgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCWJ1aWxk
U3R5bGVzID0gKAotCQkJCUJDRkUzNDg3MEE4MkYxNkEwMEI1OThCRSAvKiBEZXZlbG9wbWVudCAq
LywKLQkJCQlCQ0ZFMzQ4ODBBODJGMTZBMDBCNTk4QkUgLyogRGVwbG95bWVudCAqLywKLQkJCSk7
CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJ
CQlFbmdsaXNoLApJbmRleDogYnJpZGdlL21hYy9GcmFtZU1hYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJy
aWRnZS9tYWMvRnJhbWVNYWMuaAkocmV2aXNpb24gMTU4MDcpCisrKyBicmlkZ2UvbWFjL0ZyYW1l
TWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw4ICsyNTEsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRQbHVnaW5Sb290T2JqZWN0KEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QpOwog
ICAgIHZvaWQgY2xlYW51cFBsdWdpblJvb3RPYmplY3RzKCk7CiAgICAgCi0gICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciYp
OworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8RWRp
dENvbW1hbmQ+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNz
UmVmUHRyPEVkaXRDb21tYW5kPik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVy
YXRpb25zKCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlVW5kb0NvbW1hbmQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgaXNzdWVSZWRvQ29tbWFuZCgpOwpAQCAtMzM3LDcgKzMzNyw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGZyZWVDbGlwYm9hcmQoKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJDb21tYW5k
Rm9yVW5kb09yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciAmY21kLCBib29sIGlzUmVkbyk7Cisg
ICAgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JSZWRvKFBhc3NSZWZQdHI8RWRpdENvbW1h
bmQ+LCBib29sIGlzUmVkbyk7CiAKICAgICBXZWJDb3JlRnJhbWVCcmlkZ2UqIF9icmlkZ2U7CiAg
ICAgCkluZGV4OiBicmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9t
YWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDE1ODA3KQorKysgYnJpZGdlL21hYy9GcmFtZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzAzMiwyNiArMzAzMiwyNiBAQCB2b2lkIEZyYW1lTWFjOjpj
bGVhbnVwUGx1Z2luUm9vdE9iamVjdHMoCiAgICAgbV9yb290T2JqZWN0cy5jbGVhcigpOwogfQog
Ci12b2lkIEZyYW1lTWFjOjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JSZWRvKGNvbnN0IEVkaXRD
b21tYW5kUHRyICZjbWQsIGJvb2wgaXNSZWRvKQordm9pZCBGcmFtZU1hYzo6cmVnaXN0ZXJDb21t
YW5kRm9yVW5kb09yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQsIGJvb2wgaXNSZWRv
KQogewogICAgIEFTU0VSVChjbWQuZ2V0KCkpOwotICAgIFdlYkNvcmVFZGl0Q29tbWFuZCAqa3dx
ID0gW1dlYkNvcmVFZGl0Q29tbWFuZCBjb21tYW5kV2l0aEVkaXRDb21tYW5kOmNtZC5nZXQoKV07
Ci0gICAgTlNVbmRvTWFuYWdlciAqdW5kb01hbmFnZXIgPSBbX2JyaWRnZSB1bmRvTWFuYWdlcl07
Ci0gICAgW3VuZG9NYW5hZ2VyIHJlZ2lzdGVyVW5kb1dpdGhUYXJnZXQ6X2JyaWRnZSBzZWxlY3Rv
cjooaXNSZWRvID8gQHNlbGVjdG9yKHJlZG9FZGl0aW5nOikgOiBAc2VsZWN0b3IodW5kb0VkaXRp
bmc6KSkgb2JqZWN0Omt3cV07Ci0gICAgTlNTdHJpbmcgKmFjdGlvbk5hbWUgPSBbX2JyaWRnZSBu
YW1lRm9yVW5kb0FjdGlvbjpzdGF0aWNfY2FzdDxXZWJVbmRvQWN0aW9uPihjbWQuZWRpdGluZ0Fj
dGlvbigpKV07CisgICAgV2ViQ29yZUVkaXRDb21tYW5kKiBjb21tYW5kID0gW1dlYkNvcmVFZGl0
Q29tbWFuZCBjb21tYW5kV2l0aEVkaXRDb21tYW5kOmNtZC5nZXQoKV07CisgICAgTlNVbmRvTWFu
YWdlciogdW5kb01hbmFnZXIgPSBbX2JyaWRnZSB1bmRvTWFuYWdlcl07CisgICAgW3VuZG9NYW5h
Z2VyIHJlZ2lzdGVyVW5kb1dpdGhUYXJnZXQ6X2JyaWRnZSBzZWxlY3RvcjooaXNSZWRvID8gQHNl
bGVjdG9yKHJlZG9FZGl0aW5nOikgOiBAc2VsZWN0b3IodW5kb0VkaXRpbmc6KSkgb2JqZWN0OmNv
bW1hbmRdOworICAgIE5TU3RyaW5nKiBhY3Rpb25OYW1lID0gW19icmlkZ2UgbmFtZUZvclVuZG9B
Y3Rpb246c3RhdGljX2Nhc3Q8V2ViVW5kb0FjdGlvbj4oY21kLT5lZGl0aW5nQWN0aW9uKCkpXTsK
ICAgICBpZiAoYWN0aW9uTmFtZSkKICAgICAgICAgW3VuZG9NYW5hZ2VyIHNldEFjdGlvbk5hbWU6
YWN0aW9uTmFtZV07CiAgICAgX2hhdmVVbmRvUmVkb09wZXJhdGlvbnMgPSBZRVM7CiB9CiAKLXZv
aWQgRnJhbWVNYWM6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oY29uc3QgRWRpdENvbW1hbmRQdHIg
JmNtZCkKK3ZvaWQgRnJhbWVNYWM6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxF
ZGl0Q29tbWFuZD4gY21kKQogewotICAgIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG9PclJlZG8oY21k
LCBOTyk7CisgICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhjbWQsIGZhbHNlKTsKIH0K
IAotdm9pZCBGcmFtZU1hYzo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBFZGl0Q29tbWFu
ZFB0ciAmY21kKQordm9pZCBGcmFtZU1hYzo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVm
UHRyPEVkaXRDb21tYW5kPiBjbWQpCiB7Ci0gICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVk
byhjbWQsIFlFUyk7CisgICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhjbWQsIHRydWUp
OwogfQogCiB2b2lkIEZyYW1lTWFjOjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpCkluZGV4OiBi
cmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTU4MDcpCisrKyBicmlkZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk2Nyw3ICsxOTY3LDcgQEAg
c3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogICAgIGlmICghbV9mcmFt
ZS0+aGFzU2VsZWN0aW9uKCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgRWRpdENvbW1hbmRQdHIobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKG1fZnJhbWUtPmRv
Y3VtZW50KCksIFtmcmFnbWVudCBfZnJhZ21lbnRdLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRS
ZXBsYWNlLCBtYXRjaFN0eWxlKSkuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kKFtmcmFnbWVudCBfZnJhZ21lbnRdLCBzZWxlY3RSZXBsYWNlbWVu
dCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlKSk7CiAgICAgW3NlbGYgZW5zdXJlU2VsZWN0aW9u
VmlzaWJsZV07CiB9CiAKQEAgLTIwODMsOCArMjA4Myw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1l
bnQgKmZvcm1FbGVtZW50RnJvbUQKIAogLSAodm9pZCltb3ZlU2VsZWN0aW9uVG9EcmFnQ2FyZXQ6
KERPTURvY3VtZW50RnJhZ21lbnQgKilzZWxlY3Rpb25GcmFnbWVudCBzbWFydE1vdmU6KEJPT0wp
c21hcnRNb3ZlCiB7Ci0gICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUtPmRyYWdDYXJldCgpLmJh
c2UoKTsKLSAgICBFZGl0Q29tbWFuZFB0cihuZXcgTW92ZVNlbGVjdGlvbkNvbW1hbmQobV9mcmFt
ZS0+ZG9jdW1lbnQoKSwgW3NlbGVjdGlvbkZyYWdtZW50IF9mcmFnbWVudF0sIGJhc2UsIHNtYXJ0
TW92ZSkpLmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5ldyBNb3ZlU2VsZWN0aW9uQ29tbWFu
ZChbc2VsZWN0aW9uRnJhZ21lbnQgX2ZyYWdtZW50XSwgbV9mcmFtZS0+ZHJhZ0NhcmV0KCkuYmFz
ZSgpLCBzbWFydE1vdmUpKTsKIH0KIAogLSAoVmlzaWJsZVBvc2l0aW9uKV92aXNpYmxlUG9zaXRp
b25Gb3JQb2ludDooTlNQb2ludClwb2ludApAQCAtMjE1OSw3ICsyMTU4LDcgQEAgc3RhdGljIEhU
TUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogICAgIGlmICghbV9mcmFtZS0+aGFzU2Vs
ZWN0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBFZGl0Q29tbWFuZFB0cihuZXcg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBzbWFydERlbGV0ZSkp
LmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5ldyBEZWxldGVTZWxlY3Rpb25Db21tYW5kKG1f
ZnJhbWUtPmRvY3VtZW50KCksIHNtYXJ0RGVsZXRlKSk7CiB9CiAKIC0gKHZvaWQpZGVsZXRlS2V5
UHJlc3NlZFdpdGhTbWFydERlbGV0ZTooQk9PTClzbWFydERlbGV0ZSBncmFudWxhcml0eTooV2Vi
QnJpZGdlU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKSW5kZXg6IGJyaWRnZS93aW4v
RnJhbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2Uvd2luL0ZyYW1lV2luLmgJKHJldmlzaW9u
IDE1ODA3KQorKysgYnJpZGdlL3dpbi9GcmFtZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
OCArMTAwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2Uq
IGdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOwogICAgIHZpcnR1YWwgS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UqIGdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOwog
ICAgIAotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKGNvbnN0IEVkaXRD
b21tYW5kUHRyJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oY29u
c3QgRWRpdENvbW1hbmRQdHImKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9y
VW5kbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
Q29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVVuZG9D
b21tYW5kKCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlUmVkb0NvbW1hbmQoKTsKSW5kZXg6IGVk
aXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvQXBwZW5k
Tm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvQXBwZW5kTm9kZUNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzUgKzI4
LDM0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQXBwZW5kTm9kZUNvbW1hbmQ6OkFwcGVu
ZE5vZGVDb21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgTm9kZSAqYXBwZW5kQ2hpbGQsIE5vZGUg
KnBhcmVudE5vZGUpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fYXBwZW5kQ2hpbGQo
YXBwZW5kQ2hpbGQpLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSkKK0FwcGVuZE5vZGVDb21tYW5k
OjpBcHBlbmROb2RlQ29tbWFuZChOb2RlKiBwYXJlbnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IGNo
aWxkVG9BcHBlbmQpCisgICAgOiBFZGl0Q29tbWFuZChwYXJlbnROb2RlLT5kb2N1bWVudCgpKSwg
bV9wYXJlbnROb2RlKHBhcmVudE5vZGUpLCBtX2NoaWxkVG9BcHBlbmQoY2hpbGRUb0FwcGVuZCkK
IHsKLSAgICBBU1NFUlQobV9hcHBlbmRDaGlsZCk7CisgICAgQVNTRVJUKG1fY2hpbGRUb0FwcGVu
ZCk7CiAgICAgQVNTRVJUKG1fcGFyZW50Tm9kZSk7CiB9CiAKIHZvaWQgQXBwZW5kTm9kZUNvbW1h
bmQ6OmRvQXBwbHkoKQogewotICAgIEFTU0VSVChtX2FwcGVuZENoaWxkKTsKKyAgICBBU1NFUlQo
bV9jaGlsZFRvQXBwZW5kKTsKICAgICBBU1NFUlQobV9wYXJlbnROb2RlKTsKICAgICAvLyBJZiB0
aGUgY2hpbGQgdG8gYXBwZW5kIGlzIGFscmVhZHkgaW4gYSB0cmVlLCBhcHBlbmRpbmcgaXQgd2ls
bCByZW1vdmUgaXQgZnJvbSBpdCdzIG9sZCBsb2NhdGlvbgogICAgIC8vIGluIGFuIG5vbi11bmRv
YWJsZSB3YXkuICBXZSBtaWdodCBldmVudHVhbGx5IGZpbmQgaXQgdXNlZnVsIHRvIGRvIGFuIHVu
ZG9hYmxlIHJlbW92ZSBpbiB0aGlzIGNhc2UuCi0gICAgQVNTRVJUKCFtX2FwcGVuZENoaWxkLT5w
YXJlbnQoKSk7CisgICAgQVNTRVJUKCFtX2NoaWxkVG9BcHBlbmQtPnBhcmVudCgpKTsKICAgICBB
U1NFUlQobV9wYXJlbnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFtX3BhcmVudE5vZGUt
PmF0dGFjaGVkKCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbV9wYXJlbnRO
b2RlLT5hcHBlbmRDaGlsZChtX2FwcGVuZENoaWxkLmdldCgpLCBlYyk7CisgICAgbV9wYXJlbnRO
b2RlLT5hcHBlbmRDaGlsZChtX2NoaWxkVG9BcHBlbmQuZ2V0KCksIGVjKTsKICAgICBBU1NFUlQo
ZWMgPT0gMCk7CiB9CiAKIHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0g
ICAgQVNTRVJUKG1fYXBwZW5kQ2hpbGQpOworICAgIEFTU0VSVChtX2NoaWxkVG9BcHBlbmQpOwog
ICAgIEFTU0VSVChtX3BhcmVudE5vZGUpOwotICAgIEFTU0VSVChzdGF0ZSgpID09IEFwcGxpZWQp
OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgbV9wYXJlbnROb2RlLT5yZW1vdmVD
aGlsZChtX2FwcGVuZENoaWxkLmdldCgpLCBlYyk7CisgICAgbV9wYXJlbnROb2RlLT5yZW1vdmVD
aGlsZChtX2NoaWxkVG9BcHBlbmQuZ2V0KCksIGVjKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7CiB9
CiAKSW5kZXg6IGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0
aW5nL0FwcGVuZE5vZGVDb21tYW5kLmgJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9BcHBl
bmROb2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMs
MzUgKzIzLDI4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIF9fYXBwZW5kX25v
ZGVfY29tbWFuZF9oX18KLSNkZWZpbmUgX19hcHBlbmRfbm9kZV9jb21tYW5kX2hfXworI2lmbmRl
ZiBhcHBlbmRfbm9kZV9jb21tYW5kX2hfXworI2RlZmluZSBhcHBlbmRfbm9kZV9jb21tYW5kX2hf
XwogCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IGNsYXNzIE5vZGU7Ci19CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXBwZW5kTm9k
ZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQKLXsKK2NsYXNzIEFwcGVuZE5vZGVDb21tYW5k
IDogcHVibGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBBcHBlbmROb2RlQ29tbWFuZChE
b2N1bWVudCAqLCBOb2RlICphcHBlbmRDaGlsZCwgTm9kZSAqcGFyZW50Tm9kZSk7Ci0gICAgdmly
dHVhbCB+QXBwZW5kTm9kZUNvbW1hbmQoKSB7IH0KKyAgICBBcHBlbmROb2RlQ29tbWFuZChOb2Rl
KiBwYXJlbnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkVG9BcHBlbmQpOwogCiAgICAgdmly
dHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAg
ICBOb2RlICphcHBlbmRDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwZW5kQ2hpbGQuZ2V0KCk7
IH0KLSAgICBOb2RlICpwYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlLmdl
dCgpOyB9CisgICAgTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9k
ZS5nZXQoKTsgfQorICAgIE5vZGUqIGNoaWxkVG9BcHBlbmQoKSBjb25zdCB7IHJldHVybiBtX2No
aWxkVG9BcHBlbmQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9hcHBl
bmRDaGlsZDsKICAgICBSZWZQdHI8Tm9kZT4gbV9wYXJlbnROb2RlOworICAgIFJlZlB0cjxOb2Rl
PiBtX2NoaWxkVG9BcHBlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBfX2FwcGVuZF9ub2RlX2NvbW1hbmRfaF9fCi0KKyNlbmRpZiAvLyBhcHBlbmRfbm9kZV9j
b21tYW5kX2hfXwpJbmRleDogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1ODA3KQorKysg
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw4ICsy
ODAsOCBAQCBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jCiB7CiB9CiAK
LUFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQs
IEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgcmVtb3ZlT25seSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpCitBcHBseVN0eWxlQ29t
bWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRWxlbWVudCogZWxlbWVudCwgYm9vbCByZW1vdmVPbmx5
LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChl
bGVtZW50LT5kb2N1bWVudCgpKQogICAgICwgbV9zdHlsZShuZXcgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24oKSkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKQogICAgICwg
bV9wcm9wZXJ0eUxldmVsKFByb3BlcnR5RGVmYXVsdCkKSW5kZXg6IGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHJl
dmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxNCArMzIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1M
RWxlbWVudDsKIAotY2xhc3MgQXBwbHlTdHlsZUNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRp
dENvbW1hbmQKLXsKK2NsYXNzIEFwcGx5U3R5bGVDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVk
aXRDb21tYW5kIHsKIHB1YmxpYzoKICAgICBlbnVtIEVQcm9wZXJ0eUxldmVsIHsgUHJvcGVydHlE
ZWZhdWx0LCBGb3JjZUJsb2NrUHJvcGVydGllcyB9OwogCiAgICAgQXBwbHlTdHlsZUNvbW1hbmQo
RG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25D
aGFuZ2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCA9IFByb3BlcnR5RGVmYXVsdCk7CiAgICAg
QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uID0gRWRpdEFj
dGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsID0gUHJvcGVydHlEZWZhdWx0KTsK
LSAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCosIEVsZW1lbnQqLCBib29sID0gZmFsc2Us
IEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CisgICAgQXBwbHlTdHls
ZUNvbW1hbmQoRWxlbWVudCosIGJvb2wgPSBmYWxzZSwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25D
aGFuZ2VBdHRyaWJ1dGVzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmly
dHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdDsKQEAgLTQ5LDcgKzQ4LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICAvLyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBib29s
IGlzSFRNTFN0eWxlTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50
Kik7Ci0gICAgdm9pZCByZW1vdmVIVE1MU3R5bGVOb2RlKEhUTUxFbGVtZW50ICopOworICAgIHZv
aWQgcmVtb3ZlSFRNTFN0eWxlTm9kZShIVE1MRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlSFRN
TEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7CiAg
ICAgdm9pZCByZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxF
bGVtZW50Kik7CiAgICAgdm9pZCByZW1vdmVCbG9ja1N0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKSW5k
ZXg6IGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRp
dGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0
aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQnJlYWtCbG9ja3F1b3RlQ29t
bWFuZC5oIgogCisjaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKICNpbmNsdWRlICJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMTU1
LDcgKzE1Niw3IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
fQogICAgIAogICAgIC8vIFB1dCB0aGUgc2VsZWN0aW9uIHJpZ2h0IGJlZm9yZSB0aGUgYnJlYWsu
Ci0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKFBvc2l0aW9uKGJyZWFrTm9kZS5nZXQoKSwgMCksIERP
V05TVFJFQU0pOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24oYnJl
YWtOb2RlLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkpOwogICAgIHJlYmFsYW5jZVdoaXRlc3BhY2Uo
KTsKIH0KIApJbmRleDogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgJKHJldmlzaW9uIDE1ODA3KQor
KysgZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNywxNSArMjcsMTIgQEAKICNkZWZpbmUgYnJlYWtfYmxvY2txdW90
ZV9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKLSNpbmNs
dWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQKLXsK
K2NsYXNzIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1h
bmQgewogcHVibGljOgotICAgIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQoRG9jdW1lbnQgKik7Ci0K
KyAgICBCcmVha0Jsb2NrcXVvdGVDb21tYW5kKERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB2b2lk
IGRvQXBwbHkoKTsKIH07CiAKSW5kZXg6IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lv
biAxNTgwNykKKysrIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw4ICs2Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGNvbnN0IFN0cmluZyAmYmxvY2tQbGFjZWhvbGRlckNs
YXNzU3RyaW5nKCk7Ci0KIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZChEb2N1bWVudCAqZG9jdW1lbnQpIAogICAgIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpCiB7CkBA
IC03NSwxMzkgKzczLDExNSBAQCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Q29tcG9zaXRlRWRpdENv
bW1hCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYg
KG1fY21kcy5jb3VudCgpID09IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBEZXByZWNh
dGVkVmFsdWVMaXN0PEVkaXRDb21tYW5kUHRyPjo6Q29uc3RJdGVyYXRvciBlbmQ7Ci0gICAgZm9y
IChEZXByZWNhdGVkVmFsdWVMaXN0PEVkaXRDb21tYW5kUHRyPjo6Q29uc3RJdGVyYXRvciBpdCA9
IG1fY21kcy5mcm9tTGFzdCgpOyBpdCAhPSBlbmQ7IC0taXQpCi0gICAgICAgICgqaXQpLT51bmFw
cGx5KCk7Ci0KLSAgICBzZXRTdGF0ZShOb3RBcHBsaWVkKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1f
Y29tbWFuZHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpICE9IDA7IC0taSkK
KyAgICAgICAgbV9jb21tYW5kc1tpIC0gMV0tPnVuYXBwbHkoKTsKIH0KIAogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6ZG9SZWFwcGx5KCkKIHsKLSAgICBpZiAobV9jbWRzLmNvdW50KCkgPT0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0PEVkaXRD
b21tYW5kUHRyPjo6Q29uc3RJdGVyYXRvciBpdCA9IG1fY21kcy5iZWdpbigpOyBpdCAhPSBtX2Nt
ZHMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT5yZWFwcGx5KCk7Ci0KLSAgICBzZXRTdGF0
ZShBcHBsaWVkKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkKKyAgICAgICAgbV9jb21tYW5kc1tpXS0+
cmVhcHBseSgpOwogfQogCiAvLwogLy8gc3VnYXJ5LXN3ZWV0IGNvbnZlbmllbmNlIGZ1bmN0aW9u
cyB0byBoZWxwIGNyZWF0ZSBhbmQgYXBwbHkgZWRpdCBjb21tYW5kcyBpbiBjb21wb3NpdGUgY29t
bWFuZHMKIC8vCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShFZGl0Q29tbWFuZFB0ciAmY21kKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogewotICAg
IGNtZC5zZXRTdGFydGluZ1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7Ci0gICAgY21kLnNl
dEVuZGluZ1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7Ci0gICAgY21kLnNldFBhcmVudCh0
aGlzKTsKLSAgICBjbWQuYXBwbHkoKTsKLSAgICBtX2NtZHMuYXBwZW5kKGNtZCk7CisgICAgY21k
LT5zZXRQYXJlbnQodGhpcyk7CisgICAgY21kLT5hcHBseSgpOworICAgIG1fY29tbWFuZHMuYXBw
ZW5kKGNtZCk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3ZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQo
bmV3IEFwcGx5U3R5bGVDb21tYW5kKGRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uKSk7
Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdB
Y3Rpb24pKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uICpzdHlsZSwgUG9zaXRpb24gc3RhcnQsIFBvc2l0aW9uIGVuZCwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgRWRp
dENvbW1hbmRQdHIgY21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCgpLCBzdHlsZSwg
c3RhcnQsIGVuZCwgZWRpdGluZ0FjdGlvbikpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRl
KGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IEFwcGx5U3R5bGVDb21tYW5k
KGRvY3VtZW50KCksIHN0eWxlLCBzdGFydCwgZW5kLCBlZGl0aW5nQWN0aW9uKSk7CiB9CiAKIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGVkRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50KQogewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9j
dW1lbnQoKSwgZWxlbWVudCwgZmFsc2UpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShj
bWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBBcHBseVN0eWxlQ29tbWFuZChl
bGVtZW50LCBmYWxzZSkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVT
dHlsZWRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21k
KG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCgpLCBlbGVtZW50LCB0cnVlKSk7Ci0gICAg
YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZWxlbWVudCwgdHJ1ZSkpOwogfQogCiB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogewotICAgIEVkaXRD
b21tYW5kUHRyIGNtZChuZXcgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVu
dCgpKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVu
dCgpKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUo
Tm9kZSAqaW5zZXJ0Q2hpbGQsIE5vZGUgKnJlZkNoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZShOb2RlKiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hpbGQp
CiB7CiAgICAgQVNTRVJUKCFyZWZDaGlsZC0+aGFzVGFnTmFtZShib2R5VGFnKSk7Ci0gICAgRWRp
dENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChkb2N1bWVudCgpLCBp
bnNlcnRDaGlsZCwgcmVmQ2hpbGQpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQp
OworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFu
ZChpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6aW5zZXJ0Tm9kZUFmdGVyKE5vZGUgKmluc2VydENoaWxkLCBOb2RlICpyZWZDaGlsZCkKK3Zv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBZnRlcihOb2RlKiBpbnNlcnRDaGls
ZCwgTm9kZSogcmVmQ2hpbGQpCiB7CiAgICAgQVNTRVJUKCFyZWZDaGlsZC0+aGFzVGFnTmFtZShi
b2R5VGFnKSk7Ci0gICAgaWYgKHJlZkNoaWxkLT5wYXJlbnROb2RlKCktPmxhc3RDaGlsZCgpID09
IHJlZkNoaWxkKSB7CisgICAgaWYgKHJlZkNoaWxkLT5wYXJlbnROb2RlKCktPmxhc3RDaGlsZCgp
ID09IHJlZkNoaWxkKQogICAgICAgICBhcHBlbmROb2RlKGluc2VydENoaWxkLCByZWZDaGlsZC0+
cGFyZW50Tm9kZSgpKTsKLSAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChyZWZDaGls
ZC0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoaW5zZXJ0Q2hpbGQs
IHJlZkNoaWxkLT5uZXh0U2libGluZygpKTsKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5vZGVBdChOb2RlICppbnNlcnRDaGlsZCwgTm9kZSAqcmVmQ2hpbGQs
IGludCBvZmZzZXQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoTm9k
ZSogaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBpbnQgb2Zmc2V0KQogewogICAgIGlmIChj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHJlZkNoaWxkKSkgewotICAgICAgICBOb2RlICpjaGls
ZCA9IHJlZkNoaWxkLT5maXJzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIGNoaWxkID0gcmVmQ2hp
bGQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGNoaWxkICYmIGkgPCBv
ZmZzZXQ7IGkrKykKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAg
ICAgICAgIGlmIChjaGlsZCkKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoaW5zZXJ0Q2hp
bGQsIGNoaWxkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXBwZW5kTm9kZShpbnNlcnRD
aGlsZCwgcmVmQ2hpbGQpOwotICAgIH0KLSAgICBlbHNlIGlmIChyZWZDaGlsZC0+Y2FyZXRNaW5P
ZmZzZXQoKSA+PSBvZmZzZXQpIHsKKyAgICB9IGVsc2UgaWYgKHJlZkNoaWxkLT5jYXJldE1pbk9m
ZnNldCgpID49IG9mZnNldCkgewogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxk
LCByZWZDaGlsZCk7Ci0gICAgfSAKLSAgICBlbHNlIGlmIChyZWZDaGlsZC0+aXNUZXh0Tm9kZSgp
ICYmIHJlZkNoaWxkLT5jYXJldE1heE9mZnNldCgpID4gb2Zmc2V0KSB7CisgICAgfSBlbHNlIGlm
IChyZWZDaGlsZC0+aXNUZXh0Tm9kZSgpICYmIHJlZkNoaWxkLT5jYXJldE1heE9mZnNldCgpID4g
b2Zmc2V0KSB7CiAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCAqPihyZWZD
aGlsZCksIG9mZnNldCk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoaW5zZXJ0Q2hpbGQsIHJl
ZkNoaWxkKTsKLSAgICB9IAotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIGluc2Vy
dE5vZGVBZnRlcihpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpOwogICAgIH0KIH0KIAotdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kTm9kZShOb2RlICphcHBlbmRDaGlsZCwgTm9kZSAqcGFy
ZW50KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kTm9kZShOb2RlKiBhcHBlbmRD
aGlsZCwgTm9kZSogcGFyZW50KQogewogICAgIEFTU0VSVChjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0
aW5nKHBhcmVudCkpOwotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgQXBwZW5kTm9kZUNvbW1h
bmQoZG9jdW1lbnQoKSwgYXBwZW5kQ2hpbGQsIHBhcmVudCkpOwotICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IEFwcGVuZE5v
ZGVDb21tYW5kKGFwcGVuZENoaWxkLCBwYXJlbnQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKE5vZGUgKm5vZGUsIGludCBmcm9tLCBpbnQg
dG8pCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9k
ZSogbm9kZSwgaW50IGZyb20sIGludCB0bykKIHsKLSAgICBOb2RlICpub2RlVG9SZW1vdmUgPSBu
b2RlLT5jaGlsZE5vZGUoZnJvbSk7CisgICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gbm9kZS0+Y2hp
bGROb2RlKGZyb20pOwogICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87IGkrKykgewogICAg
ICAgICBBU1NFUlQobm9kZVRvUmVtb3ZlKTsKLSAgICAgICAgTm9kZSAqbmV4dCA9IG5vZGVUb1Jl
bW92ZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgTm9kZSogbmV4dCA9IG5vZGVUb1JlbW92ZS0+
bmV4dFNpYmxpbmcoKTsKICAgICAgICAgcmVtb3ZlTm9kZShub2RlVG9SZW1vdmUpOwogICAgICAg
ICBub2RlVG9SZW1vdmUgPSBuZXh0OwogICAgIH0KIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmVtb3ZlTm9kZShOb2RlICpyZW1vdmVDaGlsZCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlbW92ZU5vZGUoTm9kZSogcmVtb3ZlQ2hpbGQpCiB7Ci0gICAgRWRpdENvbW1hbmRQ
dHIgY21kKG5ldyBSZW1vdmVOb2RlQ29tbWFuZChkb2N1bWVudCgpLCByZW1vdmVDaGlsZCkpOwot
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUobmV3IFJlbW92ZU5vZGVDb21tYW5kKHJlbW92ZUNoaWxkKSk7CiB9CiAKLXZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSAqcmVt
b3ZlQ2hpbGQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKE5vZGUqIHJlbW92ZUNoaWxkKQogewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChu
ZXcgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQoZG9jdW1lbnQoKSwgcmVtb3Zl
Q2hpbGQpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKG5ldyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChy
ZW1vdmVDaGlsZCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2Rl
QW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSogbm9kZSkKQEAgLTI0NCw3MSArMjE4LDYwIEBAIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5lKFBhc3NSZWYKIAogdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZShUZXh0ICp0ZXh0LCBpbnQgb2Zmc2V0KQogewotICAgIEVk
aXRDb21tYW5kUHRyIGNtZChuZXcgU3BsaXRUZXh0Tm9kZUNvbW1hbmQoZG9jdW1lbnQoKSwgdGV4
dCwgb2Zmc2V0KSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgU3BsaXRUZXh0Tm9kZUNvbW1hbmQodGV4dCwgb2Zmc2V0
KSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0RWxlbWVudChFbGVtZW50
ICplbGVtZW50LCBOb2RlICphdENoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3Bs
aXRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIE5vZGUqIGF0Q2hpbGQpCiB7Ci0gICAgRWRpdENv
bW1hbmRQdHIgY21kKG5ldyBTcGxpdEVsZW1lbnRDb21tYW5kKGRvY3VtZW50KCksIGVsZW1lbnQs
IGF0Q2hpbGQpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBTcGxpdEVsZW1lbnRDb21tYW5kKGVsZW1lbnQsIGF0Q2hp
bGQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bWVyZ2VJZGVudGljYWxFbGVt
ZW50cyhFbGVtZW50ICpmaXJzdCwgRWxlbWVudCAqc2Vjb25kKQordm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bWVyZ2VJZGVudGljYWxFbGVtZW50cyhFbGVtZW50KiBmaXJzdCwgRWxlbWVudCog
c2Vjb25kKQogewogICAgIEFTU0VSVCghZmlyc3QtPmlzQW5jZXN0b3Ioc2Vjb25kKSAmJiBzZWNv
bmQgIT0gZmlyc3QpOwogICAgIGlmIChmaXJzdC0+bmV4dFNpYmxpbmcoKSAhPSBzZWNvbmQpIHsK
ICAgICAgICAgcmVtb3ZlTm9kZShzZWNvbmQpOwogICAgICAgICBpbnNlcnROb2RlQWZ0ZXIoc2Vj
b25kLCBmaXJzdCk7CiAgICAgfQotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQoZG9jdW1lbnQoKSwgZmlyc3QsIHNlY29uZCkpOwotICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
bmV3IE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKGZpcnN0LCBzZWNvbmQpKTsKIH0KIAot
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6d3JhcENvbnRlbnRzSW5EdW1teVNwYW4oRWxlbWVu
dCAqZWxlbWVudCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OndyYXBDb250ZW50c0luRHVt
bXlTcGFuKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBX
cmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQoZG9jdW1lbnQoKSwgZWxlbWVudCkpOwotICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUobmV3IFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZChlbGVtZW50KSk7CiB9CiAKIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChU
ZXh0ICp0ZXh0LCBpbnQgb2Zmc2V0KQogewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgU3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChkb2N1bWVudCgpLCB0ZXh0LCBvZmZz
ZXQpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFu
ZFRvQ29tcG9zaXRlKG5ldyBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKHRl
eHQsIG9mZnNldCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpqb2luVGV4dE5v
ZGVzKFRleHQgKnRleHQxLCBUZXh0ICp0ZXh0MikKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQo
bmV3IEpvaW5UZXh0Tm9kZXNDb21tYW5kKGRvY3VtZW50KCksIHRleHQxLCB0ZXh0MikpOwotICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUobmV3IEpvaW5UZXh0Tm9kZXNDb21tYW5kKHRleHQxLCB0ZXh0MikpOwogfQogCiB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNl
bGVjdEluc2VydGVkVGV4dCkKIHsKLSAgICBJbnNlcnRUZXh0Q29tbWFuZCAqaW1wbCA9IG5ldyBJ
bnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCgpKTsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQoaW1w
bCk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKLSAgICBpbXBsLT5pbnB1dCh0
ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOworICAgIFJlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4g
Y29tbWFuZCA9IG5ldyBJbnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCgpKTsKKyAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShjb21tYW5kKTsKKyAgICBjb21tYW5kLT5pbnB1dCh0ZXh0LCBzZWxl
Y3RJbnNlcnRlZFRleHQpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRU
ZXh0SW50b05vZGUoVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3RyaW5nICZ0ZXh0KQog
ewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChk
b2N1bWVudCgpLCBub2RlLCBvZmZzZXQsIHRleHQpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBJbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kKG5vZGUsIG9mZnNldCwgdGV4dCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgaW50
IGNvdW50KQogewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZChkb2N1bWVudCgpLCBub2RlLCBvZmZzZXQsIGNvdW50KSk7Ci0gICAgYXBwbHlDb21t
YW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgRGVs
ZXRlRnJvbVRleHROb2RlQ29tbWFuZChub2RlLCBvZmZzZXQsIGNvdW50KSk7CiB9CiAKIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlKFRleHQgKm5vZGUsIGludCBv
ZmZzZXQsIGludCBjb3VudCwgY29uc3QgU3RyaW5nICZyZXBsYWNlbWVudFRleHQpCiB7Ci0gICAg
RWRpdENvbW1hbmRQdHIgZGVsZXRlQ29tbWFuZChuZXcgRGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZChkb2N1bWVudCgpLCBub2RlLCBvZmZzZXQsIGNvdW50KSk7Ci0gICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoZGVsZXRlQ29tbWFuZCk7Ci0gICAgRWRpdENvbW1hbmRQdHIgaW5zZXJ0Q29tbWFu
ZChuZXcgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChkb2N1bWVudCgpLCBub2RlLCBvZmZzZXQs
IHJlcGxhY2VtZW50VGV4dCkpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGluc2VydENv
bW1hbmQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBEZWxldGVGcm9tVGV4dE5v
ZGVDb21tYW5kKG5vZGUsIG9mZnNldCwgY291bnQpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShuZXcgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChub2RlLCBvZmZzZXQsIHJlcGxhY2Vt
ZW50VGV4dCkpOwogfQogCiBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25P
dXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9zKQpAQCAtMzE2LDcgKzI3OSw3IEBAIFBv
c2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk8KICAgICBpZiAoIWlzVGFiU3Bh
blRleHROb2RlKHBvcy5ub2RlKCkpKQogICAgICAgICByZXR1cm4gcG9zOwogICAgIAotICAgIE5v
ZGUgKnRhYlNwYW4gPSB0YWJTcGFuTm9kZShwb3Mubm9kZSgpKTsKKyAgICBOb2RlKiB0YWJTcGFu
ID0gdGFiU3Bhbk5vZGUocG9zLm5vZGUoKSk7CiAgICAgCiAgICAgaWYgKHBvcy5vZmZzZXQoKSA8
PSBwb3Mubm9kZSgpLT5jYXJldE1pbk9mZnNldCgpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25C
ZWZvcmVOb2RlKHRhYlNwYW4pOwpAQCAtMzI4LDcgKzI5MSw3IEBAIFBvc2l0aW9uIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk8KICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKHRh
YlNwYW4pOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXRUYWJT
cGFuUG9zaXRpb24oTm9kZSAqbm9kZSwgY29uc3QgUG9zaXRpb24mIHBvcykKK3ZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbihOb2RlKiBub2RlLCBj
b25zdCBQb3NpdGlvbiYgcG9zKQogewogICAgIC8vIGluc2VydCBub2RlIGJlZm9yZSwgYWZ0ZXIs
IG9yIGF0IHNwbGl0IG9mIHRhYiBzcGFuCiAgICAgUG9zaXRpb24gaW5zZXJ0UG9zID0gcG9zaXRp
b25PdXRzaWRlVGFiU3Bhbihwb3MpOwpAQCAtMzM3LDM5ICszMDAsMzEgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0VAogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpkZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFydERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVy
RGVsZXRlLCBib29sIHJlcGxhY2UpCiB7Ci0gICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzUmFu
Z2UoKSkgewotICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQoZG9jdW1lbnQoKSwgc21hcnREZWxldGUsIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIHJl
cGxhY2UpKTsKLSAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKLSAgICB9Cisg
ICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzUmFuZ2UoKSkKKyAgICAgICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUobmV3IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQoKSwgc21hcnRE
ZWxldGUsIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIHJlcGxhY2UpKTsKIH0KIAogdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmc2VsZWN0
aW9uLCBib29sIHNtYXJ0RGVsZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wg
cmVwbGFjZSkKIHsKLSAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBFZGl0
Q29tbWFuZFB0ciBjbWQobmV3IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQoKSwgc2Vs
ZWN0aW9uLCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFjZSkpOwot
ICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwotICAgIH0KKyAgICBpZiAoc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQoc2VsZWN0aW9uLCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NB
ZnRlckRlbGV0ZSwgcmVwbGFjZSkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpy
ZW1vdmVDU1NQcm9wZXJ0eShDU1NTdHlsZURlY2xhcmF0aW9uICpkZWNsLCBpbnQgcHJvcGVydHkp
CiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQo
ZG9jdW1lbnQoKSwgZGVjbCwgcHJvcGVydHkpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBSZW1vdmVDU1NQcm9wZXJ0
eUNvbW1hbmQoZG9jdW1lbnQoKSwgZGVjbCwgcHJvcGVydHkpKTsKIH0KIAotdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJpYnV0ZShFbGVtZW50ICplbGVtZW50LCBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpy
ZW1vdmVOb2RlQXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZSkKIHsKLSAgICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
YXR0cmlidXRlKTsKLSAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgIGlmIChlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEVk
aXRDb21tYW5kUHRyIGNtZChuZXcgUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQoZG9jdW1lbnQo
KSwgZWxlbWVudCwgYXR0cmlidXRlKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21k
KTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgUmVtb3ZlTm9kZUF0dHJpYnV0ZUNv
bW1hbmQoZWxlbWVudCwgYXR0cmlidXRlKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnNldE5vZGVBdHRyaWJ1dGUoRWxlbWVudCAqZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0cmlidXRlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6c2V0Tm9kZUF0dHJpYnV0ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7Ci0gICAgRWRpdENvbW1hbmRQ
dHIgY21kKG5ldyBTZXROb2RlQXR0cmlidXRlQ29tbWFuZChkb2N1bWVudCgpLCBlbGVtZW50LCBh
dHRyaWJ1dGUsIHZhbHVlKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQoZWxl
bWVudCwgYXR0cmlidXRlLCB2YWx1ZSkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZWJhbGFuY2VXaGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMzgy
LDggKzMzNyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXQKICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGV4dE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYg
KHJlbmRlcmVyICYmICFyZW5kZXJlci0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFJlYmFsYW5jZVdoaXRl
c3BhY2VDb21tYW5kKGRvY3VtZW50KCksIHBvc2l0aW9uKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoY21kKTsgICAgCisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFJlYmFs
YW5jZVdoaXRlc3BhY2VDb21tYW5kKHBvc2l0aW9uKSk7ICAgIAogfQogCiB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlKCkKQEAgLTM5NiwxMyArMzUwLDEzIEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXQKICAgICB9CiB9CiAKLXZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQgKnRl
eHROb2RlLCBpbnQgc3RhcnQsIGludCBlbmQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpk
ZWxldGVJbnNpZ25pZmljYW50VGV4dChUZXh0KiB0ZXh0Tm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5k
KQogewogICAgIGlmICghdGV4dE5vZGUgfHwgIXRleHROb2RlLT5yZW5kZXJlcigpIHx8IHN0YXJ0
ID49IGVuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyVGV4dCAqdGV4dFJlbmRlcmVy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPih0ZXh0Tm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAg
SW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsKKyAgICBS
ZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4odGV4dE5v
ZGUtPnJlbmRlcmVyKCkpOworICAgIElubGluZVRleHRCb3gqIGJveCA9IHRleHRSZW5kZXJlci0+
Zmlyc3RUZXh0Qm94KCk7CiAgICAgaWYgKCFib3gpIHsKICAgICAgICAgLy8gd2hvbGUgdGV4dCBu
b2RlIGlzIGVtcHR5CiAgICAgICAgIHJlbW92ZU5vZGUodGV4dE5vZGUpOwpAQCAtNDE0LDcgKzM2
OCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaW50IHJlbW92ZWQgPSAwOwotICAgIElubGluZVRleHRCb3ggKnByZXZC
b3ggPSAwOworICAgIElubGluZVRleHRCb3gqIHByZXZCb3ggPSAwOwogICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBzdHI7CiAKICAgICAvLyBUaGlzIGxvb3Agc3RydWN0dXJlIHdvcmtzIHRvIHByb2Nl
c3MgYWxsIGdhcHMgcHJlY2VkaW5nIGEgYm94LApAQCAtNDU3LDcgKzQxMSw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KGNvbnN0IFBvc2l0aW9uICZz
dGFydCwgY29uc3QgUG9zaXRpb24gJmVuZCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRl
bGV0ZUluc2lnbmlmaWNhbnRUZXh0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKIHsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47CkBAIC00NjUsMzUgKzQxOSwzMCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpkZWxldGVJbnNpZ25pCiAgICAgaWYgKFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMo
c3RhcnQsIGVuZCkgPj0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSAqbm9kZSA9IHN0
YXJ0Lm5vZGUoKTsKLSAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBOb2RlICpuZXh0ID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwotICAgIAorICAgIE5vZGUqIG5leHQ7CisgICAgZm9yIChO
b2RlKiBub2RlID0gc3RhcnQubm9kZSgpOyBub2RlOyBub2RlID0gbmV4dCkgeworICAgICAgICBu
ZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICBpZiAobm9kZS0+aXNUZXh0
Tm9kZSgpKSB7Ci0gICAgICAgICAgICBUZXh0ICp0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQg
Kj4obm9kZSk7Ci0gICAgICAgICAgICBib29sIGlzU3RhcnROb2RlID0gbm9kZSA9PSBzdGFydC5u
b2RlKCk7Ci0gICAgICAgICAgICBib29sIGlzRW5kTm9kZSA9IG5vZGUgPT0gZW5kLm5vZGUoKTsK
LSAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IGlzU3RhcnROb2RlID8gc3RhcnQub2Zmc2V0
KCkgOiAwOwotICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IGlzRW5kTm9kZSA/IGVuZC5vZmZz
ZXQoKSA6IHRleHROb2RlLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0g
c3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOworICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0g
bm9kZSA9PSBzdGFydC5ub2RlKCkgPyBzdGFydC5vZmZzZXQoKSA6IDA7CisgICAgICAgICAgICBp
bnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmQubm9kZSgpID8gZW5kLm9mZnNldCgpIDogdGV4dE5v
ZGUtPmxlbmd0aCgpOwogICAgICAgICAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHQodGV4dE5v
ZGUsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKICAg
ICAgICAgaWYgKG5vZGUgPT0gZW5kLm5vZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBub2RlID0gbmV4dDsKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRl
bGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShjb25zdCBQb3NpdGlvbiAmcG9zKQordm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFt
KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0
aW9uKHBvcywgVlBfREVGQVVMVF9BRkZJTklUWSkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkuZG93
bnN0cmVhbSgpOwogICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHBvcywgZW5kKTsKIH0KIAot
Tm9kZSAqQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoTm9kZSAq
bm9kZSkKK05vZGUqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmRCbG9ja1BsYWNlaG9sZGVy
KE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgLy8gU2hvdWxkIGFzc2VydCBpc0Jsb2NrRmxvdyB8
fCBpc0lubGluZUZsb3cgd2hlbiBkZWxldGlvbiBpbXByb3Zlcy4gIFNlZSA0MjQ0OTY0LgogICAg
IEFTU0VSVChub2RlLT5yZW5kZXJlcigpKTsKQEAgLTUwMywxMCArNDUyLDEwIEBAIE5vZGUgKkNv
bXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmRCbG9ja1AKICAgICByZXR1cm4gcGxhY2Vob2xkZXIu
Z2V0KCk7CiB9CiAKLU5vZGUgKkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRCbG9ja1BsYWNl
aG9sZGVyKGNvbnN0IFBvc2l0aW9uICZwb3MpCitOb2RlKiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
aW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihjb25zdCBQb3NpdGlvbiYgcG9zKQogewogICAgIGlmIChw
b3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsKIAog
ICAgIC8vIFNob3VsZCBhc3NlcnQgaXNCbG9ja0Zsb3cgfHwgaXNJbmxpbmVGbG93IHdoZW4gZGVs
ZXRpb24gaW1wcm92ZXMuICBTZWUgNDI0NDk2NC4KICAgICBBU1NFUlQocG9zLm5vZGUoKS0+cmVu
ZGVyZXIoKSk7CkBAIC01MTYsMjMgKzQ2NSwyMyBAQCBOb2RlICpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6aW5zZXJ0QmxvY2tQCiAgICAgcmV0dXJuIHBsYWNlaG9sZGVyLmdldCgpOwogfQogCi1Ob2Rl
ICpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKE5vZGUg
Km5vZGUpCitOb2RlKiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklm
TmVlZGVkKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgdXBkYXRlTGF5b3V0KCk7CiAKICAgICBSZW5k
ZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
IHx8ICFyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gMDsKICAgICAKICAgICAvLyBhcHBlbmQgdGhlIHBsYWNlaG9sZGVyIHRvIG1h
a2Ugc3VyZSBpdCBmb2xsb3dzCiAgICAgLy8gYW55IHVucmVuZGVyZWQgYmxvY2tzCiAgICAgaWYg
KHJlbmRlcmVyLT5oZWlnaHQoKSA9PSAwIHx8IChyZW5kZXJlci0+aXNMaXN0SXRlbSgpICYmIHJl
bmRlcmVyLT5pc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gYXBwZW5kQmxvY2tQbGFjZWhvbGRl
cihub2RlKTsKIAotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVCbG9ja1BsYWNlaG9sZGVyKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQpAQCAtNTQzLDExICs0OTIsOSBAQCB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVCbG9ja1BsCiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKICAgICBpZiAocC5ub2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpICYmIHAub2Zmc2V0KCkgPT0gMCAmJiBpc0VuZE9mQmxvY2sodmlz
aWJsZVBvc2l0aW9uKSAmJiBpc1N0YXJ0T2ZCbG9jayh2aXNpYmxlUG9zaXRpb24pKQogICAgICAg
ICByZW1vdmVOb2RlKHAubm9kZSgpKTsKLSAgICAgICAgCi0gICAgcmV0dXJuOwogfQogCi12b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZO
ZWNlc3NhcnkoY29uc3QgUG9zaXRpb24gJnBvcykKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Om1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeShjb25zdCBQb3NpdGlv
biYgcG9zKQogewogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU5
MSwxMCArNTM4LDEwIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgK
IAogICAgIFJlZlB0cjxOb2RlPiBuZXdCbG9jayA9IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50KGRvY3VtZW50KCkpOwogCi0gICAgTm9kZSAqbW92ZU5vZGUgPSBwYXJhZ3JhcGhTdGFydC5u
b2RlKCk7CisgICAgTm9kZSogbW92ZU5vZGUgPSBwYXJhZ3JhcGhTdGFydC5ub2RlKCk7CiAgICAg
aWYgKHBhcmFncmFwaFN0YXJ0Lm9mZnNldCgpID49IHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+Y2Fy
ZXRNYXhPZmZzZXQoKSkKICAgICAgICAgbW92ZU5vZGUgPSBtb3ZlTm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwotICAgIE5vZGUgKmVuZE5vZGUgPSBlbmQubm9kZSgpOworICAgIE5vZGUqIGVuZE5v
ZGUgPSBlbmQubm9kZSgpOwogICAgIAogICAgIGlmICghaXNBdG9taWNOb2RlKHBhcmFncmFwaFN0
YXJ0Lm5vZGUoKSkpCiAgICAgICAgIGluc2VydE5vZGVBdChuZXdCbG9jay5nZXQoKSwgcGFyYWdy
YXBoU3RhcnQubm9kZSgpLCBwYXJhZ3JhcGhTdGFydC5vZmZzZXQoKSk7CkBAIC02MDUsNyArNTUy
LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIH0KIAog
ICAgIHdoaWxlIChtb3ZlTm9kZSAmJiAhaXNCbG9jayhtb3ZlTm9kZSkpIHsKLSAgICAgICAgTm9k
ZSAqbmV4dCA9IG1vdmVOb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIE5vZGUq
IG5leHQgPSBtb3ZlTm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogICAgICAgICByZW1vdmVO
b2RlKG1vdmVOb2RlKTsKICAgICAgICAgYXBwZW5kTm9kZShtb3ZlTm9kZSwgbmV3QmxvY2suZ2V0
KCkpOwogICAgICAgICBpZiAobW92ZU5vZGUgPT0gZW5kTm9kZSkKQEAgLTYxOCw3ICs1NjUsNiBA
QCBOb2RlKiBlbmNsb3NpbmdBbmNob3JFbGVtZW50KE5vZGUqIG5vZGUpCiB7CiAgICAgd2hpbGUg
KG5vZGUgJiYgIShub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZS0+aXNMaW5rKCkpKQogICAg
ICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIAogICAgIHJldHVybiBub2RlOwog
fQogCkBAIC03MzcsOCArNjgzLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBh
cmFncmFwaAogICAgIGRlc3RpbmF0aW9uSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdlLmdldCgpKTsKICAgICAKICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oZGVzdGluYXRpb24pOwotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQoKSwgZnJhZ21lbnQuZ2V0KCksIHRydWUsIGZhbHNlLCAh
cHJlc2VydmVTdHlsZSwgdHJ1ZSkpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7
CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
KGZyYWdtZW50LnJlbGVhc2UoKSwgdHJ1ZSwgZmFsc2UsICFwcmVzZXJ2ZVN0eWxlLCB0cnVlKSk7
CiAgICAgCiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsK
ICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCksIGRlc3RpbmF0aW9uSW5kZXggKyBzdGFy
dEluZGV4LCAwKS0+c3RhcnRQb3NpdGlvbigpLCAKQEAgLTc1NiwxMiArNzAxLDEyIEBAIGJvb2wg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICAgICAgCiAgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IHN0eWxlQXRQb3NpdGlvbihlbmRp
bmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKIAotICAgIE5vZGUgKmxpc3ROb2RlID0gZW1wdHlMaXN0
SXRlbS0+cGFyZW50Tm9kZSgpOworICAgIE5vZGUqIGxpc3ROb2RlID0gZW1wdHlMaXN0SXRlbS0+
cGFyZW50Tm9kZSgpOwogICAgIFJlZlB0cjxOb2RlPiBuZXdCbG9jayA9IGlzTGlzdEVsZW1lbnQo
bGlzdE5vZGUtPnBhcmVudE5vZGUoKSkgPyBjcmVhdGVMaXN0SXRlbUVsZW1lbnQoZG9jdW1lbnQo
KSkgOiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAKICAg
ICBpZiAoZW1wdHlMaXN0SXRlbS0+cmVuZGVyZXIoKS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBpZiAoZW1wdHlMaXN0SXRlbS0+cmVuZGVyZXIoKS0+cHJldmlvdXNTaWJsaW5nKCkpCi0gICAg
ICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihsaXN0Tm9kZSksIGVt
cHR5TGlzdEl0ZW0pOworICAgICAgICAgICAgc3BsaXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPihsaXN0Tm9kZSksIGVtcHR5TGlzdEl0ZW0pOwogICAgICAgICBpbnNlcnROb2RlQmVmb3Jl
KG5ld0Jsb2NrLmdldCgpLCBsaXN0Tm9kZSk7CiAgICAgICAgIHJlbW92ZU5vZGUoZW1wdHlMaXN0
SXRlbSk7CiAgICAgfSBlbHNlIHsKQEAgLTc3MCw3ICs3MTUsNyBAQCBib29sIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpicmVha091dE9mRW1wCiAgICAgfQogICAgIAogICAgIGFwcGVuZEJsb2NrUGxh
Y2Vob2xkZXIobmV3QmxvY2suZ2V0KCkpOwotICAgIHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlv
bihuZXdCbG9jay5nZXQoKSwgMCksIERPV05TVFJFQU0pOworICAgIHNldEVuZGluZ1NlbGVjdGlv
bihTZWxlY3Rpb24oUG9zaXRpb24obmV3QmxvY2suZ2V0KCksIDApLCBET1dOU1RSRUFNKSk7CiAg
ICAgCiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIGVuZGluZ1N0eWxlKGVuZGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpKTsKICAgICBlbmRpbmdTdHlsZS5kaWZmKHN0eWxlLmdl
dCgpKTsKQEAgLTc4NSwxNCArNzMwLDkgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVCbG9j
a1BsYWNlaG9sZAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxFbGVtZW50
PiBicmVha05vZGUgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJ
LCAiYnIiLCBlYyk7CiAgICAgQVNTRVJUKGVjID09IDApOwotICAgIGJyZWFrTm9kZS0+c2V0QXR0
cmlidXRlKGNsYXNzQXR0ciwgYmxvY2tQbGFjZWhvbGRlckNsYXNzU3RyaW5nKCkpOworICAgIHN0
YXRpYyBTdHJpbmcgY2xhc3NTdHJpbmcgPSAid2Via2l0LWJsb2NrLXBsYWNlaG9sZGVyIjsKKyAg
ICBicmVha05vZGUtPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsIGNsYXNzU3RyaW5nKTsKICAgICBy
ZXR1cm4gYnJlYWtOb2RlLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIGNvbnN0IFN0cmluZyAmYmxv
Y2tQbGFjZWhvbGRlckNsYXNzU3RyaW5nKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIGJsb2NrUGxh
Y2Vob2xkZXJDbGFzc1N0cmluZyA9ICJ3ZWJraXQtYmxvY2stcGxhY2Vob2xkZXIiOwotICAgIHJl
dHVybiBibG9ja1BsYWNlaG9sZGVyQ2xhc3NTdHJpbmc7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDE1ODA3KQorKysgZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjcsNzUgKzI3LDY3IEBACiAjZGVmaW5lIGNvbXBvc2l0ZV9lZGl0X2NvbW1hbmRf
aF9fCiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1
ZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNzIFN0cmluZzsKLSAgICBj
bGFzcyBUZXh0OwotICAgIGNsYXNzIFF1YWxpZmllZE5hbWU7Ci19CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBUZXh0OwogCi1jbGFzcyBD
b21wb3NpdGVFZGl0Q29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgQ29tcG9z
aXRlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIENvbXBv
c2l0ZUVkaXRDb21tYW5kKERvY3VtZW50ICopOwotCi0gICAgdmlydHVhbCB2b2lkIGRvVW5hcHBs
eSgpOwotICAgIHZpcnR1YWwgdm9pZCBkb1JlYXBwbHkoKTsKKyAgICBDb21wb3NpdGVFZGl0Q29t
bWFuZChEb2N1bWVudCopOwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8KICAgICAvLyBzdWdhcnktc3dl
ZXQgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhlbHAgY3JlYXRlIGFuZCBhcHBseSBlZGl0IGNv
bW1hbmRzIGluIGNvbXBvc2l0ZSBjb21tYW5kcwogICAgIC8vCi0gICAgdm9pZCBhcHBlbmROb2Rl
KE5vZGUgKmFwcGVuZENoaWxkLCBOb2RlICpwYXJlbnROb2RlKTsKLSAgICB2b2lkIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKEVkaXRDb21tYW5kUHRyICYpOwotICAgIHZvaWQgYXBwbHlTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uPUVkaXRB
Y3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqc3R5bGUsIFBvc2l0aW9uIHN0YXJ0LCBQb3NpdGlvbiBlbmQsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbj1FZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CisgICAgdm9pZCBhcHBl
bmROb2RlKE5vZGUqIGFwcGVuZENoaWxkLCBOb2RlKiBwYXJlbnROb2RlKTsKKyAgICB2b2lkIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKKyAgICB2b2lk
IGFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9u
Q2hhbmdlQXR0cmlidXRlcyk7CisgICAgdm9pZCBhcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKTsKICAgICB2b2lk
IGFwcGx5U3R5bGVkRWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCByZW1vdmVTdHlsZWRFbGVt
ZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIGRlbGV0ZUtleVByZXNzZWQoKTsKLSAgICB2b2lkIGRl
bGV0ZVNlbGVjdGlvbihib29sIHNtYXJ0RGVsZXRlPWZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0
ZXJEZWxldGU9dHJ1ZSwgYm9vbCByZXBsYWNlPWZhbHNlKTsKLSAgICB2b2lkIGRlbGV0ZVNlbGVj
dGlvbihjb25zdCBTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm9vbCBzbWFydERlbGV0ZT1mYWxzZSwg
Ym9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlPXRydWUsIGJvb2wgcmVwbGFjZT1mYWxzZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShUZXh0ICpub2RlLCBpbnQgb2Zmc2V0
LCBpbnQgY291bnQpOwotICAgIHZvaWQgaW5wdXRUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9v
bCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSk7Ci0gICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXIo
Tm9kZSAqaW5zZXJ0Q2hpbGQsIE5vZGUgKnJlZkNoaWxkKTsKLSAgICB2b2lkIGluc2VydE5vZGVB
dChOb2RlICppbnNlcnRDaGlsZCwgTm9kZSAqcmVmQ2hpbGQsIGludCBvZmZzZXQpOwotICAgIHZv
aWQgaW5zZXJ0Tm9kZUJlZm9yZShOb2RlICppbnNlcnRDaGlsZCwgTm9kZSAqcmVmQ2hpbGQpOwor
ICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9vbCBt
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UpOworICAg
IHZvaWQgZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYsIGJvb2wgc21hcnREZWxldGUg
PSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNl
ID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCogbm9k
ZSwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKKyAgICB2b2lkIGlucHV0VGV4dChjb25zdCBTdHJp
bmcmLCBib29sIHNlbGVjdEluc2VydGVkVGV4dCA9IGZhbHNlKTsKKyAgICB2b2lkIGluc2VydE5v
ZGVBZnRlcihOb2RlKiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hpbGQpOworICAgIHZvaWQgaW5z
ZXJ0Tm9kZUF0KE5vZGUqIGluc2VydENoaWxkLCBOb2RlKiByZWZDaGlsZCwgaW50IG9mZnNldCk7
CisgICAgdm9pZCBpbnNlcnROb2RlQmVmb3JlKE5vZGUqIGluc2VydENoaWxkLCBOb2RlKiByZWZD
aGlsZCk7CiAgICAgdm9pZCBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKLSAgICB2b2lkIGlu
c2VydFRleHRJbnRvTm9kZShUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBjb25zdCBTdHJpbmcgJnRl
eHQpOwotICAgIHZvaWQgam9pblRleHROb2RlcyhUZXh0ICp0ZXh0MSwgVGV4dCAqdGV4dDIpOwor
ICAgIHZvaWQgaW5zZXJ0VGV4dEludG9Ob2RlKFRleHQqIG5vZGUsIGludCBvZmZzZXQsIGNvbnN0
IFN0cmluZyYgdGV4dCk7CisgICAgdm9pZCBqb2luVGV4dE5vZGVzKFRleHQqLCBUZXh0Kik7CiAg
ICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlKCk7Ci0gICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNw
YWNlQXQoY29uc3QgUG9zaXRpb24gJnBvc2l0aW9uKTsKLSAgICB2b2lkIHJlbW92ZUNTU1Byb3Bl
cnR5KENTU1N0eWxlRGVjbGFyYXRpb24gKiwgaW50IHByb3BlcnR5KTsKLSAgICB2b2lkIHJlbW92
ZU5vZGVBdHRyaWJ1dGUoRWxlbWVudCAqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUp
OwotICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKE5vZGUgKm5vZGUsIGludCBmcm9tLCBp
bnQgdG8pOworICAgIHZvaWQgcmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uJik7
CisgICAgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eShDU1NTdHlsZURlY2xhcmF0aW9uKiwgaW50IHBy
b3BlcnR5KTsKKyAgICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUoRWxlbWVudCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSk7CisgICAgdm9pZCByZW1vdmVDaGlsZHJlbkluUmFuZ2Uo
Tm9kZSosIGludCBmcm9tLCBpbnQgdG8pOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2RlKE5v
ZGUqKTsKICAgICB2b2lkIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSopOwotICAg
IHZvaWQgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKE5vZGUqIG5vZGUpOwotICAgIHZvaWQg
cHJ1bmUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKTsKLSAgICB2b2lkIHJlcGxhY2VUZXh0SW5Ob2Rl
KFRleHQgKm5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCwgY29uc3QgU3RyaW5nICZyZXBsYWNl
bWVudFRleHQpOwotICAgIFBvc2l0aW9uIHBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9z
aXRpb24mIHBvcyk7Ci0gICAgdm9pZCBpbnNlcnROb2RlQXRUYWJTcGFuUG9zaXRpb24oTm9kZSAq
bm9kZSwgY29uc3QgUG9zaXRpb24mIHBvcyk7Ci0gICAgdm9pZCBzZXROb2RlQXR0cmlidXRlKEVs
ZW1lbnQgKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBTdHJpbmcgJik7
Ci0gICAgdm9pZCBzcGxpdFRleHROb2RlKFRleHQgKnRleHQsIGludCBvZmZzZXQpOwotICAgIHZv
aWQgc3BsaXRFbGVtZW50KEVsZW1lbnQgKmVsZW1lbnQsIE5vZGUgKmF0Q2hpbGQpOwotICAgIHZv
aWQgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhFbGVtZW50ICpmaXJzdCwgRWxlbWVudCAqc2Vjb25k
KTsKLSAgICB2b2lkIHdyYXBDb250ZW50c0luRHVtbXlTcGFuKEVsZW1lbnQgKmVsZW1lbnQpOwot
ICAgIHZvaWQgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KFRleHQgKnRleHQsIGludCBv
ZmZzZXQpOwotCi0gICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dChUZXh0ICosIGludCBz
dGFydCwgaW50IGVuZCk7Ci0gICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dChjb25zdCBQ
b3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpOwotICAgIHZvaWQgZGVsZXRlSW5z
aWduaWZpY2FudFRleHREb3duc3RyZWFtKGNvbnN0IFBvc2l0aW9uICYpOworICAgIHZvaWQgcmVt
b3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKE5vZGUqKTsKKyAgICB2b2lkIHBydW5lKFBhc3NSZWZQ
dHI8Tm9kZT4pOworICAgIHZvaWQgcmVwbGFjZVRleHRJbk5vZGUoVGV4dCogbm9kZSwgaW50IG9m
ZnNldCwgaW50IGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CisgICAgUG9z
aXRpb24gcG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYpOworICAgIHZvaWQg
aW5zZXJ0Tm9kZUF0VGFiU3BhblBvc2l0aW9uKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYpOworICAg
IHZvaWQgc2V0Tm9kZUF0dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHNwbGl0VGV4dE5vZGUoVGV4
dCosIGludCBvZmZzZXQpOworICAgIHZvaWQgc3BsaXRFbGVtZW50KEVsZW1lbnQqLCBOb2RlKiBh
dENoaWxkKTsKKyAgICB2b2lkIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoRWxlbWVudCosIEVsZW1l
bnQqKTsKKyAgICB2b2lkIHdyYXBDb250ZW50c0luRHVtbXlTcGFuKEVsZW1lbnQqKTsKKyAgICB2
b2lkIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChUZXh0KiwgaW50IG9mZnNldCk7CisK
KyAgICB2b2lkIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQqLCBpbnQgc3RhcnQsIGludCBl
bmQpOworICAgIHZvaWQgZGVsZXRlSW5zaWduaWZpY2FudFRleHQoY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKKyAgICB2b2lkIGRlbGV0ZUluc2lnbmlmaWNhbnRU
ZXh0RG93bnN0cmVhbShjb25zdCBQb3NpdGlvbiYpOwogCiAgICAgTm9kZSAqYXBwZW5kQmxvY2tQ
bGFjZWhvbGRlcihOb2RlKik7Ci0gICAgTm9kZSAqaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihjb25z
dCBQb3NpdGlvbiAmcG9zKTsKKyAgICBOb2RlICppbnNlcnRCbG9ja1BsYWNlaG9sZGVyKGNvbnN0
IFBvc2l0aW9uJik7CiAgICAgTm9kZSAqYWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKE5vZGUq
KTsKICAgICB2b2lkIHJlbW92ZUJsb2NrUGxhY2Vob2xkZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CiAKLSAgICB2b2lkIG1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2Fy
eShjb25zdCBQb3NpdGlvbiAmKTsKKyAgICB2b2lkIG1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3
QmxvY2tJZk5lY2Vzc2FyeShjb25zdCBQb3NpdGlvbiYpOwogICAgIAogICAgIHZvaWQgcHVzaEFu
Y2hvckVsZW1lbnREb3duKE5vZGUqKTsKICAgICB2b2lkIHB1c2hQYXJ0aWFsbHlTZWxlY3RlZEFu
Y2hvckVsZW1lbnRzRG93bigpOwpAQCAtMTA1LDkgKzk3LDEzIEBAIHByb3RlY3RlZDoKICAgICAK
ICAgICBib29sIGJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCk7CiAKLSAgICBEZXByZWNhdGVkVmFs
dWVMaXN0PEVkaXRDb21tYW5kUHRyPiBtX2NtZHM7CisgICAgVmVjdG9yPFJlZlB0cjxFZGl0Q29t
bWFuZD4gPiBtX2NvbW1hbmRzOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBw
bHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmRfaF9fCisjZW5k
aWYgLy8gY29tcG9zaXRlX2VkaXRfY29tbWFuZF9oX18KSW5kZXg6IGVkaXRpbmcvRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9EZWxldGVGcm9tVGV4
dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0RlbGV0ZUZyb21U
ZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6RGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIFRleHQgKm5vZGUsIGludCBvZmZz
ZXQsIGludCBjb3VudCkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9ub2RlKG5vZGUp
LCBtX29mZnNldChvZmZzZXQpLCBtX2NvdW50KGNvdW50KQorRGVsZXRlRnJvbVRleHROb2RlQ29t
bWFuZDo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZChUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBp
bnQgY291bnQpCisgICAgOiBFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKSwgbV9ub2RlKG5v
ZGUpLCBtX29mZnNldChvZmZzZXQpLCBtX2NvdW50KGNvdW50KQogewogICAgIEFTU0VSVChtX25v
ZGUpOwogICAgIEFTU0VSVChtX29mZnNldCA+PSAwKTsKSW5kZXg6IGVkaXRpbmcvRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5oCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjEg
KzI5LDE3IEBACiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIGNsYXNzIFRleHQ7Ci19CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHQ7
CiAKLWNsYXNzIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQK
LXsKK2NsYXNzIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQg
ewogcHVibGljOgotICAgIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoRG9jdW1lbnQgKmRvY3Vt
ZW50LCBUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpOwotICAgIHZpcnR1YWwgfkRl
bGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoKSB7IH0KKyAgICBEZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kKFRleHQqLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpOwogCiAgICAgdmlydHVhbCB2b2lkIGRv
QXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBUZXh0ICpub2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisgICAgVGV4dCogbm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQogICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0K
IApAQCAtNTYsNCArNTIsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBfX2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kX2hfXworI2VuZGlmIC8v
IGRlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kX2hfXwpJbmRleDogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6RGVsZXRlU2VsZWN0aW9uQwogewogfQogCi1EZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgY29uc3QgU2Vs
ZWN0aW9uICZzZWxlY3Rpb24sIGJvb2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRl
ckRlbGV0ZSwgYm9vbCByZXBsYWNlKQotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1l
bnQpLCAKK0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoY29u
c3QgU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9j
a3NBZnRlckRlbGV0ZSwgYm9vbCByZXBsYWNlKQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQo
c2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpKSwgCiAgICAgICBtX2hhc1NlbGVj
dGlvblRvRGVsZXRlKHRydWUpLCAKICAgICAgIG1fc21hcnREZWxldGUoc21hcnREZWxldGUpLCAK
ICAgICAgIG1fbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZShtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKSwK
QEAgLTcyLDcgKzcyLDcgQEAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6RGVsZXRlU2VsZWN0aW9u
QwogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVTdGFydEVuZCgp
Ci0geworewogICAgIE5vZGUqIHN0YXJ0U3BlY2lhbENvbnRhaW5lciA9IDA7CiAgICAgTm9kZSog
ZW5kU3BlY2lhbENvbnRhaW5lciA9IDA7CiAgCkluZGV4OiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
aAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE4ICsyMywxNyBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBfX2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZF9o
X18KLSNkZWZpbmUgX19kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmRfaF9fCisjaWZuZGVmIGRlbGV0
ZV9zZWxlY3Rpb25fY29tbWFuZF9oX18KKyNkZWZpbmUgZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5k
X2hfXwogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0
ZUVkaXRDb21tYW5kCi17IAorY2xhc3MgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBD
b21wb3NpdGVFZGl0Q29tbWFuZCB7IAogcHVibGljOgotICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQoRG9jdW1lbnQgKmRvY3VtZW50LCBib29sIHNtYXJ0RGVsZXRlPWZhbHNlLCBib29sIG1lcmdl
QmxvY2tzQWZ0ZXJEZWxldGU9dHJ1ZSwgYm9vbCByZXBsYWNlPWZhbHNlKTsKLSAgICBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgY29uc3QgU2VsZWN0aW9uICZzZWxl
Y3Rpb24sIGJvb2wgc21hcnREZWxldGU9ZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZT10cnVlLCBib29sIHJlcGxhY2U9ZmFsc2UpOworICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQo
RG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRl
ckRlbGV0ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlKTsKKyAgICBEZWxldGVTZWxlY3Rp
b25Db21tYW5kKGNvbnN0IFNlbGVjdGlvbiYsIGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9v
bCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbigpIGNvbnN0OwpAQCAtNzksNCArNzgsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZF9o
X18KKyNlbmRpZiAvLyBkZWxldGVfc2VsZWN0aW9uX2NvbW1hbmRfaF9fCkluZGV4OiBlZGl0aW5n
L0VkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAko
cmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE3MCArMjYsMjcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKIAotI2RlZmluZSBJRl9JTVBMX05VTExfUkVUVVJOX0FSRyhhcmcpIGRvIHsgXAotICAgICAg
ICBpZiAoKnRoaXMgPT0gMCkgeyByZXR1cm4gYXJnOyB9IFwKLSAgICB9IHdoaWxlICgwKQotICAg
ICAgICAKLSNkZWZpbmUgSUZfSU1QTF9OVUxMX1JFVFVSTiBkbyB7IFwKLSAgICAgICAgaWYgKCp0
aGlzID09IDApIHsgcmV0dXJuOyB9IFwKLSAgICB9IHdoaWxlICgwKQotCi1FZGl0Q29tbWFuZFB0
cjo6RWRpdENvbW1hbmRQdHIoKQotewotfQotCi1FZGl0Q29tbWFuZFB0cjo6RWRpdENvbW1hbmRQ
dHIoRWRpdENvbW1hbmQgKmltcGwpIDogUmVmUHRyPEVkaXRDb21tYW5kPihpbXBsKQotewotfQot
Ci1ib29sIEVkaXRDb21tYW5kUHRyOjppc0NvbXBvc2l0ZVN0ZXAoKSBjb25zdAotewotICAgIElG
X0lNUExfTlVMTF9SRVRVUk5fQVJHKGZhbHNlKTsgICAgICAgIAotICAgIHJldHVybiBnZXQoKS0+
aXNDb21wb3NpdGVTdGVwKCk7Ci19Ci0KLWJvb2wgRWRpdENvbW1hbmRQdHI6OmlzSW5zZXJ0VGV4
dENvbW1hbmQoKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKGZhbHNlKTsg
ICAgICAgIAotICAgIHJldHVybiBnZXQoKS0+aXNJbnNlcnRUZXh0Q29tbWFuZCgpOwotfQotCi1i
b29sIEVkaXRDb21tYW5kUHRyOjppc1R5cGluZ0NvbW1hbmQoKSBjb25zdAotewotICAgIElGX0lN
UExfTlVMTF9SRVRVUk5fQVJHKGZhbHNlKTsgICAgICAgIAotICAgIHJldHVybiBnZXQoKS0+aXNU
eXBpbmdDb21tYW5kKCk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6OmFwcGx5KCkgY29uc3QK
LXsKLSAgICBJRl9JTVBMX05VTExfUkVUVVJOOwotICAgIGdldCgpLT5hcHBseSgpOwotfQotCi12
b2lkIEVkaXRDb21tYW5kUHRyOjp1bmFwcGx5KCkgY29uc3QKLXsKLSAgICBJRl9JTVBMX05VTExf
UkVUVVJOOwotICAgIGdldCgpLT51bmFwcGx5KCk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6
OnJlYXBwbHkoKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk47Ci0gICAgZ2V0KCkt
PnJlYXBwbHkoKTsKLX0KLQotRWRpdEFjdGlvbiBFZGl0Q29tbWFuZFB0cjo6ZWRpdGluZ0FjdGlv
bigpIGNvbnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoRWRpdEFjdGlvblVuc3Bl
Y2lmaWVkKTsKLSAgICByZXR1cm4gZ2V0KCktPmVkaXRpbmdBY3Rpb24oKTsKLX0KLQotRG9jdW1l
bnQgKiBjb25zdCBFZGl0Q29tbWFuZFB0cjo6ZG9jdW1lbnQoKSBjb25zdAotewotICAgIElGX0lN
UExfTlVMTF9SRVRVUk5fQVJHKDApOwotICAgIHJldHVybiBnZXQoKS0+ZG9jdW1lbnQoKTsKLX0K
LQotU2VsZWN0aW9uIEVkaXRDb21tYW5kUHRyOjpzdGFydGluZ1NlbGVjdGlvbigpIGNvbnN0Ci17
Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoU2VsZWN0aW9uKCkpOwotICAgIHJldHVybiBn
ZXQoKS0+c3RhcnRpbmdTZWxlY3Rpb24oKTsKLX0KLQotU2VsZWN0aW9uIEVkaXRDb21tYW5kUHRy
OjplbmRpbmdTZWxlY3Rpb24oKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJH
KFNlbGVjdGlvbigpKTsKLSAgICByZXR1cm4gZ2V0KCktPmVuZGluZ1NlbGVjdGlvbigpOwotfQot
Ci12b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rp
b24gJnMpIGNvbnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTjsKLSAgICBnZXQoKS0+c2V0
U3RhcnRpbmdTZWxlY3Rpb24ocyk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6OnNldFN0YXJ0
aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkgY29uc3QKLXsKLSAgICBJRl9J
TVBMX05VTExfUkVUVVJOOwotICAgIGdldCgpLT5zZXRTdGFydGluZ1NlbGVjdGlvbihwKTsKLX0K
LQotdm9pZCBFZGl0Q29tbWFuZFB0cjo6c2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgUG9zaXRp
b24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKLXsKLSAgICBJRl9JTVBMX05VTExfUkVU
VVJOOwotICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAsIGFmZmluaXR5KTsKLSAgICBnZXQo
KS0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ocyk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6OnNl
dEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnMpIGNvbnN0Ci17Ci0gICAgSUZfSU1Q
TF9OVUxMX1JFVFVSTjsKLSAgICBnZXQoKS0+c2V0RW5kaW5nU2VsZWN0aW9uKHMpOwotfQotCi12
b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZwKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk47Ci0gICAgZ2V0KCktPnNl
dEVuZGluZ1NlbGVjdGlvbihwKTsKLX0KLQotdm9pZCBFZGl0Q29tbWFuZFB0cjo6c2V0RW5kaW5n
U2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0Ci17
Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTjsKLSAgICBTZWxlY3Rpb24gcyA9IFNlbGVjdGlvbihw
LCBhZmZpbml0eSk7Ci0gICAgZ2V0KCktPnNldEVuZGluZ1NlbGVjdGlvbihzKTsKLX0KLQotQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKkVkaXRDb21tYW5kUHRyOjp0eXBpbmdTdHlsZSgpIGNv
bnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoMCk7Ci0gICAgcmV0dXJuIGdldCgp
LT50eXBpbmdTdHlsZSgpOwotfQotCi12b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRUeXBpbmdTdHls
ZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkgY29uc3QKLXsK
LSAgICBJRl9JTVBMX05VTExfUkVUVVJOOwotICAgIGdldCgpLT5zZXRUeXBpbmdTdHlsZShzdHls
ZSk7Ci19Ci0KLUVkaXRDb21tYW5kUHRyIEVkaXRDb21tYW5kUHRyOjpwYXJlbnQoKSBjb25zdAot
ewotICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKDApOwotICAgIHJldHVybiBnZXQoKS0+cGFy
ZW50KCk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6OnNldFBhcmVudChjb25zdCBFZGl0Q29t
bWFuZFB0ciAmY21kKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk47Ci0gICAgZ2V0
KCktPnNldFBhcmVudChjbWQuZ2V0KCkpOwotfQotCi1FZGl0Q29tbWFuZFB0ciAmRWRpdENvbW1h
bmRQdHI6OmVtcHR5Q29tbWFuZCgpCi17Ci0gICAgc3RhdGljIEVkaXRDb21tYW5kUHRyIG1fZW1w
dHlDb21tYW5kOwotICAgIHJldHVybiBtX2VtcHR5Q29tbWFuZDsKLX0KLQotRWRpdENvbW1hbmQ6
OkVkaXRDb21tYW5kKERvY3VtZW50ICpkb2N1bWVudCkgCi0gICAgOiBtX2RvY3VtZW50KGRvY3Vt
ZW50KSwgbV9zdGF0ZShOb3RBcHBsaWVkKSwgbV9wYXJlbnQoMCkKK0VkaXRDb21tYW5kOjpFZGl0
Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQpIAorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCks
IG1fcGFyZW50KDApCiB7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVChtX2Rv
Y3VtZW50LT5mcmFtZSgpKTsKLSAgICBtX3N0YXJ0aW5nU2VsZWN0aW9uID0gbV9kb2N1bWVudC0+
ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgbV9lbmRpbmdTZWxlY3Rpb24g
PSBtX3N0YXJ0aW5nU2VsZWN0aW9uOworICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKG1fZG9jdW1l
bnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24obV9zdGFydGluZ1NlbGVjdGlvbik7CiB9CiAKIEVkaXRDb21tYW5kOjp+RWRpdENvbW1h
bmQoKQpAQCAtMjAwLDEyICs1NywxMCBAQCB2b2lkIEVkaXRDb21tYW5kOjphcHBseSgpCiB7CiAg
ICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVChtX2RvY3VtZW50LT5mcmFtZSgpKTsK
LSAgICBBU1NFUlQoc3RhdGUoKSA9PSBOb3RBcHBsaWVkKTsKICAKLSAgICBGcmFtZSAqZnJhbWUg
PSBtX2RvY3VtZW50LT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZy
YW1lKCk7CiAgICAgCi0gICAgYm9vbCB0b3BMZXZlbCA9ICFpc0NvbXBvc2l0ZVN0ZXAoKTsKLSAg
ICBpZiAodG9wTGV2ZWwpIHsKKyAgICBpZiAoIW1fcGFyZW50KSB7CiAgICAgICAgIGlmICghZW5k
aW5nU2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICAgICAg
c3dpdGNoIChlZGl0aW5nQWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEVkaXRBY3Rp
b25UeXBpbmc6CkBAIC0yMjEsMjAgKzc2LDE3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OmFwcGx5KCkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGRvQXBwbHkoKTsK
LSAgICAKLSAgICBtX3N0YXRlID0gQXBwbGllZDsKIAogICAgIC8vIEZJWE1FOiBJbXByb3ZlIHR5
cGluZyBzdHlsZS4KICAgICAvLyBTZWUgdGhpcyBidWc6IDxyZGFyOi8vcHJvYmxlbS8zNzY5ODk5
PiBJbXBsZW1lbnRhdGlvbiBvZiB0eXBpbmcgc3R5bGUgbmVlZHMgaW1wcm92ZW1lbnQKICAgICBp
ZiAoIXByZXNlcnZlc1R5cGluZ1N0eWxlKCkpCiAgICAgICAgIHNldFR5cGluZ1N0eWxlKDApOwog
Ci0gICAgaWYgKHRvcExldmVsKSB7CisgICAgaWYgKCFtX3BhcmVudCkgewogICAgICAgICB1cGRh
dGVMYXlvdXQoKTsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwotICAgICAgICBm
cmFtZS0+YXBwbGllZEVkaXRpbmcoY21kKTsKKyAgICAgICAgZnJhbWUtPmFwcGxpZWRFZGl0aW5n
KHRoaXMpOwogICAgIH0KIH0KIApAQCAtMjQyLDE4ICs5NCwxNCBAQCB2b2lkIEVkaXRDb21tYW5k
Ojp1bmFwcGx5KCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1fZG9j
dW1lbnQtPmZyYW1lKCkpOwotICAgIEFTU0VSVChzdGF0ZSgpID09IEFwcGxpZWQpOwogIAotICAg
IEZyYW1lICpmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0g
bV9kb2N1bWVudC0+ZnJhbWUoKTsKICAgICAKICAgICBkb1VuYXBwbHkoKTsKLSAgICAKLSAgICBt
X3N0YXRlID0gTm90QXBwbGllZDsKIAotICAgIGlmICghaXNDb21wb3NpdGVTdGVwKCkpIHsKKyAg
ICBpZiAoIW1fcGFyZW50KSB7CiAgICAgICAgIHVwZGF0ZUxheW91dCgpOwotICAgICAgICBFZGl0
Q29tbWFuZFB0ciBjbWQodGhpcyk7Ci0gICAgICAgIGZyYW1lLT51bmFwcGxpZWRFZGl0aW5nKGNt
ZCk7CisgICAgICAgIGZyYW1lLT51bmFwcGxpZWRFZGl0aW5nKHRoaXMpOwogICAgIH0KIH0KIApA
QCAtMjYxLDE4ICsxMDksMTQgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cmVhcHBseSgpCiB7CiAgICAg
QVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVChtX2RvY3VtZW50LT5mcmFtZSgpKTsKLSAg
ICBBU1NFUlQoc3RhdGUoKSA9PSBOb3RBcHBsaWVkKTsKICAKLSAgICBGcmFtZSAqZnJhbWUgPSBt
X2RvY3VtZW50LT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1l
KCk7CiAgICAgCiAgICAgZG9SZWFwcGx5KCk7Ci0gICAgCi0gICAgbV9zdGF0ZSA9IEFwcGxpZWQ7
CiAKLSAgICBpZiAoIWlzQ29tcG9zaXRlU3RlcCgpKSB7CisgICAgaWYgKCFtX3BhcmVudCkgewog
ICAgICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMp
OwotICAgICAgICBmcmFtZS0+cmVhcHBsaWVkRWRpdGluZyhjbWQpOworICAgICAgICBmcmFtZS0+
cmVhcHBsaWVkRWRpdGluZyh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI4Niw0NCArMTMwLDIyIEBA
IEVkaXRBY3Rpb24gRWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSAKICAgICByZXR1cm4gRWRp
dEFjdGlvblVuc3BlY2lmaWVkOwogfQogCi12b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1Nl
bGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnMpCi17Ci0gICAgZm9yIChFZGl0Q29tbWFuZCAqY21k
ID0gdGhpczsgY21kOyBjbWQgPSBjbWQtPm1fcGFyZW50KQotICAgICAgICBjbWQtPm1fc3RhcnRp
bmdTZWxlY3Rpb24gPSBzOwotfQotCi12b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVj
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApCit2b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFy
dGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIHMpCiB7Ci0gICAgU2VsZWN0aW9uIHMgPSBT
ZWxlY3Rpb24ocC5kZWVwRXF1aXZhbGVudCgpLCBwLmFmZmluaXR5KCkpOwotICAgIGZvciAoRWRp
dENvbW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkKLSAgICAgICAg
Y21kLT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gczsKLX0KLQotdm9pZCBFZGl0Q29tbWFuZDo6c2V0
U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgUG9zaXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkK
LXsKLSAgICBTZWxlY3Rpb24gcyA9IFNlbGVjdGlvbihwLCBhZmZpbml0eSk7Ci0gICAgZm9yIChF
ZGl0Q29tbWFuZCAqY21kID0gdGhpczsgY21kOyBjbWQgPSBjbWQtPm1fcGFyZW50KQorICAgIEVs
ZW1lbnQqIHJvb3QgPSBzLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBmb3IgKEVkaXRDb21t
YW5kKiBjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNtZC0+bV9wYXJlbnQpIHsKICAgICAgICAgY21k
LT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gczsKKyAgICAgICAgY21kLT5tX3N0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudCA9IHJvb3Q7CisgICAgfQogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpzZXRF
bmRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzKQogewotICAgIGZvciAoRWRpdENvbW1h
bmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkKLSAgICAgICAgY21kLT5t
X2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmQ6OnNldEVuZGluZ1Nl
bGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApCi17Ci0gICAgU2VsZWN0aW9uIHMgPSBT
ZWxlY3Rpb24ocC5kZWVwRXF1aXZhbGVudCgpLCBwLmFmZmluaXR5KCkpOwotICAgIGZvciAoRWRp
dENvbW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkKLSAgICAgICAg
Y21kLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmQ6OnNldEVu
ZGluZ1NlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcCwgRUFmZmluaXR5IGFmZmluaXR5KQotewot
ICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAsIGFmZmluaXR5KTsKLSAgICBmb3IgKEVkaXRD
b21tYW5kICpjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNtZC0+bV9wYXJlbnQpCisgICAgRWxlbWVu
dCogcm9vdCA9IHMucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGZvciAoRWRpdENvbW1hbmQq
IGNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkgewogICAgICAgICBjbWQtPm1f
ZW5kaW5nU2VsZWN0aW9uID0gczsKKyAgICAgICAgY21kLT5tX2VuZGluZ1Jvb3RFZGl0YWJsZUVs
ZW1lbnQgPSByb290OworICAgIH0KIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0VHlwaW5nU3R5
bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUpCkBAIC0zNzMs
NCArMTk1LDE5IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnVwZGF0ZUxheW91dCgpIGNvbnN0CiAgICAg
ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiB9CiAK
K3ZvaWQgRWRpdENvbW1hbmQ6OnNldFBhcmVudChFZGl0Q29tbWFuZCogcGFyZW50KQoreworICAg
IEFTU0VSVChwYXJlbnQpOworICAgIEFTU0VSVCghbV9wYXJlbnQpOworICAgIG1fcGFyZW50ID0g
cGFyZW50OworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBwYXJlbnQtPmVuZGluZ1NlbGVjdGlv
bigpOworICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKHNlbGVjdGlvbik7Cit9CisKK3ZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8
RWRpdENvbW1hbmQ+IGNvbW1hbmQpCit7CisgICAgY29tbWFuZC0+YXBwbHkoKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogZWRpdGluZy9FZGl0Q29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGVkaXRpbmcvRWRpdENvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5n
L0VkaXRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4
ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIGVkaXRfY29tbWFuZF9o
X18KLSNkZWZpbmUgZWRpdF9jb21tYW5kX2hfXworI2lmbmRlZiBFZGl0Q29tbWFuZF9oCisjZGVm
aW5lIEVkaXRDb21tYW5kX2gKIAogI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJT
ZWxlY3Rpb24uaCIKQEAgLTMyLDEwOSArMzIsNTkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNz
IFZpc2libGVQb3NpdGlvbjsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIEVkaXRDb21tYW5kCi0KLWNsYXNzIEVkaXRDb21tYW5kIDogcHVibGljIFNoYXJlZDxFZGl0
Q29tbWFuZD4KLXsKK2NsYXNzIEVkaXRDb21tYW5kIDogcHVibGljIFNoYXJlZDxFZGl0Q29tbWFu
ZD4gewogcHVibGljOgotICAgIEVkaXRDb21tYW5kKERvY3VtZW50ICopOworICAgIEVkaXRDb21t
YW5kKERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+RWRpdENvbW1hbmQoKTsKIAotICAgIGJvb2wg
aXNDb21wb3NpdGVTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQgIT0gMDsgfQotICAgIEVk
aXRDb21tYW5kICpwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQotICAgIHZvaWQg
c2V0UGFyZW50KEVkaXRDb21tYW5kICpwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KKyAg
ICB2b2lkIHNldFBhcmVudChFZGl0Q29tbWFuZCopOwogCi0gICAgZW51bSBFQ29tbWFuZFN0YXRl
IHsgTm90QXBwbGllZCwgQXBwbGllZCB9OwotICAgIAogICAgIHZvaWQgYXBwbHkoKTsKICAgICB2
b2lkIHVuYXBwbHkoKTsKICAgICB2b2lkIHJlYXBwbHkoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRvUmVhcHBseSgpOyAgLy8gY2FsbHMgZG9BcHBseSgpCi0KICAgICB2aXJ0dWFs
IEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0OwogCi0gICAgdmlydHVhbCBEb2N1bWVu
dCAqIGNvbnN0IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQot
CiAgICAgU2VsZWN0aW9uIHN0YXJ0aW5nU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dGluZ1NlbGVjdGlvbjsgfQogICAgIFNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2VuZGluZ1NlbGVjdGlvbjsgfQogCi0gICAgRUNvbW1hbmRTdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICB2b2lkIHNldFN0YXRlKEVDb21tYW5kU3Rh
dGUgc3RhdGUpIHsgbV9zdGF0ZSA9IHN0YXRlOyB9Ci0KLSAgICB2b2lkIHNldFN0YXJ0aW5nU2Vs
ZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmcyk7Ci0gICAgdm9pZCBzZXRTdGFydGluZ1NlbGVjdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApOwotICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rp
b24oY29uc3QgUG9zaXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSk7Ci0gICAgdm9pZCBzZXRF
bmRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzKTsKLSAgICB2b2lkIHNldEVuZGluZ1Nl
bGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApOwotICAgIHZvaWQgc2V0RW5kaW5nU2Vs
ZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkpOworICAgIEVsZW1l
bnQqIHN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRp
bmdSb290RWRpdGFibGVFbGVtZW50LmdldCgpOyB9CisgICAgRWxlbWVudCogZW5kaW5nUm9vdEVk
aXRhYmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVu
dC5nZXQoKTsgfQogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBpbmdTdHlsZS5nZXQoKTsgfTsKICAgICB2b2lkIHNldFR5
cGluZ1N0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKICAgICAK
LSAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUF0UG9zaXRp
b24oY29uc3QgUG9zaXRpb24mKTsKLSAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNJbnNlcnRUZXh0
Q29tbWFuZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1R5cGluZ0NvbW1hbmQoKSBjb25z
dDsKIAorcHJvdGVjdGVkOgorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9jdW1lbnQuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29u
c3QgU2VsZWN0aW9uJik7CisgICAgdm9pZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0
aW9uJik7CisKKyAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZUF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIHVwZGF0ZUxheW91dCgpIGNv
bnN0OwotICAgIAorCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRvUmVh
cHBseSgpOyAvLyBjYWxscyBkb0FwcGx5KCkKKwogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNU
eXBpbmdTdHlsZSgpIGNvbnN0OwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50Owot
ICAgIEVDb21tYW5kU3RhdGUgbV9zdGF0ZTsKICAgICBTZWxlY3Rpb24gbV9zdGFydGluZ1NlbGVj
dGlvbjsKICAgICBTZWxlY3Rpb24gbV9lbmRpbmdTZWxlY3Rpb247CisgICAgUmVmUHRyPEVsZW1l
bnQ+IG1fc3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50OworICAgIFJlZlB0cjxFbGVtZW50PiBt
X2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQ7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBtX3R5cGluZ1N0eWxlOwotICAgIEVkaXRDb21tYW5kICptX3BhcmVudDsKKyAg
ICBFZGl0Q29tbWFuZCogbV9wYXJlbnQ7CiB9OwogCi1jbGFzcyBFZGl0Q29tbWFuZFB0ciA6IHB1
YmxpYyBSZWZQdHI8RWRpdENvbW1hbmQ+Ci17Ci1wdWJsaWM6Ci0gICAgRWRpdENvbW1hbmRQdHIo
KTsKLSAgICBFZGl0Q29tbWFuZFB0cihFZGl0Q29tbWFuZCAqKTsKLQotICAgIGJvb2wgaXNDb21w
b3NpdGVTdGVwKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGx5KCkgY29uc3Q7Ci0gICAgdm9pZCB1
bmFwcGx5KCkgY29uc3Q7Ci0gICAgdm9pZCByZWFwcGx5KCkgY29uc3Q7Ci0KLSAgICBFZGl0QWN0
aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdDsKLQotICAgIERvY3VtZW50ICogY29uc3QgZG9jdW1l
bnQoKSBjb25zdDsKLQotICAgIFNlbGVjdGlvbiBzdGFydGluZ1NlbGVjdGlvbigpIGNvbnN0Owot
ICAgIFNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24oKSBjb25zdDsKLQotICAgIHZvaWQgc2V0U3Rh
cnRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzKSBjb25zdDsKLSAgICB2b2lkIHNldFN0
YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcCwgRUFmZmluaXR5IGFmZmlu
aXR5KSBjb25zdDsKLSAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24g
JnMpIGNvbnN0OwotICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmcCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgUG9zaXRp
b24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3Q7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGluZ1N0eWxl
KFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KSBjb25zdDsKLQotICAgIEVk
aXRDb21tYW5kUHRyIHBhcmVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0UGFyZW50KGNvbnN0IEVk
aXRDb21tYW5kUHRyICYpIGNvbnN0OwotCi0gICAgYm9vbCBpc0luc2VydFRleHRDb21tYW5kKCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc0luc2VydExpbmVCcmVha0NvbW1hbmQoKSBjb25zdDsKLSAgICBi
b29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0OwotCi0gICAgc3RhdGljIEVkaXRDb21tYW5kUHRy
ICZlbXB0eUNvbW1hbmQoKTsKLX07Cit2b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRD
b21tYW5kPik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9fZWRpdF9j
b21tYW5kX2hfXworI2VuZGlmIC8vIEVkaXRDb21tYW5kX2gKSW5kZXg6IGVkaXRpbmcvRm9ybWF0
QmxvY2tDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIEZvcm1hdEJsb2NrQ29tbWFuZDo6Rm9ybWF0QmxvY2tDb21tYW5kKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKSAKICAgICA6IENvbXBvc2l0ZUVkaXRDb21t
YW5kKGRvY3VtZW50KSwgbV90YWdOYW1lKHRhZ05hbWUpCi17fQotCi0KK3sKK30KIAogYm9vbCBG
b3JtYXRCbG9ja0NvbW1hbmQ6Om1vZGlmeVJhbmdlKCkKIHsKSW5kZXg6IGVkaXRpbmcvRm9ybWF0
QmxvY2tDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
aAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEZvcm1hdEJsb2NrQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZAotewor
Y2xhc3MgRm9ybWF0QmxvY2tDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsK
IHB1YmxpYzoKLSAgICBGb3JtYXRCbG9ja0NvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcm
KTsKKyAgICBGb3JtYXRCbG9ja0NvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHRhZ05h
bWUpOwogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCBFZGl0QWN0aW9u
IGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0QWN0aW9uRm9ybWF0QmxvY2s7IH0K
IHByaXZhdGU6CkluZGV4OiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcp
CisrKyBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTYsMTAgKzk2LDggQEAgTm9kZSogSW5kZW50T3V0ZGVudENvbW1hbmQ6OnNwbGl0VHJlZVRvTgog
ICAgIGZvciAobm9kZSA9IHN0YXJ0OyBub2RlICYmIG5vZGUtPnBhcmVudCgpICE9IGVuZDsgbm9k
ZSA9IG5vZGUtPnBhcmVudCgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbklu
UGFyZW50KFBvc2l0aW9uKG5vZGUtPnBhcmVudCgpLCAwKSwgRE9XTlNUUkVBTSk7CiAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkluTm9kZShQb3NpdGlvbihub2RlLCAwKSwgRE9XTlNU
UkVBTSk7Ci0gICAgICAgIGlmIChwb3NpdGlvbkluUGFyZW50ICE9IHBvc2l0aW9uSW5Ob2RlKSB7
Ci0gICAgICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFNwbGl0RWxlbWVudENvbW1hbmQo
ZG9jdW1lbnQoKSwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUtPnBhcmVudCgpKSwgbm9kZSkp
OwotICAgICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAocG9zaXRpb25JblBhcmVudCAhPSBwb3NpdGlvbkluTm9kZSkKKyAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBTcGxpdEVsZW1lbnRDb21tYW5kKHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlLT5wYXJlbnQoKSksIG5vZGUpKTsKICAgICB9CiAgICAgaWYg
KHNwbGl0QW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBzcGxpdFRyZWVUb05vZGUoZW5kLCBlbmQt
PnBhcmVudCgpKTsKQEAgLTE3MSwxOCArMTY5LDE3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1h
bmQ6Om91dGRlbnRQYXJhZ3IKIAogICAgIC8vIEhhbmRsZSB0aGUgbGlzdCBjYXNlCiAgICAgYm9v
bCBpbkxpc3QgPSBmYWxzZTsKLSAgICBJbnNlcnRMaXN0Q29tbWFuZDo6RUxpc3RUeXBlIHR5cGVP
Zkxpc3Q7CisgICAgSW5zZXJ0TGlzdENvbW1hbmQ6OlR5cGUgdHlwZU9mTGlzdDsKICAgICBpZiAo
ZW5jbG9zaW5nTm9kZS0+aGFzVGFnTmFtZShvbFRhZykpIHsKICAgICAgICAgaW5MaXN0ID0gdHJ1
ZTsKLSAgICAgICAgdHlwZU9mTGlzdCA9IEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdFR5
cGU7CisgICAgICAgIHR5cGVPZkxpc3QgPSBJbnNlcnRMaXN0Q29tbWFuZDo6T3JkZXJlZExpc3Q7
CiAgICAgfSBlbHNlIGlmIChlbmNsb3NpbmdOb2RlLT5oYXNUYWdOYW1lKHVsVGFnKSkgewogICAg
ICAgICBpbkxpc3QgPSB0cnVlOwotICAgICAgICB0eXBlT2ZMaXN0ID0gSW5zZXJ0TGlzdENvbW1h
bmQ6OlVub3JkZXJlZExpc3RUeXBlOworICAgICAgICB0eXBlT2ZMaXN0ID0gSW5zZXJ0TGlzdENv
bW1hbmQ6OlVub3JkZXJlZExpc3Q7CiAgICAgfQogICAgIGlmIChpbkxpc3QpIHsKICAgICAgICAg
Ly8gVXNlIEluc2VydExpc3RDb21tYW5kIHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9uIGZyb20gdGhl
IGxpc3QKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnRMaXN0Q29tbWFuZChk
b2N1bWVudCgpLCB0eXBlT2ZMaXN0LCAiIikpOwotICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShjbWQpOworICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0TGlz
dENvbW1hbmQoZG9jdW1lbnQoKSwgdHlwZU9mTGlzdCwgIiIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAvLyBUaGUgc2VsZWN0aW9uIGlzIGluc2lkZSBhIGJsb2NrcXVvdGUKQEAgLTIy
Nyw3ICsyMjQsNyBAQCB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UmVnaW9uCiAg
ICAgd2hpbGUgKGVuZE9mQ3VycmVudFBhcmFncmFwaCAhPSBlbmRBZnRlclNlbGVjdGlvbikgewog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3Jh
cGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgICAgIGlmIChlbmRPZkN1cnJl
bnRQYXJhZ3JhcGggPT0gZW5kT2ZMYXN0UGFyYWdyYXBoKQotICAgICAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKG9yaWdpbmFsU2VsZWN0aW9uRW5kLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24ob3JpZ2luYWxTZWxlY3Rpb25FbmQsIERPV05T
VFJFQU0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVu
ZE9mQ3VycmVudFBhcmFncmFwaCk7CiAgICAgICAgIG91dGRlbnRQYXJhZ3JhcGgoKTsKSW5kZXg6
IGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRp
dGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBl
ZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIFRl
eHQgKm5vZGUsIGludCBvZmZzZXQsIGNvbnN0IFN0cmluZyAmdGV4dCkKLSAgICA6IEVkaXRDb21t
YW5kKGRvY3VtZW50KSwgbV9ub2RlKG5vZGUpLCBtX29mZnNldChvZmZzZXQpCitJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFRleHQgKm5vZGUsIGlu
dCBvZmZzZXQsIGNvbnN0IFN0cmluZyAmdGV4dCkKKyAgICA6IEVkaXRDb21tYW5kKG5vZGUtPmRv
Y3VtZW50KCkpLCBtX25vZGUobm9kZSksIG1fb2Zmc2V0KG9mZnNldCkKIHsKICAgICBBU1NFUlQo
bV9ub2RlKTsKICAgICBBU1NFUlQobV9vZmZzZXQgPj0gMCk7CkluZGV4OiBlZGl0aW5nL0luc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0luc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0luc2VydEludG9U
ZXh0Tm9kZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5
LDIyICsyOSwxNyBAQAogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBjbGFzcyBUZXh0OwotICAgIGNsYXNzIFN0cmluZzsKLX0KIAotbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgVGV4dDsKIAotY2xhc3MgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFu
ZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFu
ZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgSW5zZXJ0SW50b1RleHROb2Rl
Q29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIFRleHQgKiwgaW50LCBjb25zdCBTdHJpbmcgJik7
Ci0gICAgdmlydHVhbCB+SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCgpIHsgfQorICAgIEluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQoVGV4dCogbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3RyaW5n
JiB0ZXh0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lk
IGRvVW5hcHBseSgpOwogCi0gICAgVGV4dCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5n
ZXQoKTsgfQorICAgIFRleHQqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0K
ICAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBTdHJpbmcg
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQogCkBAIC01Niw0ICs1MSw0IEBAIHByaXZh
dGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9faW5zZXJ0X2ludG9f
dGV4dF9ub2RlX2NvbW1hbmRfaF9fCisjZW5kaWYgLy8gaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2Nv
bW1hbmRfaF9fCkluZGV4OiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1
ODA3KQorKysgZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgCiAgICAgaWYgKGlzVGFiU3BhbikgewogICAgICAgICBpbnNlcnROb2RlQXRUYWJT
cGFuUG9zaXRpb24obm9kZVRvSW5zZXJ0LmdldCgpLCBwb3MpOwotICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oUG9zaXRpb24obm9kZVRvSW5zZXJ0LT50cmF2ZXJzZU5leHROb2RlKCksIDApLCBE
T1dOU1RSRUFNKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlv
bihub2RlVG9JbnNlcnQtPnRyYXZlcnNlTmV4dE5vZGUoKSwgMCksIERPV05TVFJFQU0pKTsKICAg
ICB9IGVsc2UgaWYgKGlzRW5kT2ZCbG9jayhWaXNpYmxlUG9zaXRpb24ocG9zLCBzZWxlY3Rpb24u
YWZmaW5pdHkoKSkpKSB7CiAgICAgICAgIE5vZGUqIGJsb2NrID0gcG9zLm5vZGUoKS0+ZW5jbG9z
aW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAgICAgICAKQEAgLTExOSwyMCArMTE5LDIwIEBAIHZv
aWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlmICghaGF2ZUJy
ZWFrKQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1
bWVudCgpKS5nZXQoKSwgbm9kZVRvSW5zZXJ0LmdldCgpKTsKICAgICAgICAgICAgIAotICAgICAg
ICBzZXRFbmRpbmdTZWxlY3Rpb24oUG9zaXRpb24oYmxvY2ssIG1heERlZXBPZmZzZXQoYmxvY2sp
KSwgRE9XTlNUUkVBTSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9z
aXRpb24oYmxvY2ssIG1heERlZXBPZmZzZXQoYmxvY2spKSwgRE9XTlNUUkVBTSkpOwogICAgIH0g
ZWxzZSBpZiAocG9zLm9mZnNldCgpIDw9IHBvcy5ub2RlKCktPmNhcmV0TWluT2Zmc2V0KCkpIHsK
ICAgICAgICAgTE9HKEVkaXRpbmcsICJpbnB1dCBuZXdsaW5lIGNhc2UgMiIpOwogICAgICAgICAv
LyBJbnNlcnQgbm9kZSBiZWZvcmUgZG93bnN0cmVhbSBwb3NpdGlvbiwgYW5kIHBsYWNlIGNhcmV0
IHRoZXJlIGFzIHdlbGwuIAogICAgICAgICBQb3NpdGlvbiBlbmRpbmdQb3NpdGlvbiA9IHBvcy5k
b3duc3RyZWFtKCk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmVQb3NpdGlvbihub2RlVG9JbnNl
cnQuZ2V0KCksIGVuZGluZ1Bvc2l0aW9uKTsKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVu
ZGluZ1Bvc2l0aW9uLCBET1dOU1RSRUFNKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNl
bGVjdGlvbihlbmRpbmdQb3NpdGlvbiwgRE9XTlNUUkVBTSkpOwogICAgIH0gZWxzZSBpZiAocG9z
Lm9mZnNldCgpID49IHBvcy5ub2RlKCktPmNhcmV0TWF4T2Zmc2V0KCkpIHsKICAgICAgICAgTE9H
KEVkaXRpbmcsICJpbnB1dCBuZXdsaW5lIGNhc2UgMyIpOwogICAgICAgICAvLyBJbnNlcnQgQlIg
YWZ0ZXIgdGhpcyBub2RlLiBQbGFjZSBjYXJldCBpbiB0aGUgcG9zaXRpb24gdGhhdCBpcyBkb3du
c3RyZWFtCiAgICAgICAgIC8vIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uLCByZWNrb25lZCBiZWZv
cmUgaW5zZXJ0aW5nIHRoZSBCUiBpbiBiZXR3ZWVuLgogICAgICAgICBQb3NpdGlvbiBlbmRpbmdQ
b3NpdGlvbiA9IHBvcy5kb3duc3RyZWFtKCk7CiAgICAgICAgIGluc2VydE5vZGVBZnRlclBvc2l0
aW9uKG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KGVuZGluZ1Bvc2l0aW9uLCBET1dOU1RSRUFNKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFNlbGVjdGlvbihlbmRpbmdQb3NpdGlvbiwgRE9XTlNUUkVBTSkpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIFNwbGl0IGEgdGV4dCBub2RlCiAgICAgICAgIExPRyhFZGl0aW5nLCAiaW5wdXQg
bmV3bGluZSBjYXNlIDQiKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEluc2VydExpbmVCcmVh
a0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHRO
b2RlLCAwLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nUG9zaXRpb24sIERPV05TVFJFQU0pOwor
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uLCBET1dO
U1RSRUFNKSk7CiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlz
IGEgdHlwaW5nIHN0eWxlLgpJbmRleDogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmgJKHJldmlzaW9u
IDE1ODA3KQorKysgZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxNyArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBJbnNlcnRMaW5lQnJlYWtDb21tYW5kIDogcHVibGljIENvbXBvc2l0
ZUVkaXRDb21tYW5kCi17CitjbGFzcyBJbnNlcnRMaW5lQnJlYWtDb21tYW5kIDogcHVibGljIENv
bXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBJbnNlcnRMaW5lQnJlYWtDb21tYW5k
KERvY3VtZW50ICpkb2N1bWVudCk7CisgICAgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZChEb2N1bWVu
dCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdDsKLSAgICB2b2lkIGluc2VydE5v
ZGVBZnRlclBvc2l0aW9uKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZwb3MpOwotICAgIHZv
aWQgaW5zZXJ0Tm9kZUJlZm9yZVBvc2l0aW9uKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZw
b3MpOworICAgIHZvaWQgaW5zZXJ0Tm9kZUFmdGVyUG9zaXRpb24oTm9kZSosIGNvbnN0IFBvc2l0
aW9uJik7CisgICAgdm9pZCBpbnNlcnROb2RlQmVmb3JlUG9zaXRpb24oTm9kZSosIGNvbnN0IFBv
c2l0aW9uJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBlZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsMTAgQEAgTm9kZSogSW5zZXJ0TGlzdENvbW1h
bmQ6OmZpeE9ycGhhbmVkTGlzdAogICAgIHJldHVybiBsaXN0RWxlbWVudC5nZXQoKTsKIH0KIAot
SW5zZXJ0TGlzdENvbW1hbmQ6Okluc2VydExpc3RDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwg
RUxpc3RUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgaWQpIAorSW5zZXJ0TGlzdENvbW1hbmQ6Oklu
c2VydExpc3RDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgVHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIGlkKSAKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV90eXBlKHR5
cGUpLCBtX2lkKGlkKSwgbV9mb3JjZUNyZWF0ZUxpc3QoZmFsc2UpCi17fQoreworfQogCiBib29s
IEluc2VydExpc3RDb21tYW5kOjptb2RpZnlSYW5nZSgpCiB7CkBAIC05NCw3ICs5NSw3IEBAIHZv
aWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgTm9kZSogc2VsZWN0aW9uTm9kZSA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgp
OwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUgbGlzdFRhZyA9IChtX3R5cGUgPT0gT3JkZXJlZExp
c3RUeXBlKSA/IG9sVGFnIDogdWxUYWc7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSBsaXN0VGFn
ID0gKG1fdHlwZSA9PSBPcmRlcmVkTGlzdCkgPyBvbFRhZyA6IHVsVGFnOwogICAgIE5vZGUqIGxp
c3RDaGlsZE5vZGUgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoc2VsZWN0aW9uTm9kZSk7CiAgICAgYm9v
bCBzd2l0Y2hMaXN0VHlwZSA9IGZhbHNlOwogICAgIGlmIChsaXN0Q2hpbGROb2RlKSB7CkBAIC0x
NjIsNyArMTYzLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAg
ICAgICBhcHBlbmROb2RlKGxpc3RJdGVtRWxlbWVudC5nZXQoKSwgbmV4dExpc3QpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgbGlzdC4KLSAgICAgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBsaXN0RWxlbWVudCA9IG1fdHlwZSA9PSBPcmRlcmVkTGlzdFR5cGUgPyBj
cmVhdGVPcmRlcmVkTGlzdEVsZW1lbnQoZG9jdW1lbnQoKSkgOiBjcmVhdGVVbm9yZGVyZWRMaXN0
RWxlbWVudChkb2N1bWVudCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBsaXN0RWxl
bWVudCA9IG1fdHlwZSA9PSBPcmRlcmVkTGlzdCA/IGNyZWF0ZU9yZGVyZWRMaXN0RWxlbWVudChk
b2N1bWVudCgpKSA6IGNyZWF0ZVVub3JkZXJlZExpc3RFbGVtZW50KGRvY3VtZW50KCkpOwogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihsaXN0RWxlbWVudC5nZXQoKSktPnNl
dElkKG1faWQpOwogICAgICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbUVsZW1lbnQuZ2V0KCks
IGxpc3RFbGVtZW50LmdldCgpKTsKICAgICAgICAgICAgIGluc2VydE5vZGVBdChsaXN0RWxlbWVu
dC5nZXQoKSwgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCksIHN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkub2Zmc2V0KCkpOwpJbmRleDogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisr
KyBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE3ICsz
MCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc2VydExpc3RDb21tYW5k
IDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kCi17CitjbGFzcyBJbnNlcnRMaXN0Q29tbWFu
ZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgZW51bSBFTGlz
dFR5cGUgeyBPcmRlcmVkTGlzdFR5cGUsIFVub3JkZXJlZExpc3RUeXBlIH07Ci0gICAgSW5zZXJ0
TGlzdENvbW1hbmQoRG9jdW1lbnQqLCBFTGlzdFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIGVu
dW0gVHlwZSB7IE9yZGVyZWRMaXN0LCBVbm9yZGVyZWRMaXN0IH07CisgICAgSW5zZXJ0TGlzdENv
bW1hbmQoRG9jdW1lbnQqLCBUeXBlLCBjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZG9BcHBseSgpOwogICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gRWRpdEFjdGlvbkluc2VydExpc3Q7IH0KIHByaXZhdGU6CiAgICAgTm9kZSogZml4
T3JwaGFuZWRMaXN0Q2hpbGQoTm9kZSopOwogICAgIGJvb2wgbW9kaWZ5UmFuZ2UoKTsKLSAgICBF
TGlzdFR5cGUgbV90eXBlOworICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmluZyBtX2lkOwogICAg
IGJvb2wgbV9mb3JjZUNyZWF0ZUxpc3Q7CiB9OwpJbmRleDogZWRpdGluZy9JbnNlcnROb2RlQmVm
b3JlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1JbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQoRG9jdW1lbnQgKmRvY3VtZW50LCBOb2RlICppbnNlcnRDaGlsZCwgTm9kZSAqcmVmQ2hpbGQp
Ci0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1faW5zZXJ0Q2hpbGQoaW5zZXJ0Q2hpbGQp
LCBtX3JlZkNoaWxkKHJlZkNoaWxkKQorSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Okluc2VydE5v
ZGVCZWZvcmVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNo
aWxkKQorICAgIDogRWRpdENvbW1hbmQocmVmQ2hpbGQtPmRvY3VtZW50KCkpLCBtX2luc2VydENo
aWxkKGluc2VydENoaWxkKSwgbV9yZWZDaGlsZChyZWZDaGlsZCkKIHsKICAgICBBU1NFUlQobV9p
bnNlcnRDaGlsZCk7CiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwpJbmRleDogZWRpdGluZy9JbnNl
cnROb2RlQmVmb3JlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0luc2VydE5vZGVCZWZv
cmVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyNCAr
MjMsMjIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgX19pbnNlcnRfbm9kZV9i
ZWZvcmVfY29tbWFuZF9oX18KLSNkZWZpbmUgX19pbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZF9o
X18KKyNpZm5kZWYgaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmRfaF9fCisjZGVmaW5lIGluc2Vy
dF9ub2RlX2JlZm9yZV9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZCA6IHB1
YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQgOiBwdWJs
aWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIEluc2VydE5vZGVCZWZvcmVDb21tYW5kKERv
Y3VtZW50ICosIE5vZGUgKmluc2VydENoaWxkLCBOb2RlICpyZWZDaGlsZCk7Ci0gICAgdmlydHVh
bCB+SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoKSB7IH0KKyAgICBJbnNlcnROb2RlQmVmb3JlQ29t
bWFuZChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBOb2RlKiByZWZDaGlsZCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsK
IAotICAgIE5vZGUgKmluc2VydENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9pbnNlcnRDaGlsZC5n
ZXQoKTsgfQotICAgIE5vZGUgKnJlZkNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDaGlsZC5n
ZXQoKTsgfQorICAgIE5vZGUqIGluc2VydENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9pbnNlcnRD
aGlsZC5nZXQoKTsgfQorICAgIE5vZGUqIHJlZkNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9yZWZD
aGlsZC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX2luc2VydENoaWxk
OwpAQCAtNDksNCArNDcsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBfX2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kX2hfXworI2VuZGlmIC8vIGlu
c2VydF9ub2RlX2JlZm9yZV9jb21tYW5kX2hfXwpJbmRleDogZWRpdGluZy9JbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwx
MSArMTAwLDggQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAg
IC8vIEZJWE1FOiBUdXJuIGludG8gYW4gSW5zZXJ0TGluZUJyZWFrIGluIG90aGVyIGNhc2VzIHdo
ZXJlIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhlIHNwbGl0dGluZy9jbG9uaW5nIHRoYXQKICAgICAv
LyBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgZG9lcy4KICAgICBOb2RlKiBibG9jayA9IHBvcy5u
b2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKLSAgICBpZiAoIWJsb2NrIHx8Ci0g
ICAgICAgICFibG9jay0+cGFyZW50Tm9kZSgpIHx8Ci0gICAgICAgIGJsb2NrLT5yZW5kZXJlcigp
ICYmIGJsb2NrLT5yZW5kZXJlcigpLT5pc1RhYmxlQ2VsbCgpKSB7Ci0gICAgICAgIEVkaXRDb21t
YW5kUHRyIGNtZChuZXcgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZChkb2N1bWVudCgpKSk7IAotICAg
ICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGlmICghYmxvY2sgfHwgIWJs
b2NrLT5wYXJlbnROb2RlKCkgfHwgYmxvY2stPnJlbmRlcmVyKCkgJiYgYmxvY2stPnJlbmRlcmVy
KCktPmlzVGFibGVDZWxsKCkpIHsKKyAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3
IEluc2VydExpbmVCcmVha0NvbW1hbmQoZG9jdW1lbnQoKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApAQCAtMTU3LDcgKzE1NCw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZDo6ZG8KICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihibG9ja1RvSW5zZXJ0
LmdldCgpLCBzdGFydEJsb2NrKTsKIAogICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGJs
b2NrVG9JbnNlcnQuZ2V0KCkpOwotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oUG9zaXRpb24o
YmxvY2tUb0luc2VydC5nZXQoKSwgMCksIERPV05TVFJFQU0pOworICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dO
U1RSRUFNKSk7CiAgICAgICAgIGFwcGx5U3R5bGVBZnRlckluc2VydGlvbigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTc5LDkgKzE3Niw5IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZDo6ZG8KIAogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGJsb2NrVG9JbnNl
cnQuZ2V0KCksIHJlZk5vZGUpOwogICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGJsb2Nr
VG9JbnNlcnQuZ2V0KCkpOwotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oUG9zaXRpb24oYmxv
Y2tUb0luc2VydC5nZXQoKSwgMCksIERPV05TVFJFQU0pOworICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dOU1RS
RUFNKSk7CiAgICAgICAgIGFwcGx5U3R5bGVBZnRlckluc2VydGlvbigpOwotICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24ocG9zLCBET1dOU1RSRUFNKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKFNlbGVjdGlvbihwb3MsIERPV05TVFJFQU0pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjkzLDcgKzI5MCw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZDo6ZG8KICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlv
bihibG9ja1RvSW5zZXJ0LmdldCgpLCAwKSwgRE9XTlNUUkVBTSk7CisgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihibG9ja1RvSW5zZXJ0LmdldCgpLCAwKSwgRE9XTlNU
UkVBTSkpOwogICAgIGFwcGx5U3R5bGVBZnRlckluc2VydGlvbigpOwogfQogCkluZGV4OiBlZGl0
aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0luc2VydFRl
eHRDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDEwICsxMzksMTAgQEAgdm9pZCBJbnNlcnRU
ZXh0Q29tbWFuZDo6aW5wdXQoY29uc3QgU3RyaQogICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0
eWxlKTsKIAogICAgIGlmICghc2VsZWN0SW5zZXJ0ZWRUZXh0KQotICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGVuZGluZ1NlbGVjdGlvbigpLmFmZmlu
aXR5KCkpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZGluZ1NlbGVj
dGlvbigpLmVuZCgpLCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0eSgpKSk7CiB9CiAKLVBvc2l0
aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIoUG9zaXRpb24gcG9zKQorUG9zaXRpb24g
SW5zZXJ0VGV4dENvbW1hbmQ6Omluc2VydFRhYihjb25zdCBQb3NpdGlvbiYgcG9zKQogewogICAg
IFBvc2l0aW9uIGluc2VydFBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLmRl
ZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIApJbmRleDogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaAkocmV2aXNpb24g
MTU4MDcpCisrKyBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMywzNCArMjMsMzMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgX19pbnNlcnRfdGV4dF9jb21tYW5kX2hfXwotI2RlZmluZSBfX2luc2VydF90
ZXh0X2NvbW1hbmRfaF9fCisjaWZuZGVmIGluc2VydF90ZXh0X2NvbW1hbmRfaF9fCisjZGVmaW5l
IGluc2VydF90ZXh0X2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFu
ZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc2VydFRleHRDb21tYW5kIDog
cHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kCi17CitjbGFzcyBJbnNlcnRUZXh0Q29tbWFuZCA6
IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgSW5zZXJ0VGV4dENv
bW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50KTsKKyAgICBJbnNlcnRUZXh0Q29tbWFuZChEb2N1bWVu
dCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAogICAgIHZvaWQgZGVsZXRlQ2hh
cmFjdGVyKCk7Ci0gICAgdm9pZCBpbnB1dChjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0
SW5zZXJ0ZWRUZXh0ID0gZmFsc2UpOwotICAgIAorICAgIHZvaWQgaW5wdXQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCA9IGZhbHNlKTsKKwogICAgIHVuc2lnbmVk
IGNoYXJhY3RlcnNBZGRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyc0FkZGVkOyB9CiAg
ICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0luc2VydFRleHRDb21tYW5kKCkgY29u
c3Q7CiAKLSAgICBQb3NpdGlvbiBwcmVwYXJlRm9yVGV4dEluc2VydGlvbihjb25zdCBQb3NpdGlv
biYgcG9zKTsKLSAgICBQb3NpdGlvbiBpbnNlcnRUYWIoUG9zaXRpb24gcG9zKTsKKyAgICBQb3Np
dGlvbiBwcmVwYXJlRm9yVGV4dEluc2VydGlvbihjb25zdCBQb3NpdGlvbiYpOworICAgIFBvc2l0
aW9uIGluc2VydFRhYihjb25zdCBQb3NpdGlvbiYpOwogCiAgICAgdW5zaWduZWQgbV9jaGFyYWN0
ZXJzQWRkZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX2lu
c2VydF90ZXh0X2NvbW1hbmRfaF9fCisjZW5kaWYgLy8gaW5zZXJ0X3RleHRfY29tbWFuZF9oX18K
SW5kZXg6IGVkaXRpbmcvSlNFZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvSlNFZGl0
b3IuY3BwCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvSlNFZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCwxOSArNTQsMTkgQEAgbmFtZXNwYWNlIHsKIGJvb2wgc3VwcG9ydHNQYXN0
ZUNvbW1hbmQgPSBmYWxzZTsKIAogc3RydWN0IENvbW1hbmRJbXAgewotICAgIGJvb2wgKCpleGVj
Rm4pKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVl
KTsKLSAgICBib29sICgqZW5hYmxlZEZuKShGcmFtZSAqZnJhbWUpOwotICAgIEZyYW1lOjpUcmlT
dGF0ZSAoKnN0YXRlRm4pKEZyYW1lICpmcmFtZSk7Ci0gICAgU3RyaW5nICgqdmFsdWVGbikoRnJh
bWUgKmZyYW1lKTsKKyAgICBib29sICgqZXhlY0ZuKShGcmFtZSosIGJvb2wgdXNlckludGVyZmFj
ZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSk7CisgICAgYm9vbCAoKmVuYWJsZWRGbikoRnJhbWUqKTsK
KyAgICBGcmFtZTo6VHJpU3RhdGUgKCpzdGF0ZUZuKShGcmFtZSopOworICAgIFN0cmluZyAoKnZh
bHVlRm4pKEZyYW1lKik7CiB9OwogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCAqLCBjb25z
dCBDb21tYW5kSW1wICosIENhc2VJbnNlbnNpdGl2ZUhhc2g+IENvbW1hbmRNYXA7CiAKLUNvbW1h
bmRNYXAgKmNyZWF0ZUNvbW1hbmREaWN0aW9uYXJ5KCk7CitDb21tYW5kTWFwKiBjcmVhdGVDb21t
YW5kRGljdGlvbmFyeSgpOwogCi1jb25zdCBDb21tYW5kSW1wICpjb21tYW5kSW1wKGNvbnN0IFN0
cmluZyAmY29tbWFuZCkKK2NvbnN0IENvbW1hbmRJbXAqIGNvbW1hbmRJbXAoY29uc3QgU3RyaW5n
ICZjb21tYW5kKQogewotICAgIHN0YXRpYyBDb21tYW5kTWFwICpjb21tYW5kRGljdGlvbmFyeSA9
IGNyZWF0ZUNvbW1hbmREaWN0aW9uYXJ5KCk7CisgICAgc3RhdGljIENvbW1hbmRNYXAqIGNvbW1h
bmREaWN0aW9uYXJ5ID0gY3JlYXRlQ29tbWFuZERpY3Rpb25hcnkoKTsKICAgICByZXR1cm4gY29t
bWFuZERpY3Rpb25hcnktPmdldChjb21tYW5kLmltcGwoKSk7CiB9CiAKQEAgLTc0LDQ5ICs3NCw0
OSBAQCBjb25zdCBDb21tYW5kSW1wICpjb21tYW5kSW1wKGNvbnN0IFN0cmluCiAKIGJvb2wgSlNF
ZGl0b3I6OmV4ZWNDb21tYW5kKGNvbnN0IFN0cmluZyAmY29tbWFuZCwgYm9vbCB1c2VySW50ZXJm
YWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewotICAgIGNvbnN0IENvbW1hbmRJbXAgKmNtZCA9
IGNvbW1hbmRJbXAoY29tbWFuZCk7CisgICAgY29uc3QgQ29tbWFuZEltcCogY21kID0gY29tbWFu
ZEltcChjb21tYW5kKTsKICAgICBpZiAoIWNtZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEZyYW1lICpmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9j
dW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBy
ZXR1cm4gY21kLT5lbmFibGVkRm4oZnJhbWUpICYmIGNtZC0+ZXhlY0ZuKGZyYW1lLCAgdXNlcklu
dGVyZmFjZSwgdmFsdWUpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiBjbWQtPmVuYWJsZWRGbihmcmFtZSkgJiYgY21k
LT5leGVjRm4oZnJhbWUsIHVzZXJJbnRlcmZhY2UsIHZhbHVlKTsKIH0KIAogYm9vbCBKU0VkaXRv
cjo6cXVlcnlDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcgJmNvbW1hbmQpCiB7Ci0gICAgY29u
c3QgQ29tbWFuZEltcCAqY21kID0gY29tbWFuZEltcChjb21tYW5kKTsKKyAgICBjb25zdCBDb21t
YW5kSW1wKiBjbWQgPSBjb21tYW5kSW1wKGNvbW1hbmQpOwogICAgIGlmICghY21kKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgRnJhbWUgKmZyYW1lID0gbV9kb2MtPmZyYW1lKCk7CisgICAg
RnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9kb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwogICAgIHJldHVybiBjbWQtPmVuYWJsZWRGbihmcmFtZSk7CiB9CiAKIGJv
b2wgSlNFZGl0b3I6OnF1ZXJ5Q29tbWFuZEluZGV0ZXJtKGNvbnN0IFN0cmluZyAmY29tbWFuZCkK
IHsKLSAgICBjb25zdCBDb21tYW5kSW1wICpjbWQgPSBjb21tYW5kSW1wKGNvbW1hbmQpOworICAg
IGNvbnN0IENvbW1hbmRJbXAqIGNtZCA9IGNvbW1hbmRJbXAoY29tbWFuZCk7CiAgICAgaWYgKCFj
bWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGcmFtZSAqZnJhbWUgPSBtX2RvYy0+ZnJh
bWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2RvYy0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgcmV0dXJuIGNtZC0+c3RhdGVGbihmcmFtZSkg
PT0gRnJhbWU6Om1peGVkVHJpU3RhdGU7CiB9CiAKIGJvb2wgSlNFZGl0b3I6OnF1ZXJ5Q29tbWFu
ZFN0YXRlKGNvbnN0IFN0cmluZyAmY29tbWFuZCkKIHsKLSAgICBjb25zdCBDb21tYW5kSW1wICpj
bWQgPSBjb21tYW5kSW1wKGNvbW1hbmQpOworICAgIGNvbnN0IENvbW1hbmRJbXAqIGNtZCA9IGNv
bW1hbmRJbXAoY29tbWFuZCk7CiAgICAgaWYgKCFjbWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBGcmFtZSAqZnJhbWUgPSBtX2RvYy0+ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBt
X2RvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX2RvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Cisg
ICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAg
ICAgcmV0dXJuIGNtZC0+c3RhdGVGbihmcmFtZSkgIT0gRnJhbWU6OmZhbHNlVHJpU3RhdGU7CiB9
CiAKQEAgLTEyOSwxMyArMTI5LDEzIEBAIGJvb2wgSlNFZGl0b3I6OnF1ZXJ5Q29tbWFuZFN1cHBv
cnRlZChjb24KIAogU3RyaW5nIEpTRWRpdG9yOjpxdWVyeUNvbW1hbmRWYWx1ZShjb25zdCBTdHJp
bmcgJmNvbW1hbmQpCiB7Ci0gICAgY29uc3QgQ29tbWFuZEltcCAqY21kID0gY29tbWFuZEltcChj
b21tYW5kKTsKKyAgICBjb25zdCBDb21tYW5kSW1wKiBjbWQgPSBjb21tYW5kSW1wKGNvbW1hbmQp
OwogICAgIGlmICghY21kKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgRnJhbWUgKmZy
YW1lID0gbV9kb2MtPmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9k
b2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1l
bnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBj
bWQtPnZhbHVlRm4oZnJhbWUpOwogfQogCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBKU0VkaXRv
cjo6c2V0U3VwcG9ydHNQYXN0ZUNvbW1hbmQoYgogCiBuYW1lc3BhY2UgewogCi1ib29sIGV4ZWNT
dHlsZUNoYW5nZShGcmFtZSAqZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnBy
b3BlcnR5VmFsdWUpCitib29sIGV4ZWNTdHlsZUNoYW5nZShGcmFtZSogZnJhbWUsIGludCBwcm9w
ZXJ0eUlELCBjb25zdCBTdHJpbmcgJnByb3BlcnR5VmFsdWUpCiB7CiAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSk7
CkBAIC0xNTgsMjYgKzE1OCwyNiBAQCBib29sIGV4ZWNTdHlsZUNoYW5nZShGcmFtZSAqZnJhbWUs
IGludCBwCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY1N0eWxlQ2hhbmdlKEZyYW1l
ICpmcmFtZSwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIgKnByb3BlcnR5VmFsdWUpCitib29s
IGV4ZWNTdHlsZUNoYW5nZShGcmFtZSogZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBjaGFy
ICpwcm9wZXJ0eVZhbHVlKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBw
cm9wZXJ0eUlELCBTdHJpbmcocHJvcGVydHlWYWx1ZSkpOworICAgIHJldHVybiBleGVjU3R5bGVD
aGFuZ2UoZnJhbWUsIHByb3BlcnR5SUQsIFN0cmluZyhwcm9wZXJ0eVZhbHVlKSk7CiB9CiAKLUZy
YW1lOjpUcmlTdGF0ZSBzdGF0ZVN0eWxlKEZyYW1lICpmcmFtZSwgaW50IHByb3BlcnR5SUQsIGNv
bnN0IGNoYXIgKmRlc2lyZWRWYWx1ZSkKK0ZyYW1lOjpUcmlTdGF0ZSBzdGF0ZVN0eWxlKEZyYW1l
KiBmcmFtZSwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIgKmRlc2lyZWRWYWx1ZSkKIHsKICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gbmV3IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBk
ZXNpcmVkVmFsdWUpOwogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUu
Z2V0KCkpOwogfQogCi1ib29sIHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoRnJhbWUgKmZyYW1lLCBp
bnQgcHJvcGVydHlJRCwgY29uc3QgY2hhciAqZGVzaXJlZFZhbHVlKQorYm9vbCBzZWxlY3Rpb25T
dGFydEhhc1N0eWxlKEZyYW1lKiBmcmFtZSwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIgKmRl
c2lyZWRWYWx1ZSkKIHsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCBkZXNpcmVkVmFsdWUpOwogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0
aW9uU3RhcnRIYXNTdHlsZShzdHlsZS5nZXQoKSk7CiB9CiAKLVN0cmluZyB2YWx1ZVN0eWxlKEZy
YW1lICpmcmFtZSwgaW50IHByb3BlcnR5SUQpCitTdHJpbmcgdmFsdWVTdHlsZShGcmFtZSogZnJh
bWUsIGludCBwcm9wZXJ0eUlEKQogewogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uU3RhcnRT
dHlsZVByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CiB9CkBAIC0xODcsMTggKzE4NywxOCBAQCBT
dHJpbmcgdmFsdWVTdHlsZShGcmFtZSAqZnJhbWUsIGludCBwcm9wCiAvLyBleGVjQ29tbWFuZCBp
bXBsZW1lbnRhdGlvbnMKIC8vCiAKLWJvb2wgZXhlY0JhY2tDb2xvcihGcmFtZSAqZnJhbWUsIGJv
b2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0JhY2tDb2xv
cihGcmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkK
IHsKICAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9CQUNLR1JPVU5E
X0NPTE9SLCB2YWx1ZSk7CiB9CiAKLWJvb2wgZXhlY0JvbGQoRnJhbWUgKmZyYW1lLCBib29sIHVz
ZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNCb2xkKEZyYW1lKiBm
cmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewotICAgIGJv
b2wgaXNCb2xkID0gc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShmcmFtZSwgIENTU19QUk9QX0ZPTlRf
V0VJR0hULCAiYm9sZCIpOwotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1Nf
UFJPUF9GT05UX1dFSUdIVCwgaXNCb2xkID8gIm5vcm1hbCIgOiAiYm9sZCIpOworICAgIGJvb2wg
aXNCb2xkID0gc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShmcmFtZSwgQ1NTX1BST1BfRk9OVF9XRUlH
SFQsICJib2xkIik7CisgICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgQ1NTX1BST1Bf
Rk9OVF9XRUlHSFQsIGlzQm9sZCA/ICJub3JtYWwiIDogImJvbGQiKTsKIH0KIAotYm9vbCBleGVj
Q29weShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1
ZSkKK2Jvb2wgZXhlY0NvcHkoRnJhbWUqIGZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0
IFN0cmluZyAmdmFsdWUpCiB7CiAgICAgZnJhbWUtPmNvcHlUb1Bhc3RlYm9hcmQoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIxMyw2MyArMjEzLDYyIEBAIGJvb2wgZXhlY0NyZWF0ZUxpbmsoRnJh
bWUqIGZyYW1lLCBib29sIHUKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIobmV3IENyZWF0ZUxpbmtDb21tYW5k
KGZyYW1lLT5kb2N1bWVudCgpLCB2YWx1ZSkpLmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5l
dyBDcmVhdGVMaW5rQ29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgdmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjQ3V0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJm
YWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjQ3V0KEZyYW1lKiBmcmFtZSwgYm9v
bCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewogICAgIGZyYW1lLT5jdXRU
b1Bhc3RlYm9hcmQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjRGVsZXRlKEZy
YW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9v
bCBleGVjRGVsZXRlKEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJp
bmcgJnZhbHVlKQogewogICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZnJhbWUt
PmRvY3VtZW50KCksIGZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpID09IFdvcmRHcmFudWxh
cml0eSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB3
YXkgdG8gc2VuZCBtb3JlIHBhcmFtZXRlcnMgdG8gZXhlY0NvbW1hbmQgc28gdGhhdCB3ZSBjYW4g
c3VwcG9ydCBhbGwgb2YgdGhlIGZlYXR1cmVzIG9mIEZyYW1lOjpmaW5kU3RyaW5nLgotYm9vbCBl
eGVjRmluZFN0cmluZyhGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0ZpbmRTdHJpbmcoRnJhbWUqIGZyYW1lLCBib29sIHVzZXJJ
bnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7CiAgICAgcmV0dXJuIGZyYW1lLT5maW5k
U3RyaW5nKHZhbHVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKLWJvb2wgZXhlY0ZvcndhcmRE
ZWxldGUoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFs
dWUpCitib29sIGV4ZWNGb3J3YXJkRGVsZXRlKEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJm
YWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewogICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmRE
ZWxldGVLZXlQcmVzc2VkKGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBleGVjRm9udE5hbWUoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNv
bnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNGb250TmFtZShGcmFtZSogZnJhbWUsIGJvb2wg
dXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY1N0
eWxlQ2hhbmdlKGZyYW1lLCAgQ1NTX1BST1BfRk9OVF9GQU1JTFksIHZhbHVlKTsKKyAgICByZXR1
cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9GT05UX0ZBTUlMWSwgdmFsdWUpOwog
fQogCi1ib29sIGV4ZWNGb250U2l6ZShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwg
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0ZvbnRTaXplKEZyYW1lKiBmcmFtZSwgYm9v
bCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewotICAgIHJldHVybiBleGVj
U3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9GT05UX1NJWkUsIHZhbHVlKTsKKyAgICByZXR1
cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9GT05UX1NJWkUsIHZhbHVlKTsKIH0K
IAotYm9vbCBleGVjRm9udFNpemVEZWx0YShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFj
ZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0ZvbnRTaXplRGVsdGEoRnJhbWUqIGZy
YW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX19XRUJLSVRfRk9OVF9TSVpFX0RF
TFRBLCB2YWx1ZSk7CisgICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgQ1NTX1BST1Bf
X1dFQktJVF9GT05UX1NJWkVfREVMVEEsIHZhbHVlKTsKIH0KIAotYm9vbCBleGVjRm9yZUNvbG9y
KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQor
Ym9vbCBleGVjRm9yZUNvbG9yKEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25z
dCBTdHJpbmcgJnZhbHVlKQogewogICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIENT
U19QUk9QX0NPTE9SLCB2YWx1ZSk7CiB9CiAKLWJvb2wgZXhlY0Zvcm1hdEJsb2NrKEZyYW1lICpm
cmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVj
Rm9ybWF0QmxvY2soRnJhbWUqIGZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCiB7CiAgICAgU3RyaW5nIHRhZ05hbWUgPSB2YWx1ZS5sb3dlcigpOwogICAgIGlm
ICh0YWdOYW1lWzBdID09ICc8JyAmJiB0YWdOYW1lW3RhZ05hbWUubGVuZ3RoKCkgLSAxXSA9PSAn
PicpCiAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygxLCB0YWdOYW1lLmxlbmd0
aCgpIC0gMik7CiAgICAgaWYgKCF2YWxpZEJsb2NrVGFnKHRhZ05hbWUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBFZGl0Q29tbWFuZFB0cihuZXcgRm9ybWF0QmxvY2tDb21tYW5kKGZy
YW1lLT5kb2N1bWVudCgpLCB0YWdOYW1lKSkuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3
IEZvcm1hdEJsb2NrQ29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgdGFnTmFtZSkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0yODIsMTggKzI4MSwxNSBAQCBib29sIGV4ZWNJbnNlcnRIb3Jp
em9udGFsUnVsZShGcmFtZSogZnJhCiAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGhyLCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRWRpdENvbW1h
bmRQdHIobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKGZyYW1lLT5kb2N1bWVudCgpLCBmcmFn
bWVudC5nZXQoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb25VbnNwZWNp
ZmllZCkpLmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZChmcmFnbWVudC5yZWxlYXNlKCksCisgICAgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBleGVjSW5zZXJ0SFRNTChGcmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGJhc2VVUkwgPSAiIjsKLSAg
ICBib29sIHNlbGVjdFJlcGxhY2VtZW50ID0gZmFsc2U7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVu
dCgpLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIGJhc2VVUkwpOwotICAgIEVkaXRDb21tYW5k
UHRyIGNtZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIGZy
YWdtZW50LmdldCgpLCBzZWxlY3RSZXBsYWNlbWVudCkpOwotICAgIGNtZC5hcHBseSgpOworICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGFwcGx5Q29tbWFu
ZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRv
Y3VtZW50LCB2YWx1ZSwgIiIpLCBmYWxzZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0z
MTEsMTAzICszMDcsMTAzIEBAIGJvb2wgZXhlY0luc2VydEltYWdlKEZyYW1lKiBmcmFtZSwgYm9v
bCAKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBFZGl0Q29t
bWFuZFB0cihuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIGZy
YWdtZW50LmdldCgpLCBmYWxzZSkpLmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5ldyBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZChmcmFnbWVudC5yZWxlYXNlKCksIGZhbHNlKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0luZGVudChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlcklu
dGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0luZGVudChGcmFtZSogZnJh
bWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBFZGl0
Q29tbWFuZFB0cihuZXcgSW5kZW50T3V0ZGVudENvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIElu
ZGVudE91dGRlbnRDb21tYW5kOjpJbmRlbnQpKS5hcHBseSgpOworICAgIGFwcGx5Q29tbWFuZChu
ZXcgSW5kZW50T3V0ZGVudENvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIEluZGVudE91dGRlbnRD
b21tYW5kOjpJbmRlbnQpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjSW5zZXJ0
TGluZUJyZWFrKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcg
JnZhbHVlKQorYm9vbCBleGVjSW5zZXJ0TGluZUJyZWFrKEZyYW1lKiBmcmFtZSwgYm9vbCB1c2Vy
SW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewogICAgIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydExpbmVCcmVhayhmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgZXhlY0luc2VydFBhcmFncmFwaChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFj
ZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0luc2VydFBhcmFncmFwaChGcmFtZSog
ZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKICAgICBU
eXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoZnJhbWUtPmRvY3VtZW50KCkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNJbnNlcnROZXdsaW5lSW5RdW90ZWRD
b250ZW50KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZh
bHVlKQorYm9vbCBleGVjSW5zZXJ0TmV3bGluZUluUXVvdGVkQ29udGVudChGcmFtZSogZnJhbWUs
IGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKICAgICBUeXBpbmdD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoZnJhbWUtPmRv
Y3VtZW50KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNJbnNlcnRUZXh0KEZy
YW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9v
bCBleGVjSW5zZXJ0VGV4dChGcmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKIHsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGZyYW1lLT5k
b2N1bWVudCgpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0luc2Vy
dFVub3JkZXJlZExpc3QoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0
cmluZyAmdmFsdWUpCitib29sIGV4ZWNJbnNlcnRVbm9yZGVyZWRMaXN0KEZyYW1lKiBmcmFtZSwg
Ym9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewotICAgIEVkaXRDb21t
YW5kUHRyKG5ldyBJbnNlcnRMaXN0Q29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgSW5zZXJ0TGlz
dENvbW1hbmQ6OlVub3JkZXJlZExpc3RUeXBlLCB2YWx1ZSkpLmFwcGx5KCk7CisgICAgYXBwbHlD
b21tYW5kKG5ldyBJbnNlcnRMaXN0Q29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgSW5zZXJ0TGlz
dENvbW1hbmQ6OlVub3JkZXJlZExpc3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgZXhlY0luc2VydE9yZGVyZWRMaXN0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJm
YWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjSW5zZXJ0T3JkZXJlZExpc3QoRnJh
bWUqIGZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7Ci0g
ICAgRWRpdENvbW1hbmRQdHIobmV3IEluc2VydExpc3RDb21tYW5kKGZyYW1lLT5kb2N1bWVudCgp
LCBJbnNlcnRMaXN0Q29tbWFuZDo6T3JkZXJlZExpc3RUeXBlLCB2YWx1ZSkpLmFwcGx5KCk7Cisg
ICAgYXBwbHlDb21tYW5kKG5ldyBJbnNlcnRMaXN0Q29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwg
SW5zZXJ0TGlzdENvbW1hbmQ6Ok9yZGVyZWRMaXN0LCB2YWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIGV4ZWNJdGFsaWMoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2Us
IGNvbnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNJdGFsaWMoRnJhbWUqIGZyYW1lLCBib29s
IHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7Ci0gICAgYm9vbCBpc0l0YWxp
YyA9IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsICBDU1NfUFJPUF9GT05UX1NUWUxFLCAi
aXRhbGljIik7Ci0gICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX0ZP
TlRfU1RZTEUsIGlzSXRhbGljID8gIm5vcm1hbCIgOiAiaXRhbGljIik7CisgICAgYm9vbCBpc0l0
YWxpYyA9IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsIENTU19QUk9QX0ZPTlRfU1RZTEUs
ICJpdGFsaWMiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9G
T05UX1NUWUxFLCBpc0l0YWxpYyA/ICJub3JtYWwiIDogIml0YWxpYyIpOwogfQogCi1ib29sIGV4
ZWNKdXN0aWZ5Q2VudGVyKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBT
dHJpbmcgJnZhbHVlKQorYm9vbCBleGVjSnVzdGlmeUNlbnRlcihGcmFtZSogZnJhbWUsIGJvb2wg
dXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY1N0
eWxlQ2hhbmdlKGZyYW1lLCAgQ1NTX1BST1BfVEVYVF9BTElHTiwgImNlbnRlciIpOworICAgIHJl
dHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIENTU19QUk9QX1RFWFRfQUxJR04sICJjZW50ZXIi
KTsKIH0KIAotYm9vbCBleGVjSnVzdGlmeUZ1bGwoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRl
cmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNKdXN0aWZ5RnVsbChGcmFtZSog
ZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCAgQ1NTX1BST1BfVEVYVF9BTElHTiwgImp1c3Rp
ZnkiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9URVhUX0FM
SUdOLCAianVzdGlmeSIpOwogfQogCi1ib29sIGV4ZWNKdXN0aWZ5TGVmdChGcmFtZSAqZnJhbWUs
IGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0p1c3Rp
ZnlMZWZ0KEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZh
bHVlKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9URVhU
X0FMSUdOLCAibGVmdCIpOworICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIENTU19Q
Uk9QX1RFWFRfQUxJR04sICJsZWZ0Iik7CiB9CiAKLWJvb2wgZXhlY0p1c3RpZnlSaWdodChGcmFt
ZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wg
ZXhlY0p1c3RpZnlSaWdodChGcmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCAgQ1NT
X1BST1BfVEVYVF9BTElHTiwgInJpZ2h0Iik7CisgICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShm
cmFtZSwgQ1NTX1BST1BfVEVYVF9BTElHTiwgInJpZ2h0Iik7CiB9CiAKLWJvb2wgZXhlY091dGRl
bnQoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUp
Citib29sIGV4ZWNPdXRkZW50KEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25z
dCBTdHJpbmcgJnZhbHVlKQogewotICAgIEVkaXRDb21tYW5kUHRyKG5ldyBJbmRlbnRPdXRkZW50
Q29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6Ok91dGRlbnQp
KS5hcHBseSgpOworICAgIGFwcGx5Q29tbWFuZChuZXcgSW5kZW50T3V0ZGVudENvbW1hbmQoZnJh
bWUtPmRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpPdXRkZW50KSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY1Bhc3RlKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50
ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjUGFzdGUoRnJhbWUqIGZyYW1l
LCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7CiAgICAgZnJhbWUt
PnBhc3RlRnJvbVBhc3RlYm9hcmQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVj
UGFzdGVBbmRNYXRjaFN0eWxlKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25z
dCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjUGFzdGVBbmRNYXRjaFN0eWxlKEZyYW1lKiBmcmFt
ZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewogICAgIGZyYW1l
LT5wYXN0ZUFuZE1hdGNoU3R5bGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVj
UHJpbnQoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFs
dWUpCitib29sIGV4ZWNQcmludChGcmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29u
c3QgU3RyaW5nICZ2YWx1ZSkKIHsKICAgICBmcmFtZS0+cHJpbnQoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBleGVjUmVkbyhGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwg
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY1JlZG8oRnJhbWUqIGZyYW1lLCBib29sIHVz
ZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7CiAgICAgZnJhbWUtPnJlZG8oKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxNSw1OCArNDExLDU5IEBAIGJvb2wgZXhlY1JlZG8oRnJh
bWUgKmZyYW1lLCBib29sIHVzZXJJbnQKIAogYm9vbCBleGVjUmVtb3ZlRm9ybWF0KEZyYW1lKiBm
cmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQo
ZnJhbWUtPnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLnRv
U3RyaW5nKCkpOwotICAgIEVkaXRDb21tYW5kUHRyKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZChmcmFtZS0+ZG9jdW1lbnQoKSwgZnJhZ21lbnQuZ2V0KCksIGZhbHNlLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpKS5hcHBseSgpOworICAgIGFwcGx5Q29tbWFu
ZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoCisgICAgICAgIGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoZnJhbWUtPnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKSwgZnJhbWUtPnNlbGVjdGlv
bigpLnRvU3RyaW5nKCkpLAorICAgICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgRWRp
dEFjdGlvblVuc3BlY2lmaWVkKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY1Nl
bGVjdEFsbChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2
YWx1ZSkKK2Jvb2wgZXhlY1NlbGVjdEFsbChGcmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVyZmFj
ZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKICAgICBmcmFtZS0+c2VsZWN0QWxsKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY1N0cmlrZXRocm91Z2goRnJhbWUgKmZyYW1lLCBi
b29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNTdHJpa2V0
aHJvdWdoKEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZh
bHVlKQogewotICAgIGJvb2wgaXNTdHJpa2V0aHJvdWdoID0gc2VsZWN0aW9uU3RhcnRIYXNTdHls
ZShmcmFtZSwgIENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsICJs
aW5lLXRocm91Z2giKTsKLSAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCAgQ1NTX1BS
T1BfX1dFQktJVF9URVhUX0RFQ09SQVRJT05TX0lOX0VGRkVDVCwgaXNTdHJpa2V0aHJvdWdoID8g
Im5vbmUiIDogImxpbmUtdGhyb3VnaCIpOworICAgIGJvb2wgaXNTdHJpa2V0aHJvdWdoID0gc2Vs
ZWN0aW9uU3RhcnRIYXNTdHlsZShmcmFtZSwgQ1NTX1BST1BfX1dFQktJVF9URVhUX0RFQ09SQVRJ
T05TX0lOX0VGRkVDVCwgImxpbmUtdGhyb3VnaCIpOworICAgIHJldHVybiBleGVjU3R5bGVDaGFu
Z2UoZnJhbWUsIENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsIGlz
U3RyaWtldGhyb3VnaCA/ICJub25lIiA6ICJsaW5lLXRocm91Z2giKTsKIH0KIAotYm9vbCBleGVj
U3Vic2NyaXB0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcg
JnZhbHVlKQorYm9vbCBleGVjU3Vic2NyaXB0KEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJm
YWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2Uo
ZnJhbWUsICBDU1NfUFJPUF9WRVJUSUNBTF9BTElHTiwgInN1YiIpOworICAgIHJldHVybiBleGVj
U3R5bGVDaGFuZ2UoZnJhbWUsIENTU19QUk9QX1ZFUlRJQ0FMX0FMSUdOLCAic3ViIik7CiB9CiAK
LWJvb2wgZXhlY1N1cGVyc2NyaXB0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBj
b25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjU3VwZXJzY3JpcHQoRnJhbWUqIGZyYW1lLCBi
b29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGV4
ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX1ZFUlRJQ0FMX0FMSUdOLCAic3VwZXIiKTsK
KyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9WRVJUSUNBTF9BTElH
TiwgInN1cGVyIik7CiB9CiAKLWJvb2wgZXhlY1RyYW5zcG9zZShGcmFtZSAqZnJhbWUsIGJvb2wg
dXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY1RyYW5zcG9zZShG
cmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsK
ICAgICBmcmFtZS0+dHJhbnNwb3NlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhl
Y1VuZGVybGluZShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKK2Jvb2wgZXhlY1VuZGVybGluZShGcmFtZSogZnJhbWUsIGJvb2wgdXNlckludGVy
ZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBib29sIGlzVW5kZXJsaW5lZCA9IHNl
bGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfREVDT1JB
VElPTlNfSU5fRUZGRUNULCAidW5kZXJsaW5lIik7Ci0gICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5n
ZShmcmFtZSwgIENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsIGlz
VW5kZXJsaW5lZCA/ICJub25lIiA6ICJ1bmRlcmxpbmUiKTsKKyAgICBib29sIGlzVW5kZXJsaW5l
ZCA9IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsIENTU19QUk9QX19XRUJLSVRfVEVYVF9E
RUNPUkFUSU9OU19JTl9FRkZFQ1QsICJ1bmRlcmxpbmUiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxl
Q2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfREVDT1JBVElPTlNfSU5fRUZGRUNU
LCBpc1VuZGVybGluZWQgPyAibm9uZSIgOiAidW5kZXJsaW5lIik7CiB9CiAKLWJvb2wgZXhlY1Vu
ZG8oRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUp
Citib29sIGV4ZWNVbmRvKEZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBT
dHJpbmcgJnZhbHVlKQogewogICAgIGZyYW1lLT51bmRvKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgZXhlY1VubGluayhGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29u
c3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY1VubGluayhGcmFtZSogZnJhbWUsIGJvb2wgdXNl
ckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBFZGl0Q29tbWFuZFB0cihu
ZXcgVW5saW5rQ29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSkpLmFwcGx5KCk7CisgICAgYXBwbHlD
b21tYW5kKG5ldyBVbmxpbmtDb21tYW5kKGZyYW1lLT5kb2N1bWVudCgpKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgZXhlY1Vuc2VsZWN0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50
ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjVW5zZWxlY3QoRnJhbWUqIGZy
YW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiB7CiAgICAgLy8g
RklYTUU6IDY0OTggU2hvdWxkIGp1c3QgYmUgYWJsZSB0byBjYWxsIG1fZnJhbWUtPnNlbGVjdGlv
bigpLmNsZWFyKCkKICAgICBmcmFtZS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIo
KSk7CkBAIC00ODMsNjIgKzQ4MCw2MiBAQCBib29sIGV4ZWNVbnNlbGVjdChGcmFtZSAqZnJhbWUs
IGJvb2wgdXNlCiAvLyAgICAgU3VwcG9ydGVkID0gVGhlIGNvbW1hbmQgaXMgc3VwcG9ydGVkIGJ5
IHRoaXMgb2JqZWN0LgogLy8gICAgIEVuYWJsZWQgPSAgIFRoZSBjb21tYW5kIGlzIGF2YWlsYWJs
ZSBhbmQgZW5hYmxlZC4KIAotYm9vbCBlbmFibGVkKEZyYW1lICpmcmFtZSkKK2Jvb2wgZW5hYmxl
ZChGcmFtZSopCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZW5hYmxlZEFueUNhcmV0
KEZyYW1lICpmcmFtZSkKK2Jvb2wgZW5hYmxlZEFueUNhcmV0KEZyYW1lKiBmcmFtZSkKIHsKICAg
ICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBmcmFtZS0+c2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAotYm9vbCBlbmFibGVkQW55U2VsZWN0aW9uKEZy
YW1lICpmcmFtZSkKK2Jvb2wgZW5hYmxlZEFueVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiB7CiAg
ICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpOwogfQogCi1ib29s
IGVuYWJsZWRBbnlFZGl0YWJsZVNlbGVjdGlvbihGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRB
bnlFZGl0YWJsZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIGZyYW1lLT5z
ZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCi1ib29sIGVuYWJsZWRBbnlSaWNobHlFZGl0YWJsZVNlbGVjdGlv
bihGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRBbnlSaWNobHlFZGl0YWJsZVNlbGVjdGlvbihG
cmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NhcmV0T3JS
YW5nZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwog
fQogCi1ib29sIGVuYWJsZWRQYXN0ZShGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRQYXN0ZShG
cmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIHN1cHBvcnRzUGFzdGVDb21tYW5kICYmIGZyYW1l
LT5jYW5QYXN0ZSgpOwogfQogCi1ib29sIGVuYWJsZWRQYXN0ZUFuZE1hdGNoU3R5bGUoRnJhbWUg
KmZyYW1lKQorYm9vbCBlbmFibGVkUGFzdGVBbmRNYXRjaFN0eWxlKEZyYW1lKiBmcmFtZSkKIHsK
ICAgICByZXR1cm4gc3VwcG9ydHNQYXN0ZUNvbW1hbmQgJiYgZnJhbWUtPmNhblBhc3RlKCk7CiB9
CiAKLWJvb2wgZW5hYmxlZEFueVJhbmdlU2VsZWN0aW9uKEZyYW1lICpmcmFtZSkKK2Jvb2wgZW5h
YmxlZEFueVJhbmdlU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gZnJhbWUt
PnNlbGVjdGlvbigpLmlzUmFuZ2UoKTsKIH0KIAotYm9vbCBlbmFibGVkQW55RWRpdGFibGVSYW5n
ZVNlbGVjdGlvbihGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRBbnlFZGl0YWJsZVJhbmdlU2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLmlz
UmFuZ2UoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAot
Ym9vbCBlbmFibGVkQW55UmljaGx5RWRpdGFibGVSYW5nZVNlbGVjdGlvbihGcmFtZSAqZnJhbWUp
Citib29sIGVuYWJsZWRBbnlSaWNobHlFZGl0YWJsZVJhbmdlU2VsZWN0aW9uKEZyYW1lKiBmcmFt
ZSkKIHsKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSAmJiBmcmFtZS0+
c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAotYm9vbCBlbmFibGVk
UmVkbyhGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRSZWRvKEZyYW1lKiBmcmFtZSkKIHsKICAg
ICByZXR1cm4gZnJhbWUtPmNhblJlZG8oKTsKIH0KIAotYm9vbCBlbmFibGVkVW5kbyhGcmFtZSAq
ZnJhbWUpCitib29sIGVuYWJsZWRVbmRvKEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gZnJh
bWUtPmNhblVuZG8oKTsKIH0KQEAgLTU2MCw0NCArNTU3LDQ0IEBAIGJvb2wgZW5hYmxlZFVuZG8o
RnJhbWUgKmZyYW1lKQogLy8gVGhlbiwgcXVlcnlDb21tYW5kSW5kZXRlcm0gc2hvdWxkIHJldHVy
biAibm8iIGluIHRoZSBjYXNlIHdoZXJlCiAvLyBhbGwgdGhlIHRleHQgaXMgZWl0aGVyIGFsbCBi
b2xkIG9yIG5vdC1ib2xkIGFuZCBhbmQgInllcyIgZm9yIHBhcnRpYWxseS1ib2xkIHRleHQuCiAK
LUZyYW1lOjpUcmlTdGF0ZSBzdGF0ZU5vbmUoRnJhbWUgKmZyYW1lKQorRnJhbWU6OlRyaVN0YXRl
IHN0YXRlTm9uZShGcmFtZSopCiB7CiAgICAgcmV0dXJuIEZyYW1lOjpmYWxzZVRyaVN0YXRlOwog
fQogCi1GcmFtZTo6VHJpU3RhdGUgc3RhdGVCb2xkKEZyYW1lICpmcmFtZSkKK0ZyYW1lOjpUcmlT
dGF0ZSBzdGF0ZUJvbGQoRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKGZy
YW1lLCAgQ1NTX1BST1BfRk9OVF9XRUlHSFQsICJib2xkIik7CisgICAgcmV0dXJuIHN0YXRlU3R5
bGUoZnJhbWUsIENTU19QUk9QX0ZPTlRfV0VJR0hULCAiYm9sZCIpOwogfQogCi1GcmFtZTo6VHJp
U3RhdGUgc3RhdGVJdGFsaWMoRnJhbWUgKmZyYW1lKQorRnJhbWU6OlRyaVN0YXRlIHN0YXRlSXRh
bGljKEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwgIENTU19Q
Uk9QX0ZPTlRfU1RZTEUsICJpdGFsaWMiKTsKKyAgICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwg
Q1NTX1BST1BfRk9OVF9TVFlMRSwgIml0YWxpYyIpOwogfQogCi1GcmFtZTo6VHJpU3RhdGUgc3Rh
dGVMaXN0KEZyYW1lICpmcmFtZSkKK0ZyYW1lOjpUcmlTdGF0ZSBzdGF0ZUxpc3QoRnJhbWUqIGZy
YW1lKQogewogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uTGlzdFN0YXRlKCk7CiB9CiAKLUZy
YW1lOjpUcmlTdGF0ZSBzdGF0ZVN0cmlrZXRocm91Z2goRnJhbWUgKmZyYW1lKQorRnJhbWU6OlRy
aVN0YXRlIHN0YXRlU3RyaWtldGhyb3VnaChGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIHN0
YXRlU3R5bGUoZnJhbWUsICBDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04sICJsaW5lLXRocm91Z2gi
KTsKKyAgICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwgQ1NTX1BST1BfVEVYVF9ERUNPUkFUSU9O
LCAibGluZS10aHJvdWdoIik7CiB9CiAKLUZyYW1lOjpUcmlTdGF0ZSBzdGF0ZVN1YnNjcmlwdChG
cmFtZSAqZnJhbWUpCitGcmFtZTo6VHJpU3RhdGUgc3RhdGVTdWJzY3JpcHQoRnJhbWUqIGZyYW1l
KQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfVkVSVElDQUxfQUxJ
R04sICJzdWIiKTsKKyAgICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwgQ1NTX1BST1BfVkVSVElD
QUxfQUxJR04sICJzdWIiKTsKIH0KIAotRnJhbWU6OlRyaVN0YXRlIHN0YXRlU3VwZXJzY3JpcHQo
RnJhbWUgKmZyYW1lKQorRnJhbWU6OlRyaVN0YXRlIHN0YXRlU3VwZXJzY3JpcHQoRnJhbWUqIGZy
YW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfVkVSVElDQUxf
QUxJR04sICJzdXBlciIpOworICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCBDU1NfUFJPUF9W
RVJUSUNBTF9BTElHTiwgInN1cGVyIik7CiB9CiAKLUZyYW1lOjpUcmlTdGF0ZSBzdGF0ZVVuZGVy
bGluZShGcmFtZSAqZnJhbWUpCitGcmFtZTo6VHJpU3RhdGUgc3RhdGVVbmRlcmxpbmUoRnJhbWUq
IGZyYW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfVEVYVF9E
RUNPUkFUSU9OLCAidW5kZXJsaW5lIik7CisgICAgcmV0dXJuIHN0YXRlU3R5bGUoZnJhbWUsIENT
U19QUk9QX1RFWFRfREVDT1JBVElPTiwgInVuZGVybGluZSIpOwogfQogCiAvLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTYwNSw0MSArNjAyLDQxIEBAIEZyYW1lOjpU
cmlTdGF0ZSBzdGF0ZVVuZGVybGluZShGcmFtZSAqZnIKIC8vIHF1ZXJ5Q29tbWFuZFZhbHVlIGlt
cGxlbWVudGF0aW9ucwogLy8KIAotU3RyaW5nIHZhbHVlTnVsbChGcmFtZSAqZnJhbWUpCitTdHJp
bmcgdmFsdWVOdWxsKEZyYW1lKikKIHsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmlu
ZyB2YWx1ZUJhY2tDb2xvcihGcmFtZSAqZnJhbWUpCitTdHJpbmcgdmFsdWVCYWNrQ29sb3IoRnJh
bWUqIGZyYW1lKQogewotICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfQkFD
S0dST1VORF9DT0xPUik7CisgICAgcmV0dXJuIHZhbHVlU3R5bGUoZnJhbWUsIENTU19QUk9QX0JB
Q0tHUk9VTkRfQ09MT1IpOwogfQogCi1TdHJpbmcgdmFsdWVGb250TmFtZShGcmFtZSAqZnJhbWUp
CitTdHJpbmcgdmFsdWVGb250TmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVl
U3R5bGUoZnJhbWUsICBDU1NfUFJPUF9GT05UX0ZBTUlMWSk7CisgICAgcmV0dXJuIHZhbHVlU3R5
bGUoZnJhbWUsIENTU19QUk9QX0ZPTlRfRkFNSUxZKTsKIH0KIAotU3RyaW5nIHZhbHVlRm9udFNp
emUoRnJhbWUgKmZyYW1lKQorU3RyaW5nIHZhbHVlRm9udFNpemUoRnJhbWUqIGZyYW1lKQogewot
ICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfRk9OVF9TSVpFKTsKKyAgICBy
ZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgQ1NTX1BST1BfRk9OVF9TSVpFKTsKIH0KIAotU3RyaW5n
IHZhbHVlRm9udFNpemVEZWx0YShGcmFtZSAqZnJhbWUpCitTdHJpbmcgdmFsdWVGb250U2l6ZURl
bHRhKEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgIENTU19Q
Uk9QX19XRUJLSVRfRk9OVF9TSVpFX0RFTFRBKTsKKyAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFt
ZSwgQ1NTX1BST1BfX1dFQktJVF9GT05UX1NJWkVfREVMVEEpOwogfQogCi1TdHJpbmcgdmFsdWVG
b3JlQ29sb3IoRnJhbWUgKmZyYW1lKQorU3RyaW5nIHZhbHVlRm9yZUNvbG9yKEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgIENTU19QUk9QX0NPTE9SKTsKKyAg
ICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgQ1NTX1BST1BfQ09MT1IpOwogfQogCiAvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotQ29tbWFuZE1hcCAqY3JlYXRlQ29t
bWFuZERpY3Rpb25hcnkoKQorQ29tbWFuZE1hcCogY3JlYXRlQ29tbWFuZERpY3Rpb25hcnkoKQog
ewotICAgIHN0cnVjdCBFZGl0b3JDb21tYW5kIHsgY29uc3QgY2hhciAqbmFtZTsgQ29tbWFuZElt
cCBpbXA7IH07CisgICAgc3RydWN0IEVkaXRvckNvbW1hbmQgeyBjb25zdCBjaGFyKiBuYW1lOyBD
b21tYW5kSW1wIGltcDsgfTsKIAogICAgIHN0YXRpYyBjb25zdCBFZGl0b3JDb21tYW5kIGNvbW1h
bmRzW10gPSB7CiAKQEAgLTczOSw3ICs3MzYsNyBAQCBDb21tYW5kTWFwICpjcmVhdGVDb21tYW5k
RGljdGlvbmFyeSgpCiAgICAgICAgIC8vIFVuYm9va21hcmsgKG5vdCBzdXBwb3J0ZWQpCiAgICAg
fTsKIAotICAgIENvbW1hbmRNYXAgKmNvbW1hbmRNYXAgPSBuZXcgQ29tbWFuZE1hcDsKKyAgICBD
b21tYW5kTWFwKiBjb21tYW5kTWFwID0gbmV3IENvbW1hbmRNYXA7CiAKICAgICBjb25zdCBpbnQg
bnVtQ29tbWFuZHMgPSBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBdKTsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbW1hbmRzOyArK2kpIHsKSW5kZXg6IGVkaXRpbmcv
SlNFZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0pTRWRpdG9yLmgJKHJldmlzaW9uIDE1
ODA3KQorKysgZWRpdGluZy9KU0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzNSArMjMs
MzEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYganNlZGl0aW5nX2hfXwotI2Rl
ZmluZSBqc2VkaXRpbmdfaF9fCisjaWZuZGVmIEpTRWRpdG9yX2gKKyNkZWZpbmUgSlNFZGl0b3Jf
aAogCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEZXByZWNhdGVkU3RyaW5nOwog
Y2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTdHJpbmc7CiAKLWNsYXNzIEpTRWRpdG9yIHsKLQorY2xh
c3MgSlNFZGl0b3IgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgSlNFZGl0b3IoRG9jdW1l
bnQgKmRvYykgOiBtX2RvYyhkb2MpIHsgfQorICAgIEpTRWRpdG9yKERvY3VtZW50KiBkb2N1bWVu
dCkgOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7IH0KIAotICAgIGJvb2wgZXhlY0NvbW1hbmQoY29u
c3QgU3RyaW5nICZjb21tYW5kLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFs
dWUpOwotICAgIGJvb2wgcXVlcnlDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcgJmNvbW1hbmQp
OwotICAgIGJvb2wgcXVlcnlDb21tYW5kSW5kZXRlcm0oY29uc3QgU3RyaW5nICZjb21tYW5kKTsK
LSAgICBib29sIHF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnN0IFN0cmluZyAmY29tbWFuZCk7Ci0gICAg
Ym9vbCBxdWVyeUNvbW1hbmRTdXBwb3J0ZWQoY29uc3QgU3RyaW5nICZjb21tYW5kKTsKLSAgICBT
dHJpbmcgcXVlcnlDb21tYW5kVmFsdWUoY29uc3QgU3RyaW5nICZjb21tYW5kKTsKKyAgICBib29s
IGV4ZWNDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCB1c2VySW50ZXJmYWNlLCBj
b25zdCBTdHJpbmcmIHBhcmFtZXRlcik7CisgICAgYm9vbCBxdWVyeUNvbW1hbmRFbmFibGVkKGNv
bnN0IFN0cmluZyYgY29tbWFuZCk7CisgICAgYm9vbCBxdWVyeUNvbW1hbmRJbmRldGVybShjb25z
dCBTdHJpbmcmIGNvbW1hbmQpOworICAgIGJvb2wgcXVlcnlDb21tYW5kU3RhdGUoY29uc3QgU3Ry
aW5nJiBjb21tYW5kKTsKKyAgICBib29sIHF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChjb25zdCBTdHJp
bmcmIGNvbW1hbmQpOworICAgIFN0cmluZyBxdWVyeUNvbW1hbmRWYWx1ZShjb25zdCBTdHJpbmcm
IGNvbW1hbmQpOwogCi0gICAgc3RhdGljIHZvaWQgc2V0U3VwcG9ydHNQYXN0ZUNvbW1hbmQoYm9v
bCBmbGFnPXRydWUpOworICAgIHN0YXRpYyB2b2lkIHNldFN1cHBvcnRzUGFzdGVDb21tYW5kKGJv
b2wgZmxhZyA9IHRydWUpOwogCiBwcml2YXRlOgotICAgIEpTRWRpdG9yKGNvbnN0IEpTRWRpdG9y
ICYpOwotICAgIEpTRWRpdG9yICZvcGVyYXRvcj0oY29uc3QgSlNFZGl0b3IgJik7Ci0KLSAgICBE
b2N1bWVudCAqbV9kb2M7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiB9OwogCiB9IC8vIGVu
ZCBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDE1ODA3KQorKysgZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Kb2luVGV4
dE5vZGVzQ29tbWFuZDo6Sm9pblRleHROb2Rlc0NvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBU
ZXh0ICp0ZXh0MSwgVGV4dCAqdGV4dDIpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1f
dGV4dDEodGV4dDEpLCBtX3RleHQyKHRleHQyKQorSm9pblRleHROb2Rlc0NvbW1hbmQ6OkpvaW5U
ZXh0Tm9kZXNDb21tYW5kKFRleHQgKnRleHQxLCBUZXh0ICp0ZXh0MikKKyAgICA6IEVkaXRDb21t
YW5kKHRleHQxLT5kb2N1bWVudCgpKSwgbV90ZXh0MSh0ZXh0MSksIG1fdGV4dDIodGV4dDIpCiB7
CiAgICAgQVNTRVJUKG1fdGV4dDEpOwogICAgIEFTU0VSVChtX3RleHQyKTsKSW5kZXg6IGVkaXRp
bmcvSm9pblRleHROb2Rlc0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0pvaW5UZXh0
Tm9kZXNDb21tYW5kLmgJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9Kb2luVGV4dE5vZGVz
Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjggKzIz
LDI1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIF9fam9pbl90ZXh0X25vZGVz
X2NvbW1hbmRfaF9fCi0jZGVmaW5lIF9fam9pbl90ZXh0X25vZGVzX2NvbW1hbmRfaF9fCisjaWZu
ZGVmIGpvaW5fdGV4dF9ub2Rlc19jb21tYW5kX2hfXworI2RlZmluZSBqb2luX3RleHRfbm9kZXNf
Y29tbWFuZF9oX18KIAogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBjbGFzcyBUZXh0OwotfQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBU
ZXh0OwogCiBjbGFzcyBKb2luVGV4dE5vZGVzQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAog
ewogcHVibGljOgotICAgIEpvaW5UZXh0Tm9kZXNDb21tYW5kKERvY3VtZW50ICosIFRleHQgKiwg
VGV4dCAqKTsKLSAgICB2aXJ0dWFsIH5Kb2luVGV4dE5vZGVzQ29tbWFuZCgpIHsgfQorICAgIEpv
aW5UZXh0Tm9kZXNDb21tYW5kKFRleHQqLCBUZXh0Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9B
cHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIFRleHQgKmZpcnN0
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDEuZ2V0KCk7IH0KLSAgICBUZXh0ICpzZWNvbmRO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Mi5nZXQoKTsgfQorICAgIFRleHQqIGZpcnN0Tm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDEuZ2V0KCk7IH0KKyAgICBUZXh0KiBzZWNvbmROb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Mi5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIFJlZlB0
cjxUZXh0PiBtX3RleHQxOwpAQCAtNTQsNCArNTEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX2pvaW5fdGV4dF9ub2Rlc19jb21tYW5kX2hfXwor
I2VuZGlmIC8vIGpvaW5fdGV4dF9ub2Rlc19jb21tYW5kX2hfXwpJbmRleDogZWRpdGluZy9NZXJn
ZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9NZXJn
ZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGlu
Zy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZDo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoRG9jdW1lbnQgKmRvY3Vt
ZW50LCBFbGVtZW50ICpmaXJzdCwgRWxlbWVudCAqc2Vjb25kKQotICAgIDogRWRpdENvbW1hbmQo
ZG9jdW1lbnQpLCBtX2VsZW1lbnQxKGZpcnN0KSwgbV9lbGVtZW50MihzZWNvbmQpCitNZXJnZUlk
ZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoRWxl
bWVudCogZmlyc3QsIEVsZW1lbnQqIHNlY29uZCkKKyAgICA6IEVkaXRDb21tYW5kKGZpcnN0LT5k
b2N1bWVudCgpKSwgbV9lbGVtZW50MShmaXJzdCksIG1fZWxlbWVudDIoc2Vjb25kKQogewogICAg
IEFTU0VSVChtX2VsZW1lbnQxKTsKICAgICBBU1NFUlQobV9lbGVtZW50Mik7CkluZGV4OiBlZGl0
aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGlu
Zy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oCShyZXZpc2lvbiAxNTgwNykKKysrIGVk
aXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE4ICsyMywxNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAotI2lmbmRlZiBfX21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kX2hfXwotI2RlZmlu
ZSBfX21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kX2hfXworI2lmbmRlZiBtZXJnZV9p
ZGVudGljYWxfZWxlbWVudHNfY29tbWFuZF9oX18KKyNkZWZpbmUgbWVyZ2VfaWRlbnRpY2FsX2Vs
ZW1lbnRzX2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kIDogcHVi
bGljIEVkaXRDb21tYW5kCi17CitjbGFzcyBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZCA6
IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgTWVyZ2VJZGVudGljYWxFbGVtZW50
c0NvbW1hbmQoRG9jdW1lbnQgKiwgRWxlbWVudCAqZmlyc3QsIEVsZW1lbnQgKnNlY29uZCk7Ci0g
ICAgdmlydHVhbCB+TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoKSB7IH0KKyAgICBNZXJn
ZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChFbGVtZW50KiwgRWxlbWVudCopOwogCiAgICAgdmly
dHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CkBAIC00
Nyw0ICs0NSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIF9fbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmRfaF9fCisjZW5kaWYgLy8gbWVy
Z2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmRfaF9fCkluZGV4OiBlZGl0aW5nL01vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9Nb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuY3BwCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBib29sIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OnByCiB9CiAKIC8vIFRoaXMgbmVlZHMgdG8g
YmUgc3RhdGljIHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkgY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWwgYW5kIGNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCi1zdGF0aWMgYm9vbCBnZXRT
dGFydEVuZExpc3RDaGlsZHJlbihjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSoqIHN0
YXJ0LCBOb2RlKiogZW5kKQorc3RhdGljIGJvb2wgZ2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4oY29u
c3QgU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE5vZGUqJiBzdGFydCwgTm9kZSomIGVuZCkKIHsKICAg
ICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04Myw4
ICs4Myw4IEBAIHN0YXRpYyBib29sIGdldFN0YXJ0RW5kTGlzdENoaWxkcmVuKGNvbnMKICAgICAg
ICAgICAgIGVuZExpc3RDaGlsZCA9IHItPmVsZW1lbnQoKTsKICAgICB9CiAKLSAgICAqc3RhcnQg
PSBzdGFydExpc3RDaGlsZDsKLSAgICAqZW5kID0gZW5kTGlzdENoaWxkOworICAgIHN0YXJ0ID0g
c3RhcnRMaXN0Q2hpbGQ7CisgICAgZW5kID0gZW5kTGlzdENoaWxkOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xMzQsMjcgKzEzNCwyMSBAQCB2b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQ6OmFwCiAgICAgfQogfQogCi1JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1h
bmQ6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQs
IEVMaXN0VHlwZSBsaXN0VHlwZSkKK0luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6
SW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgVHlw
ZSBsaXN0VHlwZSkKICAgICA6IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoZG9jdW1l
bnQpCisgICAgLCBtX2xpc3RUeXBlKGxpc3RUeXBlKQogewotICAgIG1fbGlzdFR5cGUgPSBsaXN0
VHlwZTsKLSAgICBtX2xpc3RFbGVtZW50ID0gMDsKLX0KLQotTm9kZSogSW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxDb21tYW5kOjpsaXN0RWxlbWVudCgpCi17Ci0gICAgcmV0dXJuIG1fbGlzdEVs
ZW1lbnQ7CiB9CiAKIC8vIFRoaXMgbmVlZHMgdG8gYmUgc3RhdGljIHNvIGl0IGNhbiBiZSBjYWxs
ZWQgYnkgY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXN0YXRpYyBib29sIGNhbkluY3Jl
YXNlTGlzdExldmVsKGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOb2RlKiogc3RhcnQsIE5v
ZGUqKiBlbmQpCitzdGF0aWMgYm9vbCBjYW5JbmNyZWFzZUxpc3RMZXZlbChjb25zdCBTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgTm9kZSomIHN0YXJ0LCBOb2RlKiYgZW5kKQogewogICAgIGlmICghZ2V0
U3RhcnRFbmRMaXN0Q2hpbGRyZW4oc2VsZWN0aW9uLCBzdGFydCwgZW5kKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBzdGFydCBtdXN0IG5vdCBiZSB0aGUgZmlyc3Qg
Y2hpbGQgKGJlY2F1c2UgeW91IG5lZWQgYSBwcmlvciBvbmUKICAgICAvLyB0byBpbmNyZWFzZSBy
ZWxhdGl2ZSB0bykKLSAgICBpZiAoISgqc3RhcnQpLT5yZW5kZXJlcigpLT5wcmV2aW91c1NpYmxp
bmcoKSkKKyAgICBpZiAoIXN0YXJ0LT5yZW5kZXJlcigpLT5wcmV2aW91c1NpYmxpbmcoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTc4LDcgKzE3
Miw3IEBAIHZvaWQgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjoKIHsKICAgICBO
b2RlKiBzdGFydExpc3RDaGlsZDsKICAgICBOb2RlKiBlbmRMaXN0Q2hpbGQ7Ci0gICAgaWYgKCFj
YW5JbmNyZWFzZUxpc3RMZXZlbChlbmRpbmdTZWxlY3Rpb24oKSwgJnN0YXJ0TGlzdENoaWxkLCAm
ZW5kTGlzdENoaWxkKSkKKyAgICBpZiAoIWNhbkluY3JlYXNlTGlzdExldmVsKGVuZGluZ1NlbGVj
dGlvbigpLCBzdGFydExpc3RDaGlsZCwgZW5kTGlzdENoaWxkKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgTm9kZSogcHJldmlvdXNJdGVtID0gc3RhcnRMaXN0Q2hpbGQtPnJlbmRlcmVyKCktPnBy
ZXZpb3VzU2libGluZygpLT5lbGVtZW50KCk7CkBAIC0yMTAsMjkgKzIwNCwzMCBAQCBib29sIElu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6CiB7CiAgICAgTm9kZSogc3RhcnRMaXN0
Q2hpbGQ7CiAgICAgTm9kZSogZW5kTGlzdENoaWxkOwotICAgIAotICAgIHJldHVybiBjYW5JbmNy
ZWFzZUxpc3RMZXZlbChkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCks
ICZzdGFydExpc3RDaGlsZCwgJmVuZExpc3RDaGlsZCk7CisgICAgcmV0dXJuIGNhbkluY3JlYXNl
TGlzdExldmVsKGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3Rh
cnRMaXN0Q2hpbGQsIGVuZExpc3RDaGlsZCk7CiB9CiAKLXN0YXRpYyBOb2RlKiBpbmNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbFdpdGhUeXBlKERvY3VtZW50KiBkb2N1bWVudCwgRUxpc3RUeXBlIGxp
c3RUeXBlKQorTm9kZSogSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbFdpdGhUeXBlKERvY3VtZW50KiBkb2N1bWVudCwgVHlwZSBsaXN0
VHlwZSkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIEFTU0VSVChkb2N1bWVudC0+ZnJh
bWUoKSk7Ci0gICAgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kKiBtb2RDb21tYW5k
ID0gbmV3IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZChkb2N1bWVudCwgbGlzdFR5
cGUpOwotICAgIEVkaXRDb21tYW5kUHRyIGNtZChtb2RDb21tYW5kKTsKLSAgICBjbWQuYXBwbHko
KTsKLSAgICByZXR1cm4gbW9kQ29tbWFuZC0+bGlzdEVsZW1lbnQoKTsKKyAgICBSZWZQdHI8SW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kPiBtb2RDb21tYW5kID0gbmV3IEluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZChkb2N1bWVudCwgbGlzdFR5cGUpOworICAgIG1vZENv
bW1hbmQtPmFwcGx5KCk7CisgICAgcmV0dXJuIG1vZENvbW1hbmQtPm1fbGlzdEVsZW1lbnQuZ2V0
KCk7CiB9CiAKLU5vZGUqIEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWwoRG9jdW1lbnQqIGRvY3VtZW50KSB7CitOb2RlKiBJbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKICAgICByZXR1cm4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxXaXRoVHlwZShkb2N1bWVudCwgSW5oZXJpdGVkTGlzdFR5cGUpOwogfQogCi1Ob2RlKiBJbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
T3JkZXJlZChEb2N1bWVudCogZG9jdW1lbnQpIHsKK05vZGUqIEluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKERvY3VtZW50
KiBkb2N1bWVudCkKK3sKICAgICByZXR1cm4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxXaXRo
VHlwZShkb2N1bWVudCwgT3JkZXJlZExpc3QpOwogfQogCi1Ob2RlKiBJbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKERv
Y3VtZW50KiBkb2N1bWVudCkgeworTm9kZSogSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21t
YW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZChEb2N1bWVudCogZG9jdW1l
bnQpCit7CiAgICAgcmV0dXJuIGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsV2l0aFR5cGUoZG9j
dW1lbnQsIFVub3JkZXJlZExpc3QpOwogfQogCkBAIC0yNDIsMTMgKzIzNywxMyBAQCBEZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OkRlY3JlCiB9CiAKIC8vIFRoaXMgbmVlZHMgdG8g
YmUgc3RhdGljIHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkgY2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWwKLXN0YXRpYyBib29sIGNhbkRlY3JlYXNlTGlzdExldmVsKGNvbnN0IFNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBOb2RlKiogc3RhcnQsIE5vZGUqKiBlbmQpCitzdGF0aWMgYm9vbCBjYW5EZWNy
ZWFzZUxpc3RMZXZlbChjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSomIHN0YXJ0LCBO
b2RlKiYgZW5kKQogewogICAgIGlmICghZ2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4oc2VsZWN0aW9u
LCBzdGFydCwgZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIHRoZXJl
IG11c3QgYmUgYSBkZXN0aW5hdGlvbiBsaXN0IHRvIG1vdmUgdGhlIGl0ZW1zIHRvCi0gICAgaWYg
KCFpc0xpc3RFbGVtZW50KCgqc3RhcnQpLT5wYXJlbnROb2RlKCktPnBhcmVudE5vZGUoKSkpCisg
ICAgaWYgKCFpc0xpc3RFbGVtZW50KHN0YXJ0LT5wYXJlbnROb2RlKCktPnBhcmVudE5vZGUoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0y
NTgsNyArMjUzLDcgQEAgdm9pZCBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Ogog
ewogICAgIE5vZGUqIHN0YXJ0TGlzdENoaWxkOwogICAgIE5vZGUqIGVuZExpc3RDaGlsZDsKLSAg
ICBpZiAoIWNhbkRlY3JlYXNlTGlzdExldmVsKGVuZGluZ1NlbGVjdGlvbigpLCAmc3RhcnRMaXN0
Q2hpbGQsICZlbmRMaXN0Q2hpbGQpKQorICAgIGlmICghY2FuRGVjcmVhc2VMaXN0TGV2ZWwoZW5k
aW5nU2VsZWN0aW9uKCksIHN0YXJ0TGlzdENoaWxkLCBlbmRMaXN0Q2hpbGQpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBOb2RlKiBwcmV2aW91c0l0ZW0gPSBzdGFydExpc3RDaGlsZC0+cmVuZGVy
ZXIoKS0+cHJldmlvdXNTaWJsaW5nKCkgPyBzdGFydExpc3RDaGlsZC0+cmVuZGVyZXIoKS0+cHJl
dmlvdXNTaWJsaW5nKCktPmVsZW1lbnQoKSA6IDA7CkBAIC0yODUsMTcgKzI4MCwxNCBAQCBib29s
IERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6CiB7CiAgICAgTm9kZSogc3RhcnRM
aXN0Q2hpbGQ7CiAgICAgTm9kZSogZW5kTGlzdENoaWxkOwotICAgIAotICAgIHJldHVybiBjYW5E
ZWNyZWFzZUxpc3RMZXZlbChkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksICZzdGFydExpc3RDaGlsZCwgJmVuZExpc3RDaGlsZCk7CisgICAgcmV0dXJuIGNhbkRlY3Jl
YXNlTGlzdExldmVsKGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwg
c3RhcnRMaXN0Q2hpbGQsIGVuZExpc3RDaGlsZCk7CiB9CiAKIHZvaWQgRGVjcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxDb21tYW5kOjpkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbChEb2N1bWVudCog
ZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICBBU1NFUlQoZG9jdW1lbnQt
PmZyYW1lKCkpOwotICAgIERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCogbW9kQ29t
bWFuZCA9IG5ldyBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoZG9jdW1lbnQpOwot
ICAgIEVkaXRDb21tYW5kUHRyIGNtZChtb2RDb21tYW5kKTsKLSAgICBjbWQuYXBwbHkoKTsKKyAg
ICBhcHBseUNvbW1hbmQobmV3IERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZChkb2N1
bWVudCkpOwogfQogCiB9CkluZGV4OiBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgJKHJldmlz
aW9uIDE1ODA3KQorKysgZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNjIgKzIzLDU4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIF9fbW9kaWZ5X3NlbGVjdGlvbl9saXN0X2xldmVsX2hfXwotI2RlZmluZSBfX21vZGlmeV9z
ZWxlY3Rpb25fbGlzdF9sZXZlbF9oX18KKyNpZm5kZWYgbW9kaWZ5X3NlbGVjdGlvbl9saXN0X2xl
dmVsX2hfXworI2RlZmluZSBtb2RpZnlfc2VsZWN0aW9uX2xpc3RfbGV2ZWxfaF9fCiAKICNpbmNs
dWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQgcHJvdmlkZXMgZnVuY3Rpb25zIHVzZWZ1
bCBmb3IgYm90aCBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBsaXN0Ci0vLyBsZXZlbC4g
IFNvLCBpdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQgYW5kIERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZC4KKy8vIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbENvbW1hbmQgcHJvdmlkZXMgZnVuY3Rpb25zIHVzZWZ1bCBmb3IgYm90
aCBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBsaXN0IGxldmVsLgorLy8gSXQgaXMgdGhl
IGJhc2UgY2xhc3Mgb2YgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIGFuZCBEZWNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQuCiAvLyBJdCBpcyBub3QgdXNlZCBvbiBpdHMg
b3duLgotY2xhc3MgTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBDb21w
b3NpdGVFZGl0Q29tbWFuZAotewotcHVibGljOgotICAgIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7Ci0gICAgCitjbGFzcyBNb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsK
IHByb3RlY3RlZDoKKyAgICBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kKERvY3VtZW50
Kik7CisgICAgCiAgICAgdm9pZCBhcHBlbmRTaWJsaW5nTm9kZVJhbmdlKE5vZGUqIHN0YXJ0Tm9k
ZSwgTm9kZSogZW5kTm9kZSwgTm9kZSogbmV3UGFyZW50KTsKICAgICB2b2lkIGluc2VydFNpYmxp
bmdOb2RlUmFuZ2VCZWZvcmUoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2RlLCBOb2RlKiBy
ZWZOb2RlKTsKICAgICB2b2lkIGluc2VydFNpYmxpbmdOb2RlUmFuZ2VBZnRlcihOb2RlKiBzdGFy
dE5vZGUsIE5vZGUqIGVuZE5vZGUsIE5vZGUqIHJlZk5vZGUpOwotfTsKIAotLy8gSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIG1vdmVzIHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW1zIG9u
ZSBsZXZlbCBkZWVwZXIKLXR5cGVkZWYgZW51bSBFTGlzdFR5cGUgeyBJbmhlcml0ZWRMaXN0VHlw
ZSwgT3JkZXJlZExpc3QsIFVub3JkZXJlZExpc3QgfTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCBi
b29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7ICAgIAorfTsKIAotY2xhc3MgSW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIDogcHVibGljIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbENvbW1hbmQKLXsKKy8vIEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCBtb3Zl
cyB0aGUgc2VsZWN0ZWQgbGlzdCBpdGVtcyBvbmUgbGV2ZWwgZGVlcGVyLgorY2xhc3MgSW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIDogcHVibGljIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbENvbW1hbmQgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhbkluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKERvY3VtZW50Kik7CiAgICAgc3RhdGljIE5vZGUqIGluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKERvY3VtZW50Kik7CiAgICAgc3RhdGljIE5vZGUqIGluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsT3JkZXJlZChEb2N1bWVudCopOwogICAgIHN0YXRpYyBOb2RlKiBpbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZChEb2N1bWVudCopOwogCi0gICAgSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgRUxpc3RUeXBlKTsK
LSAgICBOb2RlKiAgICAgICBsaXN0RWxlbWVudCgpOworcHJpdmF0ZToKKyAgICBlbnVtIFR5cGUg
eyBJbmhlcml0ZWRMaXN0VHlwZSwgT3JkZXJlZExpc3QsIFVub3JkZXJlZExpc3QgfTsKKyAgICBz
dGF0aWMgTm9kZSogaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxXaXRoVHlwZShEb2N1bWVudCos
IFR5cGUgbGlzdFR5cGUpOworCisgICAgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5k
KERvY3VtZW50KiwgVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAotcHJpdmF0
ZToKLSAgICBFTGlzdFR5cGUgICBtX2xpc3RUeXBlOwotICAgIE5vZGUqICAgICAgIG1fbGlzdEVs
ZW1lbnQ7CisgICAgVHlwZSBtX2xpc3RUeXBlOworICAgIFJlZlB0cjxOb2RlPiBtX2xpc3RFbGVt
ZW50OwogfTsKIAotLy8gRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIG1vdmVzIHRo
ZSBzZWxlY3RlZCBsaXN0IGl0ZW1zIG9uZSBsZXZlbCBzaGFsbG93ZXIKLWNsYXNzIERlY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWxDb21tYW5kCi17CisvLyBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQgbW92ZXMg
dGhlIHNlbGVjdGVkIGxpc3QgaXRlbXMgb25lIGxldmVsIHNoYWxsb3dlci4KK2NsYXNzIERlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWxDb21tYW5kIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW5EZWNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbChEb2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKERvY3VtZW50Kik7CiAKLSAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KTsKLQorcHJpdmF0ZToKKyAgICBEZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9B
cHBseSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19tb2Rp
Znlfc2VsZWN0aW9uX2xpc3RfbGV2ZWxfaF9fCisjZW5kaWYgLy8gbW9kaWZ5X3NlbGVjdGlvbl9s
aXN0X2xldmVsX2hfXwpJbmRleDogZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1
ODA3KQorKysgZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotTW92ZVNlbGVjdGlvbkNvbW1hbmQ6Ok1vdmVTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50
ICpkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQsIFBvc2l0aW9uICZwb3NpdGlv
biwgYm9vbCBzbWFydE1vdmUpIAotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQp
LCBtX2ZyYWdtZW50KGZyYWdtZW50KSwgbV9wb3NpdGlvbihwb3NpdGlvbiksIG1fc21hcnRNb3Zl
KHNtYXJ0TW92ZSkKK01vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZChQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24sIGJvb2wgc21hcnRNb3ZlKSAKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGZyYWdt
ZW50LT5kb2N1bWVudCgpKSwgbV9mcmFnbWVudChmcmFnbWVudCksIG1fcG9zaXRpb24ocG9zaXRp
b24pLCBtX3NtYXJ0TW92ZShzbWFydE1vdmUpCiB7CiAgICAgQVNTRVJUKG1fZnJhZ21lbnQpOwog
fQpAQCAtNzMsOSArNzMsOCBAQCB2b2lkIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkK
ICAgICBpZiAoIXBvcy5ub2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgcG9zID0gZW5kaW5n
U2VsZWN0aW9uKCkuc3RhcnQoKTsKIAotICAgIHNldEVuZGluZ1NlbGVjdGlvbihwb3MsIGVuZGlu
Z1NlbGVjdGlvbigpLmFmZmluaXR5KCkpOwotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQoKSwgbV9mcmFnbWVudC5nZXQoKSwgdHJ1ZSwg
bV9zbWFydE1vdmUpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0
eSgpKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kKG1fZnJhZ21lbnQuZ2V0KCksIHRydWUsIG1fc21hcnRNb3ZlKSk7CiB9CiAKIEVkaXRB
Y3Rpb24gTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdApJbmRleDog
ZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvTW92
ZVNlbGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL01vdmVTZWxl
Y3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4
ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIF9fbW92ZV9zZWxlY3Rp
b25fY29tbWFuZF9oX18KLSNkZWZpbmUgX19tb3ZlX3NlbGVjdGlvbl9jb21tYW5kX2hfXworI2lm
bmRlZiBtb3ZlX3NlbGVjdGlvbl9jb21tYW5kX2hfXworI2RlZmluZSBtb3ZlX3NlbGVjdGlvbl9j
b21tYW5kX2hfXwogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKIApAQCAtMzIs
MTAgKzMyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50
OwogCi1jbGFzcyBNb3ZlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29t
bWFuZAoteworY2xhc3MgTW92ZVNlbGVjdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRp
dENvbW1hbmQgewogcHVibGljOgotICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50ICpk
b2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQsIFBvc2l0aW9uICZwb3NpdGlvbiwg
Ym9vbCBzbWFydE1vdmU9ZmFsc2UpOworICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kKFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4sIGNvbnN0IFBvc2l0aW9uJiwgYm9vbCBzbWFydE1vdmUgPSBm
YWxzZSk7CiAgICAgdmlydHVhbCB+TW92ZVNlbGVjdGlvbkNvbW1hbmQoKTsKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwpJbmRleDogZWRpdGluZy9SZWJhbGFuY2VXaGl0ZXNwYWNl
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9SZWJhbGFuY2VXaGl0ZXNwYWNlQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9SZWJhbGFuY2VXaGl0ZXNwYWNl
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1SZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZDo6UmViYWxhbmNlV2hpdGVz
cGFjZUNvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBQb3NpdGlvbiAmcG9zKQotICAg
IDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3Bvc2l0aW9uKHBvcyksIG1fdXBzdHJlYW1PZmZz
ZXQoSW52YWxpZE9mZnNldCkKK1JlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5kOjpSZWJhbGFuY2VX
aGl0ZXNwYWNlQ29tbWFuZChjb25zdCBQb3NpdGlvbiYgcG9zKQorICAgIDogRWRpdENvbW1hbmQo
cG9zLm5vZGUoKS0+ZG9jdW1lbnQoKSksIG1fcG9zaXRpb24ocG9zKSwgbV91cHN0cmVhbU9mZnNl
dChJbnZhbGlkT2Zmc2V0KQogewogfQogCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1doaXRlc3BhY2UoVUNoYXIgYykKIC8vIEZJWE1FOiBUaGlzIHR1cm5zIHByZXNlcnZl
ZCBuZXdsaW5lcyBpbnRvIG5ic3BzLgogdm9pZCBSZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZDo6
ZG9BcHBseSgpCiB7Ci0gICAgaWYgKG1fcG9zaXRpb24uaXNOdWxsKCkgfHwgIW1fcG9zaXRpb24u
bm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgaWYgKCFtX3Bvc2l0aW9uLm5vZGUoKS0+aXNUZXh0
Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19j
YXN0PFRleHQqPihtX3Bvc2l0aW9uLm5vZGUoKSk7CkluZGV4OiBlZGl0aW5nL1JlYmFsYW5jZVdo
aXRlc3BhY2VDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9SZWJhbGFuY2VXaGl0ZXNw
YWNlQ29tbWFuZC5oCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvUmViYWxhbmNlV2hpdGVz
cGFjZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEx
ICszMCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmViYWxhbmNlV2hpdGVz
cGFjZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQKLXsKK2NsYXNzIFJlYmFsYW5jZVdoaXRl
c3BhY2VDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBSZWJhbGFu
Y2VXaGl0ZXNwYWNlQ29tbWFuZChEb2N1bWVudCAqLCBjb25zdCBQb3NpdGlvbiAmKTsKLSAgICB2
aXJ0dWFsIH5SZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZCgpIHsgfQorICAgIFJlYmFsYW5jZVdo
aXRlc3BhY2VDb21tYW5kKGNvbnN0IFBvc2l0aW9uJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9B
cHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKQEAgLTUzLDQgKzUxLDQgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19yZWJhbGFu
Y2Vfd2hpdGVzcGFjZV9jb21tYW5kX2hfXworI2VuZGlmIC8vIHJlYmFsYW5jZV93aGl0ZXNwYWNl
X2NvbW1hbmRfaF9fCkluZGV4OiBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGVkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgJKHJldmlzaW9u
IDE1ODA3KQorKysgZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogCi1jbGFzcyBSZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQKLXsKK2NsYXNzIFJlbW92ZUNTU1Byb3Bl
cnR5Q29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAgUmVtb3ZlQ1NT
UHJvcGVydHlDb21tYW5kKERvY3VtZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9w
ZXJ0eSk7CiAgICAgdmlydHVhbCB+UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKCk7CkluZGV4OiBl
ZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0
aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBl
ZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbW92ZU5vZGVBdHRyaWJ1
dGVDb21tYW5kOjpSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQs
IEVsZW1lbnQgKmVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKLSAgICA6
IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9lbGVtZW50KGVsZW1lbnQpLCBtX2F0dHJpYnV0ZShh
dHRyaWJ1dGUpCitSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZDo6UmVtb3ZlTm9kZUF0dHJpYnV0
ZUNvbW1hbmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
KQorICAgIDogRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSksIG1fZWxlbWVudChlbGVt
ZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwog
fQpJbmRleDogZWRpdGluZy9SZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGVkaXRpbmcvUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcp
CisrKyBlZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyNSArMjMsMjIgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgX19yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KLSNkZWZp
bmUgX19yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KKyNpZm5kZWYgcmVtb3ZlX25v
ZGVfYXR0cmlidXRlX2NvbW1hbmRfaF9fCisjZGVmaW5lIHJlbW92ZV9ub2RlX2F0dHJpYnV0ZV9j
b21tYW5kX2hfXwogCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLQogI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW1vdmVOb2RlQXR0
cmlidXRlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgUmVtb3ZlTm9kZUF0
dHJpYnV0ZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFJlbW92
ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKERvY3VtZW50ICosIEVsZW1lbnQgKiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlKTsKLSAgICB2aXJ0dWFsIH5SZW1vdmVOb2RlQXR0cmlidXRlQ29t
bWFuZCgpIHsgfQorICAgIFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKEVsZW1lbnQqLCBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHko
KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBFbGVtZW50ICplbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CisgICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlOyB9CiAgICAgCiBw
cml2YXRlOgpAQCAtNTIsNCArNDksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBfX3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXworI2Vu
ZGlmIC8vIHJlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXwpJbmRleDogZWRpdGluZy9S
ZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9SZW1vdmVOb2RlQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKERvY3VtZW50ICpkb2N1
bWVudCwgTm9kZSAqcmVtb3ZlQ2hpbGQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1f
cmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpLCBtX3BhcmVudChtX3JlbW92ZUNoaWxkLT5wYXJlbnRO
b2RlKCkpLCBtX3JlZkNoaWxkKG1fcmVtb3ZlQ2hpbGQtPm5leHRTaWJsaW5nKCkpCitSZW1vdmVO
b2RlQ29tbWFuZDo6UmVtb3ZlTm9kZUNvbW1hbmQoTm9kZSogcmVtb3ZlQ2hpbGQpCisgICAgOiBF
ZGl0Q29tbWFuZChyZW1vdmVDaGlsZC0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fcmVtb3ZlQ2hpbGQo
cmVtb3ZlQ2hpbGQpCisgICAgLCBtX3BhcmVudChtX3JlbW92ZUNoaWxkLT5wYXJlbnROb2RlKCkp
CisgICAgLCBtX3JlZkNoaWxkKG1fcmVtb3ZlQ2hpbGQtPm5leHRTaWJsaW5nKCkpCiB7CiAgICAg
QVNTRVJUKG1fcGFyZW50KTsKIH0KSW5kZXg6IGVkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBlZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgJKHJldmlzaW9uIDE1ODA3
KQorKysgZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMjMgKzIzLDIxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIF9fcmVtb3ZlX25vZGVfY29tbWFuZF9oX18KLSNkZWZpbmUgX19yZW1vdmVfbm9kZV9j
b21tYW5kX2hfXworI2lmbmRlZiByZW1vdmVfbm9kZV9jb21tYW5kX2hfXworI2RlZmluZSByZW1v
dmVfbm9kZV9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW1vdmVOb2RlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29t
bWFuZAoteworY2xhc3MgUmVtb3ZlTm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewog
cHVibGljOgotICAgIFJlbW92ZU5vZGVDb21tYW5kKERvY3VtZW50ICosIE5vZGUgKik7Ci0gICAg
dmlydHVhbCB+UmVtb3ZlTm9kZUNvbW1hbmQoKSB7IH0KKyAgICBSZW1vdmVOb2RlQ29tbWFuZChO
b2RlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBk
b1VuYXBwbHkoKTsKIAotICAgIE5vZGUgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZUNo
aWxkLmdldCgpOyB9CisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlQ2hp
bGQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9yZW1vdmVDaGlsZDsK
QEAgLTQ5LDQgKzQ3LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gX19yZW1vdmVfbm9kZV9jb21tYW5kX2hfXworI2VuZGlmIC8vIHJlbW92ZV9ub2Rl
X2NvbW1hbmRfaF9fCkluZGV4OiBlZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW5Db21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL1JlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChEb2N1bWVudCAq
ZG9jdW1lbnQsIE5vZGUgKm5vZGUpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVu
dCksIG1fbm9kZShub2RlKQorUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OlJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKE5vZGUqIG5vZGUpCisgICAgOiBDb21w
b3NpdGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKSwgbV9ub2RlKG5vZGUpCiB7CiAgICAg
QVNTRVJUKG1fbm9kZSk7CiB9CkluZGV4OiBlZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW5Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9SZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuQ29tbWFuZC5oCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzLDIyICsyMywyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBfX3JlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFuZF9oX18KLSNkZWZpbmUg
X19yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmRfaF9fCisjaWZuZGVmIHJl
bW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFuZF9oX18KKyNkZWZpbmUgcmVtb3Zl
X25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiQ29tcG9z
aXRlRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFu
ZAoteworY2xhc3MgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQgOiBwdWJsaWMg
Q29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kKERvY3VtZW50ICosIE5vZGUgKik7Ci0gICAgdmlydHVhbCB+UmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQoKSB7IH0KKyAgICBSZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZChOb2RlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgp
OwogCi0gICAgTm9kZSAqbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAg
IE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToK
ICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwpAQCAtNDYsNCArNDQsNCBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX3JlbW92ZV9ub2RlX3ByZXNlcnZp
bmdfY2hpbGRyZW5fY29tbWFuZF9oX18KKyNlbmRpZiAvLyByZW1vdmVfbm9kZV9wcmVzZXJ2aW5n
X2NoaWxkcmVuX2NvbW1hbmRfaF9fCkluZGV4OiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxh
Y2VtZW50RnJhZ21lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCwgYm9vbCBtYXRjaFN0eWxlLCBjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbikKLSAgICA6
IG1fZG9jdW1lbnQoZG9jdW1lbnQpLAorUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRG
cmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgYm9vbCBtYXRjaFN0eWxlLCBjb25z
dCBTZWxlY3Rpb24mIHNlbGVjdGlvbikKKyAgICA6IG1fZG9jdW1lbnQoZnJhZ21lbnQtPmRvY3Vt
ZW50KCkpLAogICAgICAgbV9mcmFnbWVudChmcmFnbWVudCksCiAgICAgICBtX21hdGNoU3R5bGUo
bWF0Y2hTdHlsZSksIAogICAgICAgbV9oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0KGZhbHNl
KSwgCkBAIC00NTMsOCArNDUzLDkgQEAgUmVuZGVyaW5nSW5mbzo6UmVuZGVyaW5nSW5mbyhQYXNz
UmVmUHRyPAogewogfQogCi1SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCwg
Ym9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHls
ZSwgYm9vbCBmb3JjZU1lcmdlU3RhcnQsIEVkaXRBY3Rpb24gZWRpdEFjdGlvbikgCi0gICAgOiBD
b21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCksCitSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCwKKyAgICBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9v
bCBtYXRjaFN0eWxlLCBib29sIGZvcmNlTWVyZ2VTdGFydCwgRWRpdEFjdGlvbiBlZGl0QWN0aW9u
KSAKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGZyYWdtZW50LT5kb2N1bWVudCgpKSwKICAg
ICAgIG1fc2VsZWN0UmVwbGFjZW1lbnQoc2VsZWN0UmVwbGFjZW1lbnQpLCAKICAgICAgIG1fc21h
cnRSZXBsYWNlKHNtYXJ0UmVwbGFjZSksCiAgICAgICBtX21hdGNoU3R5bGUobWF0Y2hTdHlsZSks
CkBAIC01MjQsNyArNTI1LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgICAgIG1fbWF0Y2hTdHlsZSA9IHRydWU7CiAgICAgCiAgICAgRWxlbWVudCogY3Vy
cmVudFJvb3QgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIFJlcGxhY2Vt
ZW50RnJhZ21lbnQgZnJhZ21lbnQoZG9jdW1lbnQoKSwgbV9kb2N1bWVudEZyYWdtZW50LmdldCgp
LCBtX21hdGNoU3R5bGUsIHNlbGVjdGlvbik7CisgICAgUmVwbGFjZW1lbnRGcmFnbWVudCBmcmFn
bWVudChtX2RvY3VtZW50RnJhZ21lbnQuZ2V0KCksIG1fbWF0Y2hTdHlsZSwgc2VsZWN0aW9uKTsK
ICAgICAKICAgICBpZiAoZnJhZ21lbnQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC03
MzUsNyArNzM2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAK
ICAgICAgICAgaWYgKGVuZFdhc0VuZE9mUGFyYWdyYXBoIHx8ICFpc0VuZE9mUGFyYWdyYXBoKHBv
cykgfHwgbmV4dC5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gY3VycmVudFJvb3QpIHsKICAgICAg
ICAgICAgIGlmICghaXNTdGFydE9mUGFyYWdyYXBoKHBvcykpIHsKLSAgICAgICAgICAgICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24ocG9zLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLCBET1dO
U1RSRUFNKTsKKyAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKHBv
cy5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICAg
ICAgICAgIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOwogCiAgICAgICAgICAgICAgICAgLy8g
U2VsZWN0IHVwIHRvIHRoZSBwYXJhZ3JhcGggc2VwYXJhdG9yIHRoYXQgd2FzIGFkZGVkLgpAQCAt
ODc2LDcgKzg3Nyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNvbXBsZXRlSFQK
ICAgICBpZiAobV9zZWxlY3RSZXBsYWNlbWVudCkKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFNlbGVjdGlvbihzdGFydCwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgIGVsc2UK
LSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOwor
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZCwgU0VMX0RFRkFVTFRfQUZG
SU5JVFkpKTsKIH0KIAogRWRpdEFjdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZWRpdGlu
Z0FjdGlvbigpIGNvbnN0CkluZGV4OiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lv
biAxNTgwNykKKysrIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsMTAgKzUyLDkgQEAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCBSZWZQdHI8UmVu
ZGVyaW5nSQogCiAvLyAtLS0gUmVwbGFjZW1lbnRGcmFnbWVudCBoZWxwZXIgY2xhc3MKIAotY2xh
c3MgUmVwbGFjZW1lbnRGcmFnbWVudCA6IE5vbmNvcHlhYmxlCi17CitjbGFzcyBSZXBsYWNlbWVu
dEZyYWdtZW50IDogTm9uY29weWFibGUgewogcHVibGljOgotICAgIFJlcGxhY2VtZW50RnJhZ21l
bnQoRG9jdW1lbnQqLCBEb2N1bWVudEZyYWdtZW50KiwgYm9vbCBtYXRjaFN0eWxlLCBjb25zdCBT
ZWxlY3Rpb24mKTsKKyAgICBSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqLCBi
b29sIG1hdGNoU3R5bGUsIGNvbnN0IFNlbGVjdGlvbiYpOwogCiAgICAgTm9kZSogZmlyc3RDaGls
ZCgpIGNvbnN0OwogICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNvbnN0OwpAQCAtMTAwLDIzICs5OSwy
MyBAQCBwcml2YXRlOiAgICAKICAgICBib29sIG1faGFzTW9yZVRoYW5PbmVCbG9jazsKIH07CiAK
LWNsYXNzIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21t
YW5kCi17CitjbGFzcyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVF
ZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoRG9jdW1l
bnQgKmRvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCwgYm9vbCBzZWxlY3RSZXBs
YWNlbWVudD10cnVlLCBib29sIHNtYXJ0UmVwbGFjZT1mYWxzZSwgYm9vbCBtYXRjaFN0eWxlPWZh
bHNlLCBib29sIGZvcmNlTWVyZ2VTdGFydD1mYWxzZSwgRWRpdEFjdGlvbiBhY3Rpb249RWRpdEFj
dGlvblBhc3RlKTsKKyAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+LAorICAgICAgICBib29sIHNlbGVjdFJlcGxhY2VtZW50ID0gdHJ1ZSwgYm9v
bCBzbWFydFJlcGxhY2UgPSBmYWxzZSwgYm9vbCBtYXRjaFN0eWxlID0gZmFsc2UsIGJvb2wgZm9y
Y2VNZXJnZVN0YXJ0ID0gZmFsc2UsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uUGFzdGUpOwogICAg
IHZpcnR1YWwgflJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKCk7CiAgICAgCiAgICAgdmlydHVhbCB2
b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIHZvaWQgY29tcGxldGVIVE1MUmVwbGFjZW1lbnQoY29uc3Qg
UG9zaXRpb24gJmxhc3RQb3NpdGlvblRvU2VsZWN0KTsKKyAgICB2b2lkIGNvbXBsZXRlSFRNTFJl
cGxhY2VtZW50KGNvbnN0IFBvc2l0aW9uJiBsYXN0UG9zaXRpb25Ub1NlbGVjdCk7CiAKLSAgICB2
b2lkIGluc2VydE5vZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9kZSAqaW5zZXJ0Q2hp
bGQsIE5vZGUgKnJlZkNoaWxkKTsKLSAgICB2b2lkIGluc2VydE5vZGVBdEFuZFVwZGF0ZU5vZGVz
SW5zZXJ0ZWQoTm9kZSAqaW5zZXJ0Q2hpbGQsIE5vZGUgKnJlZkNoaWxkLCBpbnQgb2Zmc2V0KTsK
LSAgICB2b2lkIGluc2VydE5vZGVCZWZvcmVBbmRVcGRhdGVOb2Rlc0luc2VydGVkKE5vZGUgKmlu
c2VydENoaWxkLCBOb2RlICpyZWZDaGlsZCk7CisgICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXJBbmRV
cGRhdGVOb2Rlc0luc2VydGVkKE5vZGUqIGluc2VydENoaWxkLCBOb2RlKiByZWZDaGlsZCk7Cisg
ICAgdm9pZCBpbnNlcnROb2RlQXRBbmRVcGRhdGVOb2Rlc0luc2VydGVkKE5vZGUqIGluc2VydENo
aWxkLCBOb2RlKiByZWZDaGlsZCwgaW50IG9mZnNldCk7CisgICAgdm9pZCBpbnNlcnROb2RlQmVm
b3JlQW5kVXBkYXRlTm9kZXNJbnNlcnRlZChOb2RlKiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hp
bGQpOwogCi0gICAgdm9pZCB1cGRhdGVOb2Rlc0luc2VydGVkKE5vZGUgKik7CisgICAgdm9pZCB1
cGRhdGVOb2Rlc0luc2VydGVkKE5vZGUqKTsKICAgICB2b2lkIGZpeHVwTm9kZVN0eWxlcyhjb25z
dCBOb2RlVmVjdG9yJiwgY29uc3QgUmVuZGVyaW5nSW5mb01hcCYpOwogICAgIGJvb2wgc2hvdWxk
UmVtb3ZlRW5kQlIoTm9kZSopOwogICAgIApAQCAtMTM3LDQgKzEzNiw0IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9fcmVwbGFjZV9zZWxlY3Rpb25f
Y29tbWFuZF9oX18KKyNlbmRpZiAvLyByZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kX2hfXwpJbmRl
eDogZWRpdGluZy9TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvU2VsZWN0aW9u
LmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL1NlbGVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwzMiArNDQsNDcgQEAgU2VsZWN0
aW9uOjpTZWxlY3Rpb24oKQogewogfQogCi1TZWxlY3Rpb246OlNlbGVjdGlvbihjb25zdCBQb3Np
dGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHkpCi0gICAgOiBtX2Jhc2UocG9zKSwgbV9leHRl
bnQocG9zKQorU2VsZWN0aW9uOjpTZWxlY3Rpb24oY29uc3QgUG9zaXRpb24mIHBvcywgRUFmZmlu
aXR5IGFmZmluaXR5KQorICAgIDogbV9iYXNlKHBvcykKKyAgICAsIG1fZXh0ZW50KHBvcykKICAg
ICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3Rlckdy
YW51bGFyaXR5KQotICAgICwgbV9zdGF0ZShOT05FKQotICAgICwgbV9iYXNlSXNGaXJzdCh0cnVl
KQogewogICAgIHZhbGlkYXRlKCk7CiB9CiAKLVNlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFBv
c2l0aW9uICZiYXNlLCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHkp
Ci0gICAgOiBtX2Jhc2UoYmFzZSksIG1fZXh0ZW50KGV4dGVudCkKK1NlbGVjdGlvbjo6U2VsZWN0
aW9uKGNvbnN0IFBvc2l0aW9uJiBiYXNlLCBjb25zdCBQb3NpdGlvbiYgZXh0ZW50LCBFQWZmaW5p
dHkgYWZmaW5pdHkpCisgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAsIG1fZXh0ZW50KGV4dGVudCkK
ICAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3Rl
ckdyYW51bGFyaXR5KQotICAgICwgbV9zdGF0ZShOT05FKQotICAgICwgbV9iYXNlSXNGaXJzdCh0
cnVlKQogewogICAgIHZhbGlkYXRlKCk7CiB9CiAKLVNlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0
IFJhbmdlICpyYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5KQotICAgIDogbV9iYXNlKHJhbmdlLT5z
dGFydFBvc2l0aW9uKCkpLCBtX2V4dGVudChyYW5nZS0+ZW5kUG9zaXRpb24oKSkKK1NlbGVjdGlv
bjo6U2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zKQorICAgIDogbV9iYXNlKHBv
cy5kZWVwRXF1aXZhbGVudCgpKQorICAgICwgbV9leHRlbnQocG9zLmRlZXBFcXVpdmFsZW50KCkp
CisgICAgLCBtX2FmZmluaXR5KHBvcy5hZmZpbml0eSgpKQorICAgICwgbV9ncmFudWxhcml0eShD
aGFyYWN0ZXJHcmFudWxhcml0eSkKK3sKKyAgICB2YWxpZGF0ZSgpOworfQorCitTZWxlY3Rpb246
OlNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIGJhc2UsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgZXh0ZW50KQorICAgIDogbV9iYXNlKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSkKKyAgICAs
IG1fZXh0ZW50KGV4dGVudC5kZWVwRXF1aXZhbGVudCgpKQorICAgICwgbV9hZmZpbml0eShiYXNl
LmFmZmluaXR5KCkpCisgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQor
eworICAgIHZhbGlkYXRlKCk7Cit9CisKK1NlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFJhbmdl
KiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5KQorICAgIDogbV9iYXNlKHJhbmdlLT5zdGFydFBv
c2l0aW9uKCkpCisgICAgLCBtX2V4dGVudChyYW5nZS0+ZW5kUG9zaXRpb24oKSkKICAgICAsIG1f
YWZmaW5pdHkoYWZmaW5pdHkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFy
aXR5KQotICAgICwgbV9zdGF0ZShOT05FKQotICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewog
ICAgIHZhbGlkYXRlKCk7CiB9CkBAIC0yOTksOSArMzE0LDkgQEAgdm9pZCBTZWxlY3Rpb246OmFk
anVzdEZvckVkaXRhYmxlQ29udGVudAogICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgfHwgbV9zdGFy
dC5pc051bGwoKSB8fCBtX2VuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9k
ZSAqYmFzZVJvb3QgPSBtX2Jhc2Uubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAg
Tm9kZSAqc3RhcnRSb290ID0gbV9zdGFydC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
LSAgICBOb2RlICplbmRSb290ID0gbV9lbmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7
CisgICAgTm9kZSogYmFzZVJvb3QgPSBtX2Jhc2Uubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgTm9kZSogc3RhcnRSb290ID0gbV9zdGFydC5ub2RlKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKKyAgICBOb2RlKiBlbmRSb290ID0gbV9lbmQubm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCk7CiAgICAgCiAgICAgTm9kZSogYmFzZUVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RF
ZGl0YWJsZUFuY2VzdG9yKG1fYmFzZS5ub2RlKCkpOwogICAgIApJbmRleDogZWRpdGluZy9TZWxl
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1NlbGVjdGlvbi5oCShyZXZpc2lvbiAxNTgw
NykKKysrIGVkaXRpbmcvU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiwz
MCBAQAogI2lmbmRlZiBTZWxlY3Rpb25faAogI2RlZmluZSBTZWxlY3Rpb25faAogCi0jaW5jbHVk
ZSAiUG9zaXRpb24uaCIKLSNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJU
ZXh0R3JhbnVsYXJpdHkuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBQb3NpdGlvbjsKIAotY2xhc3MgU2VsZWN0aW9uCi17Citj
b25zdCBFQWZmaW5pdHkgU0VMX0RFRkFVTFRfQUZGSU5JVFkgPSBET1dOU1RSRUFNOworCitjbGFz
cyBTZWxlY3Rpb24gewogcHVibGljOgogICAgIGVudW0gRVN0YXRlIHsgTk9ORSwgQ0FSRVQsIFJB
TkdFIH07CiAgICAgZW51bSBFRGlyZWN0aW9uIHsgRk9SV0FSRCwgQkFDS1dBUkQsIFJJR0hULCBM
RUZUIH07Ci0jZGVmaW5lIFNFTF9ERUZBVUxUX0FGRklOSVRZIERPV05TVFJFQU0KIAogICAgIFNl
bGVjdGlvbigpOwotICAgIFNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmLCBFQWZmaW5pdHkpOwot
ICAgIFNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmLCBjb25zdCBQb3NpdGlvbiAmLCBFQWZmaW5p
dHkpOwotICAgIFNlbGVjdGlvbihjb25zdCBSYW5nZSAqLCBFQWZmaW5pdHkgPSBET1dOU1RSRUFN
KTsKKworICAgIFNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSk7CisgICAgU2Vs
ZWN0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHkpOworCisg
ICAgU2VsZWN0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5ID0gU0VMX0RFRkFVTFRfQUZGSU5J
VFkpOwogICAgIAorICAgIFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICBT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CisKICAgICBzdGF0aWMgU2VsZWN0aW9uIHNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2Rl
Kik7CiAKICAgICBFU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CkBAIC01
Myw4ICs1Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFmZmluaXR5KEVBZmZpbml0eSBhZmZp
bml0eSkgeyBtX2FmZmluaXR5ID0gYWZmaW5pdHk7IH0KICAgICBFQWZmaW5pdHkgYWZmaW5pdHko
KSBjb25zdCB7IHJldHVybiBtX2FmZmluaXR5OyB9CiAKLSAgICB2b2lkIHNldEJhc2UoUG9zaXRp
b24gYmFzZSkgeyBtX2Jhc2UgPSBiYXNlOyB9Ci0gICAgdm9pZCBzZXRFeHRlbnQoUG9zaXRpb24g
ZXh0ZW50KSB7IG1fZXh0ZW50ID0gZXh0ZW50OyB9CisgICAgdm9pZCBzZXRCYXNlKGNvbnN0IFBv
c2l0aW9uJiBiYXNlKSB7IG1fYmFzZSA9IGJhc2U7IH0KKyAgICB2b2lkIHNldEV4dGVudChjb25z
dCBQb3NpdGlvbiYgZXh0ZW50KSB7IG1fZXh0ZW50ID0gZXh0ZW50OyB9CiAgICAgUG9zaXRpb24g
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAgIFBvc2l0aW9uIGV4dGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9CiAgICAgUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0OyB9CkBAIC0xMDMsMTIgKzEwNywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9iYXNlSXNGaXJzdDsgICAgICAgICAgICAgICAvLyB0cnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRo
ZSBleHRlbnQKIH07CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uICZh
LCBjb25zdCBTZWxlY3Rpb24gJmIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNlbGVj
dGlvbiYgYSwgY29uc3QgU2VsZWN0aW9uJiBiKQogewogICAgIHJldHVybiBhLnN0YXJ0KCkgPT0g
Yi5zdGFydCgpICYmIGEuZW5kKCkgPT0gYi5lbmQoKSAmJiBhLmFmZmluaXR5KCkgPT0gYi5hZmZp
bml0eSgpICYmIGEuZ3JhbnVsYXJpdHkoKSA9PSBiLmdyYW51bGFyaXR5KCk7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2VsZWN0aW9uICZhLCBjb25zdCBTZWxlY3Rpb24gJmIp
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNlbGVjdGlvbiYgYSwgY29uc3QgU2VsZWN0
aW9uJiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CkluZGV4OiBlZGl0aW5nL1NldE5v
ZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1NldE5vZGVBdHRy
aWJ1dGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL1NldE5vZGVBdHRy
aWJ1dGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpTZXROb2RlQXR0cmli
dXRlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIEVsZW1lbnQgKmVsZW1lbnQsIAorU2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQ6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKEVsZW1lbnQqIGVsZW1l
bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKLSAgICA6
IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9lbGVtZW50KGVsZW1lbnQpLCBtX2F0dHJpYnV0ZShh
dHRyaWJ1dGUpLCBtX3ZhbHVlKHZhbHVlKQorICAgIDogRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9j
dW1lbnQoKSksIG1fZWxlbWVudChlbGVtZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKSwgbV92
YWx1ZSh2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBBU1NFUlQoIW1fdmFs
dWUuaXNOdWxsKCkpOwpJbmRleDogZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaAkocmV2aXNpb24g
MTU4MDcpCisrKyBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyNSArMjMsMjIgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKLSNpZm5kZWYgX19zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KLSNkZWZp
bmUgX19zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KKyNpZm5kZWYgc2V0X25vZGVfYXR0
cmlidXRlX2NvbW1hbmRfaF9fCisjZGVmaW5lIHNldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hf
XwogCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLQogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTZXROb2RlQXR0cmlidXRlQ29tbWFu
ZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQg
OiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFNldE5vZGVBdHRyaWJ1dGVDb21t
YW5kKERvY3VtZW50ICosIEVsZW1lbnQgKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
LCBjb25zdCBTdHJpbmcgJnZhbHVlKTsKLSAgICB2aXJ0dWFsIH5TZXROb2RlQXR0cmlidXRlQ29t
bWFuZCgpIHsgfQorICAgIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKEVsZW1lbnQqLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyAmdmFsdWUpOwogCiAgICAgdmly
dHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAg
ICBFbGVtZW50ICplbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9Cisg
ICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQog
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlOyB9CiAgICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQog
ICAgIApAQCAtNTQsNCArNTEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBfX3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXworI2VuZGlmIC8v
IHNldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXwpJbmRleDogZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TcGxpdEVsZW1lbnRDb21tYW5kOjpTcGxpdEVsZW1lbnRDb21tYW5kKERvY3VtZW50ICpkb2N1
bWVudCwgRWxlbWVudCAqZWxlbWVudCwgTm9kZSAqYXRDaGlsZCkKLSAgICA6IEVkaXRDb21tYW5k
KGRvY3VtZW50KSwgbV9lbGVtZW50MihlbGVtZW50KSwgbV9hdENoaWxkKGF0Q2hpbGQpCitTcGxp
dEVsZW1lbnRDb21tYW5kOjpTcGxpdEVsZW1lbnRDb21tYW5kKEVsZW1lbnQqIGVsZW1lbnQsIE5v
ZGUqIGF0Q2hpbGQpCisgICAgOiBFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVudCgpKSwgbV9l
bGVtZW50MihlbGVtZW50KSwgbV9hdENoaWxkKGF0Q2hpbGQpCiB7CiAgICAgQVNTRVJUKG1fZWxl
bWVudDIpOwogICAgIEFTU0VSVChtX2F0Q2hpbGQpOwpJbmRleDogZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmgJ
KHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxOCArMjMsMTYgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpZm5kZWYgX19zcGxpdF9lbGVtZW50X2NvbW1hbmRfaF9fCi0jZGVm
aW5lIF9fc3BsaXRfZWxlbWVudF9jb21tYW5kX2hfXworI2lmbmRlZiBzcGxpdF9lbGVtZW50X2Nv
bW1hbmRfaF9fCisjZGVmaW5lIHNwbGl0X2VsZW1lbnRfY29tbWFuZF9oX18KIAogI2luY2x1ZGUg
IkVkaXRDb21tYW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3BsaXRFbGVt
ZW50Q29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgU3BsaXRFbGVtZW50Q29t
bWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgU3BsaXRFbGVtZW50Q29t
bWFuZChEb2N1bWVudCAqLCBFbGVtZW50ICplbGVtZW50LCBOb2RlICphdENoaWxkKTsKLSAgICB2
aXJ0dWFsIH5TcGxpdEVsZW1lbnRDb21tYW5kKCkgeyB9CisgICAgU3BsaXRFbGVtZW50Q29tbWFu
ZChFbGVtZW50KiwgTm9kZSogc3BsaXRQb2ludENoaWxkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwpAQCAtNDcsNCArNDUsNCBA
QCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX3NwbGl0
X2VsZW1lbnRfY29tbWFuZF9oX18KKyNlbmRpZiAvLyBzcGxpdF9lbGVtZW50X2NvbW1hbmRfaF9f
CkluZGV4OiBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBl
ZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxp
dFRleHROb2RlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIFRleHQgKnRleHQsIGludCBvZmZz
ZXQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fdGV4dDIodGV4dCksIG1fb2Zmc2V0
KG9mZnNldCkKK1NwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2RlQ29tbWFuZChUZXh0
KiB0ZXh0LCBpbnQgb2Zmc2V0KQorICAgIDogRWRpdENvbW1hbmQodGV4dC0+ZG9jdW1lbnQoKSks
IG1fdGV4dDIodGV4dCksIG1fb2Zmc2V0KG9mZnNldCkKIHsKICAgICBBU1NFUlQobV90ZXh0Mik7
CiAgICAgQVNTRVJUKG1fdGV4dDItPmxlbmd0aCgpID4gMCk7CkluZGV4OiBlZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9TcGxpdFRleHROb2RlQ29t
bWFuZC5oCShyZXZpc2lvbiAxNTgwNykKKysrIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDI3ICsyMywyNCBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBfX3NwbGl0X3RleHRfbm9kZV9jb21tYW5k
X2hfXwotI2RlZmluZSBfX3NwbGl0X3RleHRfbm9kZV9jb21tYW5kX2hfXworI2lmbmRlZiBzcGxp
dF90ZXh0X25vZGVfY29tbWFuZF9oX18KKyNkZWZpbmUgc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmRf
aF9fCiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgVGV4dDsKLX0KIAotbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGV4dDsKIAot
Y2xhc3MgU3BsaXRUZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQKLXsKK2NsYXNz
IFNwbGl0VGV4dE5vZGVDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAg
ICBTcGxpdFRleHROb2RlQ29tbWFuZChEb2N1bWVudCAqLCBUZXh0ICosIGludCk7CisgICAgU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQoVGV4dCosIGludCBvZmZzZXQpOwogICAgIHZpcnR1YWwgflNwbGl0
VGV4dE5vZGVDb21tYW5kKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAg
IHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIFRleHQgKm5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3RleHQyLmdldCgpOyB9CisgICAgVGV4dCogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dDIuZ2V0KCk7IH0KICAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KIAogcHJpdmF0ZToKQEAgLTU0LDQgKzUxLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19zcGxpdF90ZXh0X25vZGVfY29tbWFuZF9oX18KKyNl
bmRpZiAvLyBzcGxpdF90ZXh0X25vZGVfY29tbWFuZF9oX18KSW5kZXg6IGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGlu
Zy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4
MDcpCisrKyBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50Q29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIFRleHQgKnRleHQsIGlu
dCBvZmZzZXQpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fdGV4dCh0
ZXh0KSwgbV9vZmZzZXQob2Zmc2V0KQorU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWFuZDo6U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChUZXh0KiB0ZXh0LCBp
bnQgb2Zmc2V0KQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQodGV4dC0+ZG9jdW1lbnQoKSks
IG1fdGV4dCh0ZXh0KSwgbV9vZmZzZXQob2Zmc2V0KQogewogICAgIEFTU0VSVChtX3RleHQpOwog
ICAgIEFTU0VSVChtX3RleHQtPmxlbmd0aCgpID4gMCk7CkluZGV4OiBlZGl0aW5nL1NwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1Nw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisr
KyBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE4ICsyMywxNiBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBfX3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1l
bnRfY29tbWFuZF9oX18KLSNkZWZpbmUgX19zcGxpdF90ZXh0X25vZGVfY29udGFpbmluZ19lbGVt
ZW50X2NvbW1hbmRfaF9fCisjaWZuZGVmIHNwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1l
bnRfY29tbWFuZF9oX18KKyNkZWZpbmUgc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVu
dF9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRD
b21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kCi17CitjbGFzcyBTcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5k
IHsKIHB1YmxpYzoKLSAgICBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKERv
Y3VtZW50ICosIFRleHQgKiwgaW50KTsKLSAgICB2aXJ0dWFsIH5TcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnRDb21tYW5kKCkgeyB9CisgICAgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q29tbWFuZChUZXh0KiwgaW50IG9mZnNldCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBs
eSgpOwogCkBAIC00NSw0ICs0Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIF9fc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudF9jb21t
YW5kX2hfXworI2VuZGlmIC8vIHNwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnRfY29t
bWFuZF9oX18KSW5kZXg6IGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNiArNjEsMTUgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKERvYwogICAgIEZyYW1lICpmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgCi0gICAgRWRpdENvbW1h
bmRQdHIgbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOworICAgIEVk
aXRDb21tYW5kKiBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21tYW5kKCk7CiAg
ICAgaWYgKGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkpIHsKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkp
LT5kZWxldGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VHlw
aW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmRlbGV0ZUtleVByZXNzZWQoZ3JhbnVsYXJp
dHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFR5cGluZ0NvbW1hbmQgKnR5
cGluZ0NvbW1hbmQgPSBuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgRGVsZXRlS2V5LCAiIiwg
ZmFsc2UsIGdyYW51bGFyaXR5KTsKKyAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gdHlwaW5nQ29t
bWFuZCA9IG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBEZWxldGVLZXksICIiLCBmYWxzZSwg
Z3JhbnVsYXJpdHkpOwogICAgIHR5cGluZ0NvbW1hbmQtPnNldFNtYXJ0RGVsZXRlKHNtYXJ0RGVs
ZXRlKTsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQodHlwaW5nQ29tbWFuZCk7Ci0gICAgY21kLmFw
cGx5KCk7CisgICAgdHlwaW5nQ29tbWFuZC0+YXBwbHkoKTsKIH0KIAogdm9pZCBUeXBpbmdDb21t
YW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCAqZG9jdW1lbnQsIGJvb2wgc21h
cnREZWxldGUsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTgwLDE2ICs3OSwxNSBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgRnJhbWUgKmZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICAKLSAgICBF
ZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21tYW5kKCk7
CisgICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1h
bmQoKTsKICAgICBpZiAoaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRDb21tYW5k
KSkgewotICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kICo+KGxhc3RFZGl0Q29tbWFu
ZC5nZXQoKSktPmZvcndhcmREZWxldGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5KTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmZvcndhcmREZWxl
dGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFR5cGluZ0NvbW1hbmQgKnR5cGluZ0NvbW1hbmQgPSBuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVu
dCwgRm9yd2FyZERlbGV0ZUtleSwgIiIsIGZhbHNlLCBncmFudWxhcml0eSk7CisgICAgUmVmUHRy
PFR5cGluZ0NvbW1hbmQ+IHR5cGluZ0NvbW1hbmQgPSBuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVu
dCwgRm9yd2FyZERlbGV0ZUtleSwgIiIsIGZhbHNlLCBncmFudWxhcml0eSk7CiAgICAgdHlwaW5n
Q29tbWFuZC0+c2V0U21hcnREZWxldGUoc21hcnREZWxldGUpOwotICAgIEVkaXRDb21tYW5kUHRy
IGNtZCh0eXBpbmdDb21tYW5kKTsKLSAgICBjbWQuYXBwbHkoKTsKKyAgICB0eXBpbmdDb21tYW5k
LT5hcHBseSgpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQg
KmRvY3VtZW50LCBjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KQpA
QCAtMTEzLDE0ICsxMTEsMTMgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3Vt
ZW50IAogICAgIGlmIChuZXdUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIEVkaXRDb21tYW5kUHRyIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1h
bmQoKTsKKyAgICBFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0
Q29tbWFuZCgpOwogICAgIGlmIChpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENv
bW1hbmQpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRD
b21tYW5kLmdldCgpKS0+aW5zZXJ0VGV4dChuZXdUZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwor
ICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKS0+aW5z
ZXJ0VGV4dChuZXdUZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50
LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpKTsKLSAgICBjbWQuYXBw
bHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IFR5cGluZ0NvbW1hbmQoZG9jdW1lbnQsIEluc2Vy
dFRleHQsIG5ld1RleHQsIHNlbGVjdEluc2VydGVkVGV4dCkpOwogfQogCiB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCAqZG9jdW1lbnQpCkBAIC0xMzAsMTQgKzEy
NywxMyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1CiAgICAgRnJh
bWUgKmZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICAK
LSAgICBFZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21t
YW5kKCk7CisgICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRp
dENvbW1hbmQoKTsKICAgICBpZiAoaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRD
b21tYW5kKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kICo+KGxhc3RFZGl0
Q29tbWFuZC5nZXQoKSktPmluc2VydExpbmVCcmVhaygpOworICAgICAgICBzdGF0aWNfY2FzdDxU
eXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKS0+aW5zZXJ0TGluZUJyZWFrKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFR5cGluZ0Nv
bW1hbmQoZG9jdW1lbnQsIEluc2VydExpbmVCcmVhaykpOwotICAgIGNtZC5hcHBseSgpOworICAg
IGFwcGx5Q29tbWFuZChuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgSW5zZXJ0TGluZUJyZWFr
KSk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5R
dW90ZWRDb250ZW50KERvY3VtZW50ICpkb2N1bWVudCkKQEAgLTE0NywxNCArMTQzLDEzIEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXIKICAgICBGcmFtZSAqZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIAotICAgIEVkaXRD
b21tYW5kUHRyIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1hbmQoKTsKKyAg
ICBFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgp
OwogICAgIGlmIChpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQpKSB7
Ci0gICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdl
dCgpKS0+aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7CisgICAgICAg
IHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQpLT5pbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSk7Ci0gICAgY21kLmFwcGx5KCk7
CisgICAgYXBwbHlDb21tYW5kKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5k
OjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQgKmRvY3VtZW50KQpAQCAtMTY0LDI2
ICsxNTksMjQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcgogICAg
IEZyYW1lICpmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAg
ICAgCi0gICAgRWRpdENvbW1hbmRQdHIgbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0
Q29tbWFuZCgpOworICAgIEVkaXRDb21tYW5kKiBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFz
dEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RF
ZGl0Q29tbWFuZCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0
RWRpdENvbW1hbmQuZ2V0KCkpLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRWRpdENvbW1h
bmRQdHIgY21kKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3IpKTsKLSAgICBjbWQuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IFR5cGluZ0Nv
bW1hbmQoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvcikpOwogfQogCi1ib29sIFR5
cGluZ0NvbW1hbmQ6OmlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGNvbnN0IEVkaXRDb21tYW5k
UHRyICZjbWQpCitib29sIFR5cGluZ0NvbW1hbmQ6OmlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5k
KGNvbnN0IEVkaXRDb21tYW5kKiBjbWQpCiB7Ci0gICAgcmV0dXJuIGNtZC5pc1R5cGluZ0NvbW1h
bmQoKSAmJgotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUeXBpbmdDb21tYW5kICo+KGNtZC5n
ZXQoKSktPm9wZW5Gb3JNb3JlVHlwaW5nKCk7CisgICAgcmV0dXJuIGNtZCAmJiBjbWQtPmlzVHlw
aW5nQ29tbWFuZCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IFR5cGluZ0NvbW1hbmQqPihjbWQpLT5p
c09wZW5Gb3JNb3JlVHlwaW5nKCk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcoY29uc3QgRWRpdENvbW1hbmRQdHIgJmNtZCkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VU
eXBpbmcoRWRpdENvbW1hbmQqIGNtZCkKIHsKICAgICBpZiAoaXNPcGVuRm9yTW9yZVR5cGluZ0Nv
bW1hbmQoY21kKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihjbWQuZ2V0
KCkpLT5jbG9zZVR5cGluZygpOworICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4o
Y21kKS0+Y2xvc2VUeXBpbmcoKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkb0FwcGx5KCkK
QEAgLTI0MywxMCArMjM2LDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3Bl
bkNvbQogICAgIC8vIFRoZSBmcmFtZSB3aWxsIGdldCB0b2xkIGluIHRoZSBzYW1lIHdheSBhcyBh
bGwgb3RoZXIgY29tbWFuZHMuCiAgICAgLy8gQnV0IHNpbmNlIHRoaXMgY29tbWFuZCBzdGF5cyBv
cGVuIGFuZCBpcyB1c2VkIGZvciBhZGRpdGlvbmFsIHR5cGluZywgCiAgICAgLy8gd2UgbmVlZCB0
byB0ZWxsIHRoZSBmcmFtZSBoZXJlIGFzIG90aGVyIGNvbW1hbmRzIGFyZSBhZGRlZC4KLSAgICBp
ZiAobV9hcHBseUVkaXRpbmcpIHsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwot
ICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5hcHBsaWVkRWRpdGluZyhjbWQpOwotICAgIH0K
KyAgICBpZiAobV9hcHBseUVkaXRpbmcpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmFw
cGxpZWRFZGl0aW5nKHRoaXMpOwogICAgIG1fYXBwbHlFZGl0aW5nID0gdHJ1ZTsKIH0KIApAQCAt
Mjc3LDQ2ICsyNjgsMzUgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGNvbnN0IFN0
cgogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoY29u
c3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCkKIHsKLSAgICAvLyBGSVhN
RTogSW1wcm92ZSB0eXBpbmcgc3R5bGUuCi0gICAgLy8gU2VlIHRoaXMgYnVnOiA8cmRhcjovL3By
b2JsZW0vMzc2OTg5OT4gSW1wbGVtZW50YXRpb24gb2YgdHlwaW5nIHN0eWxlIG5lZWRzIGltcHJv
dmVtZW50Ci0gICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCktPnR5cGluZ1N0eWxlKCkgfHwgbV9j
bWRzLmNvdW50KCkgPT0gMCkgewotICAgICAgICBJbnNlcnRUZXh0Q29tbWFuZCAqaW1wbCA9IG5l
dyBJbnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCgpKTsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIg
Y21kKGltcGwpOwotICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwotICAgICAg
ICBpbXBsLT5pbnB1dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEVkaXRDb21tYW5kUHRyIGxhc3RDb21tYW5kID0gbV9jbWRzLmxhc3QoKTsKLSAgICAg
ICAgaWYgKGxhc3RDb21tYW5kLmlzSW5zZXJ0VGV4dENvbW1hbmQoKSkgewotICAgICAgICAgICAg
SW5zZXJ0VGV4dENvbW1hbmQgKmltcGwgPSBzdGF0aWNfY2FzdDxJbnNlcnRUZXh0Q29tbWFuZCAq
PihsYXN0Q29tbWFuZC5nZXQoKSk7Ci0gICAgICAgICAgICBpbXBsLT5pbnB1dCh0ZXh0LCBzZWxl
Y3RJbnNlcnRlZFRleHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW5zZXJ0VGV4
dENvbW1hbmQgKmltcGwgPSBuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQoKSk7Ci0gICAg
ICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQoaW1wbCk7Ci0gICAgICAgICAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShjbWQpOwotICAgICAgICAgICAgaW1wbC0+aW5wdXQodGV4dCwgc2VsZWN0
SW5zZXJ0ZWRUZXh0KTsKLSAgICAgICAgfQorICAgIFJlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4g
Y29tbWFuZDsKKyAgICBpZiAoIWRvY3VtZW50KCktPmZyYW1lKCktPnR5cGluZ1N0eWxlKCkgJiYg
IW1fY29tbWFuZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEVkaXRDb21tYW5kKiBsYXN0Q29tbWFu
ZCA9IG1fY29tbWFuZHMubGFzdCgpLmdldCgpOworICAgICAgICBpZiAobGFzdENvbW1hbmQtPmlz
SW5zZXJ0VGV4dENvbW1hbmQoKSkKKyAgICAgICAgICAgIGNvbW1hbmQgPSBzdGF0aWNfY2FzdDxJ
bnNlcnRUZXh0Q29tbWFuZCo+KGxhc3RDb21tYW5kKTsKKyAgICB9CisgICAgaWYgKCFjb21tYW5k
KSB7CisgICAgICAgIGNvbW1hbmQgPSBuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQoKSk7
CisgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOwogICAgIH0KKyAgICBj
b21tYW5kLT5pbnB1dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwogICAgIHR5cGluZ0FkZGVk
VG9PcGVuQ29tbWFuZCgpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVh
aygpCiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnRMaW5lQnJlYWtDb21tYW5k
KGRvY3VtZW50KCkpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBJbnNlcnRMaW5lQnJlYWtDb21tYW5kKGRvY3VtZW50
KCkpKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoKTsKIH0KIAogdm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogewotICAgIEVkaXRDb21tYW5kUHRy
IGNtZChuZXcgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVudCgpKSk7Ci0g
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShuZXcgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVudCgpKSk7CiAg
ICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCkKIHsKLSAgICBFZGl0Q29t
bWFuZFB0ciBjbWQobmV3IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQoZG9jdW1lbnQoKSkpOwotICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUobmV3IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQoZG9jdW1lbnQoKSkpOwogICAgIHR5cGluZ0Fk
ZGVkVG9PcGVuQ29tbWFuZCgpOwogfQogCkluZGV4OiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisr
KyBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDIxICs0MSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIEluc2VydFBhcmFncmFwaFNl
cGFyYXRvckluUXVvdGVkQ29udGVudAogICAgIH07CiAKLSAgICBUeXBpbmdDb21tYW5kKERvY3Vt
ZW50ICpkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQsIGNvbnN0IFN0cmluZyAmdGV4dCA9ICIiLCBi
b29sIHNlbGVjdEluc2VydGVkVGV4dCA9IGZhbHNlLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgVHlwaW5nQ29tbWFuZChEb2N1bWVudCos
IEVUeXBpbmdDb21tYW5kLCBjb25zdCBTdHJpbmcmIHRleHQgPSAiIiwgYm9vbCBzZWxlY3RJbnNl
cnRlZFRleHQgPSBmYWxzZSwgVGV4dEdyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OwogCi0gICAgc3RhdGljIHZvaWQgZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCAqLCBib29sIHNt
YXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9IENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKLSAgICBzdGF0aWMgdm9pZCBmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChE
b2N1bWVudCAqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICBzdGF0aWMgdm9pZCBpbnNlcnRU
ZXh0KERvY3VtZW50ICosIGNvbnN0IFN0cmluZyAmLCBib29sIHNlbGVjdEluc2VydGVkVGV4dCA9
IGZhbHNlKTsKLSAgICBzdGF0aWMgdm9pZCBpbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQgKik7Ci0g
ICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50ICopOwotICAg
IHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1
bWVudCAqKTsKLSAgICBzdGF0aWMgYm9vbCBpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChjb25z
dCBFZGl0Q29tbWFuZFB0ciAmKTsKLSAgICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhjb25zdCBF
ZGl0Q29tbWFuZFB0ciAmKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVLZXlQcmVzc2VkKERvY3Vt
ZW50KiwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CisgICAgc3RhdGljIHZvaWQgZm9yd2FyZERlbGV0ZUtleVByZXNzZWQo
RG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFudWxhcml0eSA9IENo
YXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRUZXh0KERvY3VtZW50
KiwgY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSk7CisgICAg
c3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERvY3VtZW50Kik7CisgICAgc3RhdGljIHZvaWQg
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50Kik7CisgICAgc3RhdGljIHZvaWQgaW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50Kik7CisgICAgc3Rh
dGljIGJvb2wgaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQoY29uc3QgRWRpdENvbW1hbmQqKTsK
KyAgICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhFZGl0Q29tbWFuZCopOwogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24oKSBjb25zdDsKIAotICAgIGJvb2wgb3BlbkZvck1vcmVUeXBpbmcoKSBjb25zdCB7IHJldHVy
biBtX29wZW5Gb3JNb3JlVHlwaW5nOyB9CisgICAgYm9vbCBpc09wZW5Gb3JNb3JlVHlwaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGVuRm9yTW9yZVR5cGluZzsgfQogICAgIHZvaWQgY2xvc2VUeXBp
bmcoKSB7IG1fb3BlbkZvck1vcmVUeXBpbmcgPSBmYWxzZTsgfQogCiAgICAgdm9pZCBpbnNlcnRU
ZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQpOwpAQCAtODcs
NCArODcsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBfX3R5cGluZ19jb21tYW5kX2hfXworI2VuZGlmIC8vIHR5cGluZ19jb21tYW5kX2hfXwpJbmRl
eDogZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAkocmV2aXNpb24g
MTU4MDcpCisrKyBlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1X
cmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29t
bWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIEVsZW1lbnQgKmVsZW1lbnQpCi0gICAgOiBFZGl0Q29t
bWFuZChkb2N1bWVudCksIG1fZWxlbWVudChlbGVtZW50KQorV3JhcENvbnRlbnRzSW5EdW1teVNw
YW5Db21tYW5kOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQoRWxlbWVudCogZWxlbWVu
dCkKKyAgICA6IEVkaXRDb21tYW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpLCBtX2VsZW1lbnQoZWxl
bWVudCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIH0KSW5kZXg6IGVkaXRpbmcvV3JhcENv
bnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9XcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaAkocmV2aXNpb24gMTU4MDcpCisrKyBlZGl0aW5nL1dy
YXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjMsMTggKzIzLDE2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIF9fd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmRfaF9fCi0jZGVmaW5lIF9f
d3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmRfaF9fCisjaWZuZGVmIHdyYXBfY29u
dGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kX2hfXworI2RlZmluZSB3cmFwX2NvbnRlbnRzX2lu
X2R1bW15X3NwYW5fY29tbWFuZF9oX18KIAogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5k
IDogcHVibGljIEVkaXRDb21tYW5kCi17CitjbGFzcyBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNv
bW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFdyYXBDb250ZW50c0lu
RHVtbXlTcGFuQ29tbWFuZChEb2N1bWVudCAqLCBFbGVtZW50ICopOwotICAgIHZpcnR1YWwgfldy
YXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZCgpIHsgfQorICAgIFdyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZChFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKQEAgLTQ2LDQgKzQ0LDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX193cmFwX2NvbnRlbnRzX2lu
X2R1bW15X3NwYW5fY29tbWFuZF9oX18KKyNlbmRpZiAvLyB3cmFwX2NvbnRlbnRzX2luX2R1bW15
X3NwYW5fY29tbWFuZF9oX18KSW5kZXg6IGVkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBlZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDE1ODA3KQorKysgZWRpdGluZy9o
dG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIFBvc2l0
aW9uOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCi1jb25zdCB1bnNp
Z25lZCBzaG9ydCBOT05fQlJFQUtJTkdfU1BBQ0UgPSAweGEwOworY29uc3QgVUNoYXIgTk9OX0JS
RUFLSU5HX1NQQUNFID0gMHhhMDsKIAogUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KGNvbnN0IFBvc2l0aW9uJik7CiBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7CkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTU4MDcpCisrKyBwYWdlL0ZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIGJvb2wgRnJhbWU6OmRpZE9wZW5VUkwoY29u
c3QgS1VSTCYgdXJsKQogICBjYW5jZWxSZWRpcmVjdGlvbigpOwogICAKICAgLy8gY2xlYXIgbGFz
dCBlZGl0IGNvbW1hbmQKLSAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBFZGl0Q29tbWFuZFB0cigp
OworICBkLT5tX2xhc3RFZGl0Q29tbWFuZCA9IDA7CiAgIAogICBjbG9zZVVSTCgpOwogCkBAIC0x
MjY3LDkgKzEyNjcsNyBAQCB2b2lkIEZyYW1lOjpzZXRGb2N1c05vZGVJZk5lZWRlZCgpCiAgICAg
aWYgKCFkb2N1bWVudCgpIHx8IGQtPm1fc2VsZWN0aW9uLmlzTm9uZSgpIHx8ICFkLT5tX2lzQWN0
aXZlKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlICpzdGFydE5vZGUgPSBkLT5tX3NlbGVj
dGlvbi5zdGFydCgpLm5vZGUoKTsKLSAgICBOb2RlICp0YXJnZXQgPSBzdGFydE5vZGUgPyBzdGFy
dE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7Ci0gICAgCisgICAgTm9kZSogdGFyZ2V0
ID0gZC0+bV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmICh0YXJnZXQp
IHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRhcmdldC0+cmVuZGVyZXIoKTsK
IApAQCAtMTk1OSw5ICsxOTU3LDcgQEAgdm9pZCBGcmFtZTo6c2VsZWN0QWxsKCkKICAgICBpZiAo
IWQtPm1fZG9jKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTm9kZSAqc3RhcnROb2RlID0g
ZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7Ci0gICAgTm9kZSAqcm9vdCA9IHN0YXJ0Tm9k
ZSAmJiBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPyBzdGFydE5vZGUtPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSA6IGQtPm1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAKKyAgICBO
b2RlKiByb290ID0gZC0+bV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSA/IGQtPm1fc2Vs
ZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IGQtPm1fZG9jLT5kb2N1bWVudEVsZW1lbnQo
KTsKICAgICBzZWxlY3RDb250ZW50c09mTm9kZShyb290KTsKICAgICBzZWxlY3RGcmFtZUVsZW1l
bnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwogfQpAQCAtMjAyOCw3NyArMjAyNCw3NyBAQCB2
b2lkIEZyYW1lOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtCiB7CiB9CiAKLUVkaXRDb21t
YW5kUHRyIEZyYW1lOjpsYXN0RWRpdENvbW1hbmQoKQorRWRpdENvbW1hbmQqIEZyYW1lOjpsYXN0
RWRpdENvbW1hbmQoKQogewotICAgIHJldHVybiBkLT5tX2xhc3RFZGl0Q29tbWFuZDsKKyAgICBy
ZXR1cm4gZC0+bV9sYXN0RWRpdENvbW1hbmQuZ2V0KCk7CiB9CiAKLXZvaWQgZGlzcGF0Y2hFZGl0
YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQoTm9kZSogcm9vdCkKK3N0YXRpYyB2b2lkIGRpc3BhdGNo
RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyhjb25zdCBFZGl0Q29tbWFuZCYgY29tbWFuZCkK
IHsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQgPSBuZXcgRXZlbnQoa2h0bWxF
ZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci0gICAgRXZlbnRUYXJn
ZXROb2RlQ2FzdChyb290KS0+ZGlzcGF0Y2hFdmVudChldnQsIGVjLCB0cnVlKTsKKyAgICBFbGVt
ZW50KiBzdGFydFJvb3QgPSBjb21tYW5kLnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIGVuZFJvb3QgPSBjb21tYW5kLmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGlmIChzdGFydFJvb3QpCisgICAgICAgIHN0
YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoa2h0bWxFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnQsIGZhbHNlLCBmYWxzZSksIGVjLCB0cnVlKTsKKyAgICBpZiAoZW5kUm9vdCAmJiBl
bmRSb290ICE9IHN0YXJ0Um9vdCkKKyAgICAgICAgZW5kUm9vdC0+ZGlzcGF0Y2hFdmVudChuZXcg
RXZlbnQoa2h0bWxFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSksIGVj
LCB0cnVlKTsKIH0KIAotdm9pZCBGcmFtZTo6YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIm
IGNtZCkKK3ZvaWQgRnJhbWU6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+
IGNtZCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQuZW5kaW5nU2VsZWN0aW9u
KCkpOworICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cygqY21kKTsKKwor
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogICAg
IGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkKICAgICAgICAgc2V0U2VsZWN0aW9uKHNl
bCwgZmFsc2UpOwogICAgIAotICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50
KCFzZWxlY3Rpb24oKS5pc05vbmUoKSA/IHNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpLT5yb290
RWRpdGFibGVFbGVtZW50KCkgOiAwKTsKLQogICAgIC8vIE5vdyBzZXQgdGhlIHR5cGluZyBzdHls
ZSBmcm9tIHRoZSBjb21tYW5kLiBDbGVhciBpdCB3aGVuIGRvbmUuCiAgICAgLy8gVGhpcyBoZWxw
cyBtYWtlIHRoZSBjYXNlIHdvcmsgd2hlcmUgeW91IGNvbXBsZXRlbHkgZGVsZXRlIGEgcGllY2UK
ICAgICAvLyBvZiBzdHlsZWQgdGV4dCBhbmQgdGhlbiB0eXBlIGEgY2hhcmFjdGVyIGltbWVkaWF0
ZWx5IGFmdGVyLgogICAgIC8vIFRoYXQgbmV3IGNoYXJhY3RlciBuZWVkcyB0byB0YWtlIG9uIHRo
ZSBzdHlsZSBvZiB0aGUganVzdC1kZWxldGVkIHRleHQuCiAgICAgLy8gRklYTUU6IEltcHJvdmUg
dHlwaW5nIHN0eWxlLgogICAgIC8vIFNlZSB0aGlzIGJ1ZzogPHJkYXI6Ly9wcm9ibGVtLzM3Njk4
OTk+IEltcGxlbWVudGF0aW9uIG9mIHR5cGluZyBzdHlsZSBuZWVkcyBpbXByb3ZlbWVudAotICAg
IGlmIChjbWQudHlwaW5nU3R5bGUoKSkgewotICAgICAgICBzZXRUeXBpbmdTdHlsZShjbWQudHlw
aW5nU3R5bGUoKSk7Ci0gICAgICAgIGNtZC5zZXRUeXBpbmdTdHlsZSgwKTsKKyAgICBpZiAoY21k
LT50eXBpbmdTdHlsZSgpKSB7CisgICAgICAgIHNldFR5cGluZ1N0eWxlKGNtZC0+dHlwaW5nU3R5
bGUoKSk7CisgICAgICAgIGNtZC0+c2V0VHlwaW5nU3R5bGUoMCk7CiAgICAgfQogCiAgICAgLy8g
Q29tbWFuZCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgZWRpdCBjb21tYW5kIG9ubHkgaW4gdGhlIGNh
c2Ugb2YgdHlwaW5nCi0gICAgaWYgKGQtPm1fbGFzdEVkaXRDb21tYW5kID09IGNtZCkgewotICAg
ICAgICBhc3NlcnQoY21kLmlzVHlwaW5nQ29tbWFuZCgpKTsKLSAgICB9CisgICAgaWYgKGQtPm1f
bGFzdEVkaXRDb21tYW5kID09IGNtZCkKKyAgICAgICAgYXNzZXJ0KGNtZC0+aXNUeXBpbmdDb21t
YW5kKCkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBPbmx5IHJlZ2lzdGVyIGEgbmV3IHVuZG8g
Y29tbWFuZCBpZiB0aGUgY29tbWFuZCBwYXNzZWQgaW4gaXMKICAgICAgICAgLy8gZGlmZmVyZW50
IGZyb20gdGhlIGxhc3QgY29tbWFuZAorICAgICAgICBkLT5tX2xhc3RFZGl0Q29tbWFuZCA9IGNt
ZC5nZXQoKTsKICAgICAgICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjbWQpOwotICAgICAgICBk
LT5tX2xhc3RFZGl0Q29tbWFuZCA9IGNtZDsKICAgICB9CiAgICAgcmVzcG9uZFRvQ2hhbmdlZENv
bnRlbnRzKCk7CiB9CiAKLXZvaWQgRnJhbWU6OnVuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQ
dHImIGNtZCkKK3ZvaWQgRnJhbWU6OnVuYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29t
bWFuZD4gY21kKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5zdGFydGluZ1Nl
bGVjdGlvbigpKTsKKyAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoKmNt
ZCk7CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQtPnN0YXJ0aW5nU2VsZWN0aW9u
KCkpOwogICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkKICAgICAgICAgc2V0U2Vs
ZWN0aW9uKHNlbCwgdHJ1ZSk7CiAgICAgCi0gICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnQoIXNlbGVjdGlvbigpLmlzTm9uZSgpID8gc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2Rl
KCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDApOwotICAgICAgICAKKyAgICBkLT5tX2xhc3RF
ZGl0Q29tbWFuZCA9IDA7CiAgICAgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjbWQpOwogICAgIHJl
c3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwotICAgIGQtPm1fbGFzdEVkaXRDb21tYW5kID0gRWRp
dENvbW1hbmRQdHI6OmVtcHR5Q29tbWFuZCgpOwogfQogCi12b2lkIEZyYW1lOjpyZWFwcGxpZWRF
ZGl0aW5nKEVkaXRDb21tYW5kUHRyJiBjbWQpCit2b2lkIEZyYW1lOjpyZWFwcGxpZWRFZGl0aW5n
KFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+IGNtZCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVy
IHNlbChjbWQuZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50
Q2hhbmdlZEV2ZW50cygqY21kKTsKKworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC0+
ZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkK
ICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCwgdHJ1ZSk7CiAgICAgCi0gICAgZGlzcGF0Y2hFZGl0
YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQoIXNlbGVjdGlvbigpLmlzTm9uZSgpID8gc2VsZWN0aW9u
KCkuc3RhcnQoKS5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDApOwotICAgICAgICAK
KyAgICBkLT5tX2xhc3RFZGl0Q29tbWFuZCA9IDA7CiAgICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5k
byhjbWQpOwogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwotICAgIGQtPm1fbGFzdEVk
aXRDb21tYW5kID0gRWRpdENvbW1hbmRQdHI6OmVtcHR5Q29tbWFuZCgpOwogfQogCiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiAqRnJhbWU6OnR5cGluZ1N0eWxlKCkgY29uc3QKQEAgLTIyMjAs
MTAgKzIyMTYsOCBAQCB2b2lkIEZyYW1lOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTCiAg
ICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxlcywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5
cGluZyBzdHlsZS4KICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2Nr
U3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNvcHlCbG9ja1Byb3BlcnRpZXMoKTsKICAgICBibG9ja1N0
eWxlLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgaWYgKGRvY3VtZW50KCkgJiYgYmxv
Y2tTdHlsZS0+bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcg
QXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgZWRpdGluZ0Fj
dGlvbikpOwotICAgICAgICBjbWQuYXBwbHkoKTsKLSAgICB9CisgICAgaWYgKGRvY3VtZW50KCkg
JiYgYmxvY2tTdHlsZS0+bGVuZ3RoKCkgPiAwKQorICAgICAgICBhcHBseUNvbW1hbmQobmV3IEFw
cGx5U3R5bGVDb21tYW5kKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rp
b24pKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5n
IHN0eWxlLgogICAgIGQtPm1fdHlwaW5nU3R5bGUgPSBtdXRhYmxlU3R5bGUucmVsZWFzZSgpOwpA
QCAtMjI0MCwxMCArMjIzNCw4IEBAIHZvaWQgRnJhbWU6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU2VsZWN0
aW9uOjpSQU5HRToKLSAgICAgICAgICAgIGlmIChkb2N1bWVudCgpICYmIHN0eWxlKSB7Ci0gICAg
ICAgICAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1
bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOwotICAgICAgICAgICAgICAgIGNtZC5hcHBs
eSgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkgJiYgc3R5bGUp
CisgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1
bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQogfQpAQCAtMjI1NiwxMCArMjI0OCw4IEBAIHZvaWQgRnJhbWU6OmFwcGx5UGFyYWdyYXBoU3R5
bGUoQ1NTU3R5bGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNlbGVjdGlvbjo6
Q0FSRVQ6CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKLSAgICAgICAgICAgIGlmIChk
b2N1bWVudCgpICYmIHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgRWRpdENvbW1hbmRQdHIgY21k
KG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbiwg
QXBwbHlTdHlsZUNvbW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKSk7Ci0gICAgICAgICAgICAg
ICAgY21kLmFwcGx5KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQo
KSAmJiBzdHlsZSkKKyAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQobmV3IEFwcGx5U3R5bGVD
b21tYW5kKGRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFu
ZDo6Rm9yY2VCbG9ja1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
SW5kZXg6IHBhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmgJKHJldmlzaW9u
IDE1ODA3KQorKysgcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBA
IGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJh
dGlvbjsKIGNsYXNzIERyYXdDb250ZW50c0V2ZW50OwogY2xhc3MgRE9NV2luZG93OwotY2xhc3Mg
RWRpdENvbW1hbmRQdHI7CitjbGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNzIEZyYW1lUHJpdmF0ZTsK
IGNsYXNzIEZyYW1lVHJlZTsKIGNsYXNzIEtKU1Byb3h5OwpAQCAtNDIwLDIyICs0MjAsMjIgQEAg
cHVibGljOgogICAvKioKICAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgZWRpdCBjb21tYW5k
IGFwcGxpZWQuCiAgICAqLwotICBFZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQoKTsKKyAg
RWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCgpOwogCiAgIC8qKgogICAgKiBDYWxsZWQgd2hl
biBlZGl0aW5nIGhhcyBiZWVuIGFwcGxpZWQuCiAgICAqLwotICB2b2lkIGFwcGxpZWRFZGl0aW5n
KEVkaXRDb21tYW5kUHRyJik7CisgIHZvaWQgYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0
Q29tbWFuZD4pOwogCiAgIC8qKgogICAgKiBDYWxsZWQgd2hlbiBlZGl0aW5nIGhhcyBiZWVuIHVu
YXBwbGllZC4KICAgICovCi0gIHZvaWQgdW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciYp
OworICB2b2lkIHVuYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogCiAg
IC8qKgogICAgKiBDYWxsZWQgd2hlbiBlZGl0aW5nIGhhcyBiZWVuIHJlYXBwbGllZC4KICAgICov
Ci0gIHZvaWQgcmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciYpOworICB2b2lkIHJlYXBw
bGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogCiAgIC8qKgogICAgKiBSZXR1
cm5zIHRoZSB0eXBpbmcgc3R5bGUgZm9yIHRoZSBkb2N1bWVudC4KQEAgLTU1Miw4ICs1NTIsOCBA
QCBwdWJsaWM6CiAgIHZpcnR1YWwgdm9pZCB1bmZvY3VzV2luZG93KCkgPSAwOwogICB2aXJ0dWFs
IHZvaWQgY3JlYXRlRW1wdHlEb2N1bWVudCgpID0gMDsKICAgdmlydHVhbCBSYW5nZSogbWFya2Vk
VGV4dFJhbmdlKCkgY29uc3QgPSAwOwotICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9y
VW5kbyhjb25zdCBFZGl0Q29tbWFuZFB0ciYpID0gMDsKLSAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
Q29tbWFuZEZvclJlZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKSA9IDA7CisgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KSA9IDA7Cisg
IHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8RWRpdENvbW1h
bmQ+KSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpID0gMDsK
ICAgdmlydHVhbCB2b2lkIGlzc3VlVW5kb0NvbW1hbmQoKSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBp
c3N1ZVJlZG9Db21tYW5kKCkgPSAwOwpJbmRleDogcGFnZS9GcmFtZVByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwYWdlL0ZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTgwNykKKysrIHBhZ2UvRnJh
bWVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9iQ2xlYXJlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9p
c0FjdGl2ZSA6IDE7CiAKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgbV9sYXN0RWRpdENvbW1hbmQ7
CisgICAgICAgIFJlZlB0cjxFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENvbW1hbmQ7CiAgICAgICAg
IGludCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKICAgICAgICAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3R5cGluZ1N0eWxlOwogCkluZGV4OiBwbGF0Zm9y
bS9nZGsvRnJhbWVHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAko
cmV2aXNpb24gMTU4MDcpCisrKyBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDggKzEwMCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlKiBnZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKTsKICAgICB2aXJ0
dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldChX
aWRnZXQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKGNvbnN0
IEVkaXRDb21tYW5kUHRyJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclJl
ZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21t
YW5kRm9yVW5kbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CisgICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQ29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogICAgIHZpcnR1
YWwgdm9pZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogICAgIHZpcnR1YWwgdm9pZCBpc3N1
ZVVuZG9Db21tYW5kKCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlUmVkb0NvbW1hbmQoKTsKSW5k
ZXg6IHBsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBs
YXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAxNTgwNykKKysrIHBs
YXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgs
NyArMTc4LDcgQEAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRPYgogS0pT
OjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0
KFdpZGdldCAqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29sIEZyYW1lR2Rr
OjpjYW5SZWRvKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogYm9vbCBG
cmFtZUdkazo6Y2FuVW5kbygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0K
LXZvaWQgRnJhbWVHZGs6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oV2ViQ29yZTo6RWRpdENvbW1h
bmRQdHIgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgRnJhbWVHZGs6OnJlZ2lz
dGVyQ29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQogYm9vbCBGcmFtZUdkazo6cnVuSmF2YVNjcmlwdFByb21wdChTdHJp
bmcgY29uc3QmLCBTdHJpbmcgY29uc3QmLCBTdHJpbmcgJikgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQogYm9vbCBGcmFtZUdkazo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiB2b2lkIEZyYW1lR2RrOjpwcmludCgp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgRnJhbWVHZGs6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24KIEZyYW1lKiBGcmFtZUdkazo6Y3JlYXRlRnJhbWUo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVu
dCwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikgeyByZXR1cm4gMDsgfQogCiB2b2lkIEZyYW1lR2Rr
OjpzYXZlRG9jdW1lbnRTdGF0ZSgpIHsgfQotdm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5k
Rm9yVW5kbyhXZWJDb3JlOjpFZGl0Q29tbWFuZFB0ciBjb25zdCYpIHsgfQordm9pZCBGcmFtZUdk
azo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5k
PikgeyB9CiB2b2lkIEZyYW1lR2RrOjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyh2b2lkKSB7IH0K
IFN0cmluZyBGcmFtZUdkazo6aW5jb21pbmdSZWZlcnJlcigpIGNvbnN0IHsgcmV0dXJuIFN0cmlu
ZygpOyB9CiB2b2lkIEZyYW1lR2RrOjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbiBjb25zdCYpIHsgfQpJbmRleDogcGxhdGZvcm0vd2luL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vd2luL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDE1ODA3KQorKysgcGxhdGZvcm0vd2luL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogRnJhbWVXaW46OmdldE9iCiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZSogRnJhbWVXaW46OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0ICopIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIGJvb2wgRnJhbWVXaW46OmNhblJlZG8oKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29sIEZyYW1lV2luOjpjYW5VbmRvKCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBGcmFtZVdpbjo6cmVn
aXN0ZXJDb21tYW5kRm9yUmVkbyhXZWJDb3JlOjpFZGl0Q29tbWFuZFB0ciBjb25zdCYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQordm9pZCBGcmFtZVdpbjo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQ
YXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiBi
b29sIEZyYW1lV2luOjpydW5KYXZhU2NyaXB0UHJvbXB0KFN0cmluZyBjb25zdCYsU3RyaW5nIGNv
bnN0JixTdHJpbmcgJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogYm9vbCBGcmFt
ZVdpbjo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIGZhbHNlOyB9CiBib29sIEZyYW1lV2luOjpvcGVuVVJMKEtVUkwgY29uc3QmKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwOyB9CkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBGcmFtZVdp
bjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbgogc3RhdGljIGludCBmcmFtZU51bWJlciA9IDA7
CiBGcmFtZSogRnJhbWVXaW46OmNyZWF0ZUZyYW1lKEtVUkwgY29uc3QmLFN0cmluZyBjb25zdCYs
RWxlbWVudCosU3RyaW5nIGNvbnN0JikgeyByZXR1cm4gMDsgfQogdm9pZCBGcmFtZVdpbjo6c2F2
ZURvY3VtZW50U3RhdGUoKSB7IH0KLXZvaWQgRnJhbWVXaW46OnJlZ2lzdGVyQ29tbWFuZEZvclVu
ZG8oV2ViQ29yZTo6RWRpdENvbW1hbmRQdHIgY29uc3QmKSB7IH0KK3ZvaWQgRnJhbWVXaW46OnJl
Z2lzdGVyQ29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pIHsg
fQogdm9pZCBGcmFtZVdpbjo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnModm9pZCkgeyB9CiBTdHJp
bmcgRnJhbWVXaW46OmluY29taW5nUmVmZXJyZXIoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsg
fQogdm9pZCBGcmFtZVdpbjo6bWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3JkcyhXZWJDb3Jl
OjpWaXNpYmxlUG9zaXRpb24gY29uc3QmKSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10186</attachid>
            <date>2006-08-23 17:00:20 -0700</date>
            <delta_ts>2006-08-23 23:20:30 -0700</delta_ts>
            <desc>editing cleanup patch that also fixes this bug, including change log and test</desc>
            <filename>EditingPatch.txt</filename>
            <type>text/plain</type>
            <size>203712</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1OTkxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAgQEAKKzIwMDYtMDgtMjMgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC9mb3Jtcy9kcmFnLWludG8tdGV4dGFyZWEtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2RyYWctaW50by10ZXh0YXJlYS5odG1sOiBBZGRlZC4K
KwogMjAwNi0wOC0yMiAgVHJleSBNYXR0ZXNvbiAgPHRyZXlAdXNhLm5ldD4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZHJhZy1pbnRv
LXRleHRhcmVhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2RyYWctaW50by10ZXh0YXJlYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2RyYWctaW50by10ZXh0YXJlYS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElO
RyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZTojZG9jdW1lbnQtZnJhZ21lbnQgcmVwbGFjaW5n
RE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViB0byAwIG9mIERJViBnaXZlbkFjdGlvbjpXZWJW
aWV3SW5zZXJ0QWN0aW9uRHJvcHBlZAorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBE
SVYgdG8gMzkgb2YgI3RleHQgPiBESVYgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0
aW9uCitUaGlzIHRlc3RzIGRyYWdnaW5nIHRleHQgZnJvbSBhbiBpbnB1dCBlbGVtZW50IGludG8g
YSB0ZXh0IGFyZWEgZWxlbWVudC4KKworV2hlbiB0aGUgdGVzdCBpcyBydW4sIHRoZSBmb2xsb3cg
dGV4dCBmaWVsZCBzaG91bGQgYmUgZW1wdHk6CisKKworQW5kIHRoZSBmb2xsb3dpbmcgdGV4dCBh
cmVhIHNob3VsZCBoYXZlIHRleHQgaW4gaXQ6CisKKworVGVzdCBzdWNjZWVkZWQhCisKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9kcmFnLWludG8tdGV4dGFy
ZWEtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2
ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZHJhZy1pbnRvLXRleHRhcmVhLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9kcmFnLWludG8tdGV4dGFyZWEu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZHJhZy1pbnRvLXRl
eHRhcmVhLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxzY3JpcHQ+CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImlucHV0Iik7CisgICAgdmFyIHggPSA4ICsgaW5wdXQub2Zmc2V0TGVmdCArIGlucHV0Lm9m
ZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgeSA9IDggKyBpbnB1dC5vZmZzZXRUb3AgKyBpbnB1dC5v
ZmZzZXRIZWlnaHQgLyAyOworCisgICAgdmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRleHRhcmVhIik7CisgICAgdmFyIHR4ID0gOCArIHRleHRhcmVhLm9mZnNldExlZnQg
KyB0ZXh0YXJlYS5vZmZzZXRXaWR0aCAvIDI7CisgICAgdmFyIHR5ID0gOCArIHRleHRhcmVhLm9m
ZnNldFRvcCArIHRleHRhcmVhLm9mZnNldEhlaWdodCAvIDI7CisKKyAgICBpbnB1dC5zZWxlY3Qo
KTsKKworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgCisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8o
eCwgeSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgLy8gV2FpdCBhIG1vbWVu
dCBzbyB0aGF0IHRoZSBtb3VzZURvd24gd2lsbCBraWNrIG9mZiBhIGRyYWcgaW5zdGVhZCBvZiBh
IG5ldyBzZWxlY3Rpb24uCisgICAgLy8gRklYTUU6IFVnaCwgZG9uJ3Qgd2FudCBkZWxheXMgaW4g
bGF5b3V0IHRlc3RzIQorICAgIGV2ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDQwMCk7CisgICAgZXZl
bnRTZW5kZXIubW91c2VNb3ZlVG8odHgsIHR5KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7
CisKKyAgICBpZiAoaW5wdXQudmFsdWUgPT0gIiIgJiYgdGV4dGFyZWEudmFsdWUgPT0gImRyYWcg
dGhpcyB0ZXh0IGludG8gdGhlIHRleHQgYXJlYSBiZWxvdyIpCisgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRleHQgPSAiVGVzdCBzdWNjZWVkZWQhIjsKKyAg
ICBlbHNlCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRl
eHQgPSAiVGVzdCBmYWlsZWQhIElucHV0IHZhbHVlIHdhcyAiICsgaW5wdXQudmFsdWUgKyAiIGFu
ZCB0ZXh0IGFyZWEgdmFsdWUgd2FzICIgKyB0ZXh0YXJlYS52YWx1ZSArICIuIjsKKworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+CisKKzxib2R5
IG9ubG9hZD0icnVuVGVzdCgpIj4KKworPHA+VGhpcyB0ZXN0cyBkcmFnZ2luZyB0ZXh0IGZyb20g
YW4gaW5wdXQgZWxlbWVudCBpbnRvIGEgdGV4dCBhcmVhIGVsZW1lbnQuPC9wPgorPHA+V2hlbiB0
aGUgdGVzdCBpcyBydW4sIHRoZSBmb2xsb3cgdGV4dCBmaWVsZCBzaG91bGQgYmUgZW1wdHk6PC9w
PgorPHA+PGlucHV0IGlkPSJpbnB1dCIgdHlwZT0idGV4dCIgdmFsdWU9ImRyYWcgdGhpcyB0ZXh0
IGludG8gdGhlIHRleHQgYXJlYSBiZWxvdyIgc2l6ZT0iNTAiPjwvcD4KKzxwPkFuZCB0aGUgZm9s
bG93aW5nIHRleHQgYXJlYSBzaG91bGQgaGF2ZSB0ZXh0IGluIGl0OjwvcD4KKzxwPjx0ZXh0YXJl
YSBpZD0idGV4dGFyZWEiIGNvbHM9IjUwIiByb3dzPSIxMCI+PC90ZXh0YXJlYT48L3A+Cis8cCBp
ZD0icmVzdWx0Ij5JZiB0aGUgdGVzdCBoYXMgY29tcGxldGVkIHRoaXMgc2VudGVuY2Ugc2hvdWxk
IGJlIHJlcGxhY2VkIGJ5IGEgc3VjY2VzcyBtZXNzYWdlLjwvcD4KKworPC9ib2R5PgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9kcmFnLWludG8tdGV4dGFyZWEu
aHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKTmFtZTog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjc0IEBACisyMDA2LTA4LTIzICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAtIGZpeCBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTY5CisgICAgICAgICAgUkVHUkVTU0lPTjogTmF0aXZlVGV4
dEFyZWE6IFRleHQgZHJhZ2dlZCBmcm9tIDxpbnB1dCB0eXBlPXRleHQ+IHRvIHRleHRhcmVhIGRp
c2FwcGVhcnMKKyAgICAgICAgLSBlbGltaW5hdGUgdGhlIEVkaXRDb21tYW5kUHRyIGNsYXNzIGZy
b20gZWRpdGluZzsgdXNlIFBhc3NSZWZQdHIgYW5kIFJlZlB0ciBpbnN0ZWFkCisgICAgICAgIC0g
b3RoZXIgZWRpdGluZy1yZWxhdGVkIGNsZWFudXAKKworICAgICAgICAqIGJyaWRnZS9tYWMvRnJh
bWVNYWMuaDogQ2hhbmdlZCBFZGl0Q29tbWFuZFB0ciBwYXJhbWV0ZXJzIHRvIHVzZSBQYXNzUmVm
UHRyPEVkaXRDb21tYW5kPiBpbnN0ZWFkLgorICAgICAgICAqIGJyaWRnZS93aW4vRnJhbWVXaW4u
aDogRGl0dG8uCisgICAgICAgICogYnJpZGdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTWFjOjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JSZWRvKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8pOiBE
aXR0by4KKworICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tOgorICAg
ICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpz
ZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6bWF0Y2hTdHlsZTpdKToKKyAgICAgICAgVXNl
IGFwcGx5Q29tbWFuZCBpbnN0ZWFkIG9mIEVkaXRDb21tYW5kUHRyLiBBbHNvIHJlbW92ZSBub3ct
dW5uZWVkZWQgZG9jdW1lbnQgcGFyYW1ldGVyLgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlk
Z2UgbW92ZVNlbGVjdGlvblRvRHJhZ0NhcmV0OnNtYXJ0TW92ZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGU6XSk6
IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oOiBSZW1vdmVk
IGRvY3VtZW50IHBhcmFtZXRlciBmcm9tIGNvbnN0cnVjdG9yLiBDaGFuZ2VkIG5ldyBjaGlsZAor
ICAgICAgICBwYXJhbWV0ZXIgdG8gYmUgYSBQYXNzUmVmUHRyLiBSZXZlcnNlZCBvcmRlciBvZiBj
aGlsZCBhbmQgcGFyZW50IHBhcmFtZXRlcnMuCisgICAgICAgICogZWRpdGluZy9BcHBlbmROb2Rl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6QXBwZW5k
Tm9kZUNvbW1hbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZE5vZGVDb21tYW5k
Ojpkb0FwcGx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBlbmROb2RlQ29tbWFuZDo6
ZG9VbmFwcGx5KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
Lmg6IFJlbW92ZWQgZG9jdW1lbnQgcGFyYW1ldGVyIGZyb20gY29uc3RydWN0b3IuCisgICAgICAg
ICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6IChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQpOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvQnJl
YWtCbG9ja3F1b3RlQ29tbWFuZC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgRGVwcmVj
YXRlZFB0ckxpc3QuaC4KKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQu
Y3BwOiBNb3ZlZCB0aGUgaW5jbHVkZSBvZiBEZXByZWNhdGVkUHRyTGlzdC5oIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KTogQ2hhbmdlZCBj
b2RlIHRvIGNvbnN0cnVjdCBhIFNlbGVjdGlvbiBleHBsaWNpdGx5CisgICAgICAgIHNpbmNlIHNl
dEVuZGluZ1NlbGVjdGlvbiBpcyBubyBsb25nZXIgb3ZlcmxvYWRlZCBmb3IgUG9zaXRpb24uCisK
KyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmg6IEFkZGVkIGlzRmlyc3RD
b21tYW5kIGZ1bmN0aW9uLiBDaGFuZ2VkIG1fY21kcyBmcm9tCisgICAgICAgIGEgRGVwcmVjYXRl
ZFZhbHVlTGlzdDxFZGl0Q29tbWFuZFB0cj4gdG8gYSBWZWN0b3I8UmVmUHRyPEVkaXRDb21tYW5k
Pj4gYW5kIHJlbmFtZWQgaXQKKyAgICAgICAgbV9jb21tYW5kcyBhbmQgbWFkZSBib3RoIGRvVW5h
cHBseSBhbmQgZG9SZWFwcGx5IHByaXZhdGUuCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6
ZG9VbmFwcGx5KTogUmV3cm90ZSB0byB1c2UgbV9jb21tYW5kcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkb1JlYXBwbHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseUNvbW1hbmRUb0NvbXBvc2l0ZSk6IFJlbW92
ZWQgY29kZSB0byBleHBsaWNpdGx5IHNldCB1cAorICAgICAgICBzdGFydGluZyBhbmQgZW5kaW5n
IHNlbGVjdGlvbiAtLSBub3cgZG9uZSBpbnNpZGUgc2V0UGFyZW50LiBSZXdyb3RlIHRvIHVzZSBt
X2NvbW1hbmRzLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5
U3R5bGUpOiBDaGFuZ2VkIHRvIG5vdCB1c2UgRWRpdENvbW1hbmRQdHIuCisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZWRFbGVtZW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlU3R5bGVkRWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmROb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxp
dFRleHROb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6c3BsaXRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bWVyZ2VJZGVudGljYWxFbGVtZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OndyYXBDb250ZW50c0luRHVtbXlTcGFuKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6am9pblRleHROb2Rlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmlucHV0VGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5O
b2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVs
ZXRlU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmVtb3ZlQ1NTUHJvcGVydHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQXR0cmlidXRlKTogRGl0dG8uIEFsc28gZml4ZWQg
YSBidWcgd2hlcmUgdGhlIGNvZGUKKyAgICAgICAgd291bGQgbm90IHJlbW92ZSBhbiBlbXB0eSBh
dHRyaWJ1dGUgLS0gd2lsbCBub3QgY29tZSB1cCBpbiBwcmFjdGljZSwgYnV0IHdyb25nIGluIHRo
ZW9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0
cmlidXRlKTogQ2hhbmdlZCB0byBub3QgdXNlIEVkaXRDb21tYW5kUHRyLgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VBdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlm
aWNhbnRUZXh0KTogUmV3cm90ZSB0byB1c2UgYSBmb3IgbG9vcC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6IENoYW5nZWQgdG8gbm90IHVz
ZSBFZGl0Q29tbWFuZFB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
OjpicmVha091dE9mRW1wdHlMaXN0SXRlbSk6IENoYW5nZWQgY29kZSB0byBjb25zdHJ1Y3QgYQor
ICAgICAgICBTZWxlY3Rpb24gZXhwbGljaXRseSBzaW5jZSBzZXRFbmRpbmdTZWxlY3Rpb24gaXMg
bm8gbG9uZ2VyIG92ZXJsb2FkZWQgZm9yIFBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQmxvY2tQbGFjZWhvbGRlckVsZW1lbnQpOiBDb2xsYXBzZWQgdGhpcyBjb2RlIHNvIHRoYXQg
dGhlCisgICAgICAgIGJsb2NrIHBsYWNlaG9sZGVyIGNsYXNzIHN0cmluZyBpcyBubyBsb25nZXIg
c3ByZWFkIGFjcm9zcyBtdWx0aXBsZSBmdW5jdGlvbnMuCisgICAgICAgIFBlcmhhcHMgd2UgY2Fu
IGdldCByaWQgb2YgdGhpcyBhbHRvZ2V0aGVyIGF0IHNvbWUgcG9pbnQuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaDogUmVtb3ZlZCB1bm5lZWRlZCBkb2N1
bWVudCBwYXJhbWV0ZXIgZnJvbSBvbmUgY29uc3RydWN0b3IuCisgICAgICAgIEFsc28gcmVtb3Zl
ZCB1bm5lZWRlZCBkZXN0cnVjdG9yLgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaDogUmVtb3ZlZCB1bm5lZWRlZCBkb2N1bWVudCBw
YXJhbWV0ZXIgZnJvbSBvbmUgY29uc3RydWN0b3IuCisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDogKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OkRl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQpOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdENv
bW1hbmQuaDogUmVtb3ZlZCBFQ29tbWFuZFN0YXRlLCBpc0NvbXBvc2l0ZVN0ZXAoKSwgcGFyZW50
KCksIHN0YXRlKCksIHNldFN0YXRlKCksCisgICAgICAgIGFuZCBtb3N0IG92ZXJsb2FkcyBvZiBz
ZXRTdGFydGluZ1NlbGVjdGlvbigpIGFuZCBzZXRFbmRpbmdTZWxlY3Rpb24oKS4gTWFkZSBkb2N1
bWVudCgpIHByb3RlY3RlZAorICAgICAgICBhbmQgbm9uLXZpcnR1YWwuIE1hZGUgc2V0U3RhcnRp
bmdTZWxlY3Rpb24oKSBzZXRFbmRpbmdTZWxlY3Rpb24oKSwgYW5kIHN0eWxlQXRQb3NpdGlvbigp
IHByb3RlY3RlZC4KKyAgICAgICAgTWFkZSBkb0FwcGx5KCksIGRvVW5hcHBseSgpLCBhbmQgZG9S
ZWFwcGx5KCkgcHJpdmF0ZS4gQWRkZWQgc3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksCisg
ICAgICAgIGVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgbV9zdGFydGluZ1Jvb3RFZGl0YWJs
ZUVsZW1lbnQsIGFuZCBtX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQsIHdoaWNoCisgICAgICAg
IGFyZSBuZWVkZWQgc28gd2UgY2FuIGRldGVybWluZSB3aGljaCBlZGl0YWJsZSBlbGVtZW50cyBh
biBlZGl0aW5nIG9wZXJhdGlvbiBhZmZlY3RzLiBDaGFuZ2VkIHNldFBhcmVudCgpCisgICAgICAg
IGFuZCBtX3BhcmVudCB0byB1c2UgQ29tcG9zaXRlRWRpdENvbW1hbmQgaW5zdGVhZCBvZiBFZGl0
Q29tbWFuZC4gUmVtb3ZlZCBFZGl0Q29tbWFuZFB0ci4gQWRkZWQKKyAgICAgICAgYXBwbHlDb21t
YW5kKCkgZnVuY3Rpb24gdGhhdCdzIGNvbnZlbmllbnQgdG8gdXNlIG9uIGEgbmV3bHktY3JlYXRl
ZCBjb21tYW5kLgorICAgICAgICAqIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKTogUmVtb3ZlZCBpbml0aWFsaXphdGlv
biBmb3IgbV9zdGF0ZSwgYW5kIGFkZGVkIGl0IGZvciBzdGFydGluZworICAgICAgICBhbmQgZW5k
aW5nIHJvb3QgZWRpdGFibGUgZWxlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFu
ZDo6YXBwbHkpOiBTaW1wbGlmaWVkIGNoZWNrIGZvciB0b3AgbGV2ZWwgYnkganVzdCBjaGVja2lu
ZyBtX3BhcmVudC4gUmVtb3ZlZAorICAgICAgICBjb2RlIHRvIGFzc2VydCBhbmQgc2V0IG1fc3Rh
cnQuIEVsaW1pbmF0ZWQgdXNlIG9mIEVkaXRDb21tYW5kUHRyLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdENvbW1hbmQ6OnVuYXBwbHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21t
YW5kOjpyZWFwcGx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6c2V0
U3RhcnRpbmdTZWxlY3Rpb24pOiBDaGFuZ2VkIHRvIHNldCByb290IGVkaXRhYmxlIGVsZW1lbnQg
dG9vLiBBbHNvIG1hZGUgdGhpcworICAgICAgICBub3QgY2hhbmdlIHRoZSBzdGFydGluZyBzZWxl
Y3Rpb24gb2YgdGhlIHBhcmVudCB1bmxlc3MgdGhpcyBpcyB0aGUgZmlyc3QgY29tbWFuZCBpbiB0
aGUgcGFyZW50IC0tIGRpZG4ndAorICAgICAgICBtYWtlIHNlbnNlIHRoZSB3YXkgaXQgd2FzLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbik6IENoYW5n
ZWQgdG8gc2V0IHJvb3QgZWRpdGFibGUgZWxlbWVudCB0b28uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0Q29tbWFuZDo6c2V0UGFyZW50KTogQWRkZWQgY29kZSB0byBzZXQgdGhlIHN0YXJ0aW5nIGFu
ZCBlbmRpbmcgc2VsZWN0aW9uIG9uIHRoZSBjaGlsZAorICAgICAgICBiYXNlZCBvbiB0aGUgZW5k
aW5nIHNlbGVjdGlvbiBvZiB0aGUgcGFyZW50LCBmb3JtZXJseSBkb25lIGJ5IGNhbGxlcnMuCisg
ICAgICAgIChXZWJDb3JlOjphcHBseUNvbW1hbmQpOiBBZGRlZC4KKworICAgICAgICAqIGVkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmg6IFR3ZWFrZWQgZm9ybWF0dGluZy4KKyAgICAgICAgKiBl
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6IChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1h
bmQ6OkZvcm1hdEJsb2NrQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5oOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwOiAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBs
eSk6CisKKyAgICAgICAgKiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5kOjpzcGxpdFRyZWVUb05vZGUpOiBSZW1v
dmVkIHVzZSBvZiBFZGl0Q29tbWFuZFB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRl
bnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvIGxpc3Qg
dHlwZSBlbnVtLgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRl
bnRSZWdpb24pOiBSZW1vdmVkIHVzZSBvZiBFZGl0Q29tbWFuZFB0ci4KKworICAgICAgICAqIGVk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oOiBSZW1vdmVkIHVubmVlZGVkIGRvY3Vt
ZW50IHBhcmFtZXRlciB0byBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCk6IERpdHRvLgorCisgICAgICAg
ICogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oOiBSZW5hbWVkIEVMaXN0VHlwZSB0byBFTGlz
dCwgYW5kIHRvb2sgdGhlICJUeXBlIiBzdWZmaXggb2ZmCisgICAgICAgIHRoZSBjb25zdGFudHMu
CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6SW5zZXJ0TGlzdENvbW1hbmQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogRGl0dG8uCisKKyAgICAg
ICAgKiBlZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmg6IFJlbW92ZWQgdW5uZWVkZWQg
ZG9jdW1lbnQgcGFyYW1ldGVyIGZyb20gY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGNoYW5nZWQg
dGhlIHBhcmFtZXRlciBvZiB0aGUgbm9kZSB0byBpbnNlcnQgdG8gYSBQYXNzUmVmUHRyLgorICAg
ICAgICAqIGVkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Okluc2VydE5vZGVCZWZvcmVDb21tYW5kKTog
RGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZDo6ZG9BcHBseSk6IFJlbXZvZWQgdXNlIG9mIEVkaXRDb21tYW5kUHRyLgorCisgICAgICAgICog
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oOiBDaGFuZ2VkIGluc2VydFRhYiB0byB0YWtlIGNv
bnN0IFBvc2l0aW9uJi4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21tYW5kOjppbnB1dCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6Omluc2VydFRhYik6IERpdHRvLgorCisg
ICAgICAgICogZWRpdGluZy9KU0VkaXRvci5oOiBUd2Vha2VkIGZvcm1hdHRpbmcgYW5kIG5hbWVz
LgorICAgICAgICAqIGVkaXRpbmcvSlNFZGl0b3IuY3BwOiBEaXR0by4gQWxzbyBjaGFuZ2VkIHBs
YWNlcyB0aGF0IHVzZSBFZGl0Q29tbWFuZFB0ci4KKworICAgICAgICAqIGVkaXRpbmcvSm9pblRl
eHROb2Rlc0NvbW1hbmQuaDogUmVtb3ZlZCB1bm5lZWVkZWQgZG9jdW1lbnQgcG9pbnRlcgorICAg
ICAgICAqIGVkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Sm9pblRleHROb2Rlc0NvbW1hbmQ6OkpvaW5UZXh0Tm9kZXNDb21tYW5kKTogRGl0dG8uCisg
ICAgICAgICogZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpNZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9Nb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuaDogQ2hhbmdlZCBFTGlzdFR5cGUgdG8gYmUgbmFtZWQgVHlwZSBh
bmQgYmUgYSBtZW1iZXIgb2YKKyAgICAgICAgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21t
YW5kLiBBbHNvIGNoYW5nZWQgbV9saXN0RWxlbWVudCB0byBiZSBhIFJlZlB0cjxOb2RlPi4KKyAg
ICAgICAgKiBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRTdGFydEVuZExpc3RDaGlsZHJlbik6IENoYW5nZWQgcGFyYW1ldGVycyB0byBi
ZSByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAgICAgIChXZWJDb3JlOjpJbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
Q29tbWFuZCk6CisgICAgICAgIENoYW5nZWQgdG8gdXNlIFR5cGUgaW5zdGVhZCBvZiBFTGlzdFR5
cGUuCisgICAgICAgIChXZWJDb3JlOjpjYW5JbmNyZWFzZUxpc3RMZXZlbCk6IENoYW5nZWQgcGFy
YW1ldGVycyB0byBiZSByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAgICAgIChX
ZWJDb3JlOjpJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmRvQXBwbHkpOiBVcGRh
dGVkIGZvciBjaGFuZ2UgdG8gY2FuSW5jcmVhc2VMaXN0TGV2ZWwuCisgICAgICAgIChXZWJDb3Jl
OjpJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmNhbkluY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmNyZWFzZVNlbGVjdGlvbkxp
c3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsV2l0aFR5cGUpOgorICAg
ICAgICBDaGFuZ2VkIHRvIG5vdCB1c2UgRWRpdENvbW1hbmRQdHIuCisgICAgICAgIChXZWJDb3Jl
OjpjYW5EZWNyZWFzZUxpc3RMZXZlbCk6IENoYW5nZWQgcGFyYW1ldGVycyB0byBiZSByZWZlcmVu
Y2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAgICAgIChXZWJDb3JlOjpEZWNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbENvbW1hbmQ6OmRvQXBwbHkpOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gY2Fu
RGVjcmVhc2VMaXN0TGV2ZWwuCisgICAgICAgIChXZWJDb3JlOjpEZWNyZWFzZVNlbGVjdGlvbkxp
c3RMZXZlbENvbW1hbmQ6OmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmRlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsKTogQ2hhbmdlZCB0byBub3QgdXNlCisgICAgICAgIEVkaXRD
b21tYW5kUHRyLgorCisgICAgICAgICogZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oOiBS
ZW1vdmVkIHVubmVjZXNzYXJ5IGRvY3VtZW50IHBhcmFtZXRlciBhbmQgY2hhbmdlZCB0aGUgZnJh
Z21lbnQKKyAgICAgICAgcGFyYW1ldGVyIHRvIGJlIGEgUGFzc1JlZlB0ci4KKyAgICAgICAgKiBl
ZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vdmVT
ZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOiBHb3QgcmlkIG9mIHVzZSBv
ZiBFZGl0Q29tbWFuZFB0ci4KKworICAgICAgICAqIGVkaXRpbmcvUmViYWxhbmNlV2hpdGVzcGFj
ZUNvbW1hbmQuaDogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBkb2N1bWVudCBwYXJhbWV0ZXIuCisgICAg
ICAgICogZWRpdGluZy9SZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZDo6UmViYWxhbmNlV2hpdGVzcGFjZUNv
bW1hbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlYmFsYW5jZVdoaXRlc3BhY2VDb21t
YW5kOjpkb0FwcGx5KTogR290IHJpZCBvZiB1c2Ugb2YgRWRpdENvbW1hbmRQdHIuCisKKyAgICAg
ICAgKiBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oOiBUd2Vha2VkIGZvcm1hdHRp
bmcuCisKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmg6IFJl
bW92ZWQgdW5uZWNlc3NhcnkgZG9jdW1lbnQgcGFyYW1ldGVyLgorICAgICAgICAqIGVkaXRpbmcv
UmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3Zl
Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OlJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmg6IFJlbW92ZWQgdW5uZWNl
c3NhcnkgZG9jdW1lbnQgcGFyYW1ldGVyLgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlTm9kZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5v
ZGVDb21tYW5kKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW5Db21tYW5kLmg6IFJlbW92ZWQgdW5uZWNlc3NhcnkgZG9jdW1lbnQgcGFyYW1l
dGVyLgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNv
bW1hbmQ6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKTogRGl0dG8uCisKKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmg6IFJlbW92ZWQgdW5uZWNl
c3NhcnkgZG9jdW1lbnQgcGFyYW1ldGVyLgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6
UmVwbGFjZW1lbnRGcmFnbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNvbXBsZXRlSFRNTFJlcGxh
Y2VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbi5oOiBDaGFuZ2Vk
IFNFTF9ERUZBVUxUX0FGRklOSVRZIHRvIGJlIGEgY29uc3RhbnQgcmF0aGVyIHRoYW4KKyAgICAg
ICAgYSBtYWNyby4gQWRkZWQgY29uc3RydWN0b3JzIHRoYXQgdGFrZSB2aXNpYmxlIHBvc2l0aW9u
cy4gQ2hhbmdlZCBzZXRCYXNlIGFuZAorICAgICAgICBzZXRFeHRlbnQgdG8gdGFrZSBjb25zdCBQ
b3NpdGlvbiYgZm9yIGJldHRlciBlZmZpY2llbmN5LgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6U2VsZWN0aW9uKTogUmVtb3Zl
ZCB1bm5lY2Vzc2FyeSBkb3VibGUgaW5pdGlhbGl6YXRpb24gb2YgbV9zdGF0ZQorICAgICAgICBh
bmQgbV9iYXNlSXNGaXJzdCBpbiBleGlzdGluZyBjb25zdHJ1Y3RvcnMuIEFkZGVkIFZpc2libGVQ
b3NpdGlvbi1iYXNlZCBjb25zdHJ1Y3RvcnMuCisKKyAgICAgICAgKiBlZGl0aW5nL1NldE5vZGVB
dHRyaWJ1dGVDb21tYW5kLmg6IFJlbW92ZWQgdW5ubmVlZGVkIGRvY3VtZW50IHBhcmFtZXRlci4K
KyAgICAgICAgKiBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpTZXROb2RlQXR0cmlidXRlQ29tbWFu
ZCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmg6IFJl
bW92ZWQgdW5ubmVlZGVkIGRvY3VtZW50IHBhcmFtZXRlci4KKyAgICAgICAgKiBlZGl0aW5nL1Nw
bGl0RWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29t
bWFuZDo6U3BsaXRFbGVtZW50Q29tbWFuZCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9T
cGxpdFRleHROb2RlQ29tbWFuZC5oOiBSZW1vdmVkIHVubm5lZWRlZCBkb2N1bWVudCBwYXJhbWV0
ZXIuCisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQpOiBE
aXR0by4KKworICAgICAgICAqIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZC5oOiBSZW1vdmVkIHVubm5lZWRlZCBkb2N1bWVudCBwYXJhbWV0ZXIuCisgICAgICAg
ICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OlNw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQpOiBEaXR0by4KKworICAgICAgICAq
IGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOiBSZXBsYWNlZCB1c2VzIG9mIEVkaXRDb21tYW5kUHRy
IHdpdGggRWRpdENvbW1hbmQqLgorICAgICAgICBSZW5hbWVkIG9wZW5Gb3JNb3ZlVHlwaW5nKCkg
d2l0aCBpc09wZW5Gb3JNb3JlVHlwaW5nKCkuCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQpOiBVcGRhdGVkIHRvIHJlbW92ZSB1c2Ugb2YgRWRpdENvbW1hbmRQdHIuCisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3
bGluZXMpOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNw
YW5Db21tYW5kLmg6IFJlbW92ZWQgdW5ubmVlZGVkIGRvY3VtZW50IHBhcmFtZXRlci4KKyAgICAg
ICAgKiBlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OldyYXBDb250ZW50c0lu
RHVtbXlTcGFuQ29tbWFuZCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGlu
Zy5oOiBDaGFuZ2VkIHR5cGUgb2YgTk9OX0JSRUFLSU5HX1NQQUNFIHRvIFVDaGFyIGluc3RlYWQg
b2YKKyAgICAgICAgdW5zaWduZWQgc2hvcnQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6IENo
YW5nZWQgbGFzdEVkaXRDb21tYW5kKCkgdG8gcmV0dXJuIGFuIEVkaXRDb21tYW5kKiBhbmQgY2hh
bmdlZAorICAgICAgICBhcHBsaWVkRWRpdGluZygpLCB1bmFwcGxpZWRFZGl0aW5nKCksIHJlYXBw
bGllZEVkaXRpbmcoKSwgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbygpLAorICAgICAgICBhbmQgcmVn
aXN0ZXJDb21tYW5kRm9yUmVkbygpIHRvIHRha2UgUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4uCisg
ICAgICAgICogcGFnZS9GcmFtZVByaXZhdGUuaDogQ2hhbmdlZCBtX2xhc3RFZGl0Q29tbWFuZCB0
byBiZSBhIFJlZlB0cjxFZGl0Q29tbWFuZD4uCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZTo6ZGlkT3BlblVSTCk6IEZpeGVkIGZvciBjaGFuZ2UgdG8g
bV9sYXN0RWRpdENvbW1hbmQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0Rm9jdXNOb2Rl
SWZOZWVkZWQpOiBDYWxsIHRoZSByb290RWRpdGFibGVFbGVtZW50IGZ1bmN0aW9uCisgICAgICAg
IGZyb20gU2VsZWN0aW9uIHRvIHNpbXBsaWZ5IHRoZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OnNlbGVjdEFsbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Omxhc3RF
ZGl0Q29tbWFuZCk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBtX2xhc3RFZGl0Q29tbWFuZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyk6IEFk
ZGVkLiBUaGlzIHNlbmRzIGFuIGV2ZW50IHRvCisgICAgICAgIGJvdGggb2YgdGhlIHJvb3QgZWRp
dGFibGUgZWxlbWVudHMgaW52b2x2ZWQgaW4gYSBjaGFuZ2UgLS0gdGhlIHN0YXJ0IHNlbGVjdGlv
bgorICAgICAgICBtaWdodCBiZSBpbiBhIGRpZmZlcmVudCBlbGVtZW50IHRoYW4gdGhlIGVuZCBz
ZWxlY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6YXBwbGllZEVkaXRpbmcpOiBDaGFu
Z2VkIHRvIGNhbGwgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzLAorICAgICAg
ICBhbmQgdG8gZG8gaXQgYmVmb3JlIHNldHRpbmcgdGhlIGVuZGluZyBzZWxlY3Rpb24uIEFsc28g
dXBkYXRlIHRvIHVzZSBQYXNzUmVmUHRyIGluc3RlYWQKKyAgICAgICAgb2YgRWRpdENvbW1hbmRQ
dHIgYW5kIGNoYW5nZSB0aGUgb3JkZXIgb2Ygc2V0dGluZyBtX2xhc3RFZGl0Q29tbWFuZCBzaW5j
ZSBwYXNzaW5nIGl0CisgICAgICAgIHRvIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8gd2lsbCB0YWtl
IG93bmVyc2hpcCBhbmQgc2V0IGl0IHRvIDAuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6dW5h
cHBsaWVkRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlYXBwbGll
ZEVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIEVkaXRDb21tYW5kUHRyLgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OmFwcGx5U3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjphcHBseVBhcmFncmFwaFN0eWxlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvRnJhbWVHZGsuaDogVXBkYXRlZCBmb3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogVXBkYXRlZCBmb3IgYWJvdmUg
Y2hhbmdlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDog
VXBkYXRlZCBmb3IgYWJvdmUgY2hhbmdlcy4KKwogMjAwNi0wOC0yMyAgQWRhbSBSb2JlbiAgPGFy
b2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4sIEFkZWxlLgpJbmRl
eDogV2ViQ29yZS9icmlkZ2UvbWFjL0ZyYW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2UvbWFjL0ZyYW1lTWFjLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9icmlkZ2Uv
bWFjL0ZyYW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw4ICsyNTEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGRQbHVnaW5Sb290T2JqZWN0KEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Qq
IHJvb3QpOwogICAgIHZvaWQgY2xlYW51cFBsdWdpblJvb3RPYmplY3RzKCk7CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oY29uc3QgRWRpdENvbW1hbmRQdHIm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBFZGl0Q29t
bWFuZFB0ciYpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NS
ZWZQdHI8RWRpdENvbW1hbmQ+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9y
UmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5k
b1JlZG9PcGVyYXRpb25zKCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlVW5kb0NvbW1hbmQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVSZWRvQ29tbWFuZCgpOwpAQCAtMzM3LDcgKzMzNyw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGZyZWVDbGlwYm9hcmQoKTsKIAotICAgIHZvaWQgcmVnaXN0
ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciAmY21kLCBib29sIGlz
UmVkbyk7CisgICAgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvT3JSZWRvKFBhc3NSZWZQdHI8
RWRpdENvbW1hbmQ+LCBib29sIGlzUmVkbyk7CiAKICAgICBXZWJDb3JlRnJhbWVCcmlkZ2UqIF9i
cmlkZ2U7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAxNTk5MSkK
KysrIFdlYkNvcmUvYnJpZGdlL21hYy9GcmFtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAz
MiwyNiArMzAzMiwyNyBAQCB2b2lkIEZyYW1lTWFjOjpjbGVhbnVwUGx1Z2luUm9vdE9iamVjdHMo
CiAgICAgbV9yb290T2JqZWN0cy5jbGVhcigpOwogfQogCi12b2lkIEZyYW1lTWFjOjpyZWdpc3Rl
ckNvbW1hbmRGb3JVbmRvT3JSZWRvKGNvbnN0IEVkaXRDb21tYW5kUHRyICZjbWQsIGJvb2wgaXNS
ZWRvKQordm9pZCBGcmFtZU1hYzo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhQYXNzUmVm
UHRyPEVkaXRDb21tYW5kPiBjbWQsIGJvb2wgaXNSZWRvKQogewotICAgIEFTU0VSVChjbWQuZ2V0
KCkpOwotICAgIFdlYkNvcmVFZGl0Q29tbWFuZCAqa3dxID0gW1dlYkNvcmVFZGl0Q29tbWFuZCBj
b21tYW5kV2l0aEVkaXRDb21tYW5kOmNtZC5nZXQoKV07Ci0gICAgTlNVbmRvTWFuYWdlciAqdW5k
b01hbmFnZXIgPSBbX2JyaWRnZSB1bmRvTWFuYWdlcl07Ci0gICAgW3VuZG9NYW5hZ2VyIHJlZ2lz
dGVyVW5kb1dpdGhUYXJnZXQ6X2JyaWRnZSBzZWxlY3RvcjooaXNSZWRvID8gQHNlbGVjdG9yKHJl
ZG9FZGl0aW5nOikgOiBAc2VsZWN0b3IodW5kb0VkaXRpbmc6KSkgb2JqZWN0Omt3cV07Ci0gICAg
TlNTdHJpbmcgKmFjdGlvbk5hbWUgPSBbX2JyaWRnZSBuYW1lRm9yVW5kb0FjdGlvbjpzdGF0aWNf
Y2FzdDxXZWJVbmRvQWN0aW9uPihjbWQuZWRpdGluZ0FjdGlvbigpKV07CisgICAgQVNTRVJUKGNt
ZCk7CisgICAgV2ViVW5kb0FjdGlvbiBhY3Rpb24gPSBzdGF0aWNfY2FzdDxXZWJVbmRvQWN0aW9u
PihjbWQtPmVkaXRpbmdBY3Rpb24oKSk7CisgICAgTlNVbmRvTWFuYWdlciogdW5kb01hbmFnZXIg
PSBbX2JyaWRnZSB1bmRvTWFuYWdlcl07CisgICAgV2ViQ29yZUVkaXRDb21tYW5kKiBjb21tYW5k
ID0gW1dlYkNvcmVFZGl0Q29tbWFuZCBjb21tYW5kV2l0aEVkaXRDb21tYW5kOmNtZF07CisgICAg
TlNTdHJpbmcqIGFjdGlvbk5hbWUgPSBbX2JyaWRnZSBuYW1lRm9yVW5kb0FjdGlvbjphY3Rpb25d
OworICAgIFt1bmRvTWFuYWdlciByZWdpc3RlclVuZG9XaXRoVGFyZ2V0Ol9icmlkZ2Ugc2VsZWN0
b3I6KGlzUmVkbyA/IEBzZWxlY3RvcihyZWRvRWRpdGluZzopIDogQHNlbGVjdG9yKHVuZG9FZGl0
aW5nOikpIG9iamVjdDpjb21tYW5kXTsKICAgICBpZiAoYWN0aW9uTmFtZSkKICAgICAgICAgW3Vu
ZG9NYW5hZ2VyIHNldEFjdGlvbk5hbWU6YWN0aW9uTmFtZV07CiAgICAgX2hhdmVVbmRvUmVkb09w
ZXJhdGlvbnMgPSBZRVM7CiB9CiAKLXZvaWQgRnJhbWVNYWM6OnJlZ2lzdGVyQ29tbWFuZEZvclVu
ZG8oY29uc3QgRWRpdENvbW1hbmRQdHIgJmNtZCkKK3ZvaWQgRnJhbWVNYWM6OnJlZ2lzdGVyQ29t
bWFuZEZvclVuZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogewotICAgIHJlZ2lzdGVy
Q29tbWFuZEZvclVuZG9PclJlZG8oY21kLCBOTyk7CisgICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5k
b09yUmVkbyhjbWQsIGZhbHNlKTsKIH0KIAotdm9pZCBGcmFtZU1hYzo6cmVnaXN0ZXJDb21tYW5k
Rm9yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciAmY21kKQordm9pZCBGcmFtZU1hYzo6cmVnaXN0
ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiB7Ci0gICAgcmVn
aXN0ZXJDb21tYW5kRm9yVW5kb09yUmVkbyhjbWQsIFlFUyk7CisgICAgcmVnaXN0ZXJDb21tYW5k
Rm9yVW5kb09yUmVkbyhjbWQsIHRydWUpOwogfQogCiB2b2lkIEZyYW1lTWFjOjpjbGVhclVuZG9S
ZWRvT3BlcmF0aW9ucygpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUVkaXRDb21t
YW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVFZGl0Q29tbWFu
ZC5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRWRpdENv
bW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDYgKzIzLDgg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRWRpdENvbW1hbmQ7CiB9CkBAIC0zMiw3ICsz
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBXZWJDb3JlOjpFZGl0Q29tbWFuZCAqbV9j
b21tYW5kOyAgIAogfQogCi0rIChXZWJDb3JlRWRpdENvbW1hbmQgKiljb21tYW5kV2l0aEVkaXRD
b21tYW5kOihXZWJDb3JlOjpFZGl0Q29tbWFuZCAqKWNvbW1hbmQ7CisrIChXZWJDb3JlRWRpdENv
bW1hbmQgKiljb21tYW5kV2l0aEVkaXRDb21tYW5kOihQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRD
b21tYW5kPiljb21tYW5kOwogLSAoV2ViQ29yZTo6RWRpdENvbW1hbmQgKiljb21tYW5kOwogCiBA
ZW5kCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUVkaXRDb21tYW5kLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRWRpdENvbW1hbmQubW0JKHJldmlz
aW9uIDE1OTkxKQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVFZGl0Q29tbWFuZC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTcgKzI3LDE3IEBACiAjaW1wb3J0ICJXZWJDb3JlRWRpdENv
bW1hbmQuaCIKIAogI2ltcG9ydCAiRWRpdENvbW1hbmQuaCIKKyNpbXBvcnQgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2Vi
Q29yZUVkaXRDb21tYW5kCiAKLS0gKGlkKWluaXRXaXRoRWRpdENvbW1hbmQ6KEVkaXRDb21tYW5k
ICopY29tbWFuZAorLSAoaWQpaW5pdFdpdGhFZGl0Q29tbWFuZDooUGFzc1JlZlB0cjxXZWJDb3Jl
OjpFZGl0Q29tbWFuZD4pY29tbWFuZAogewogICAgIEFTU0VSVChjb21tYW5kKTsKICAgICBbc3Vw
ZXIgaW5pdF07Ci0gICAgbV9jb21tYW5kID0gY29tbWFuZDsKLSAgICBjb21tYW5kLT5yZWYoKTsK
KyAgICBtX2NvbW1hbmQgPSBjb21tYW5kLnJlbGVhc2UoKTsKICAgICByZXR1cm4gc2VsZjsKIH0K
IApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBbc3VwZXIg
ZmluYWxpemVdOwogfQogCi0rIChXZWJDb3JlRWRpdENvbW1hbmQgKiljb21tYW5kV2l0aEVkaXRD
b21tYW5kOihFZGl0Q29tbWFuZCAqKWNvbW1hbmQKKysgKFdlYkNvcmVFZGl0Q29tbWFuZCAqKWNv
bW1hbmRXaXRoRWRpdENvbW1hbmQ6KFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KWNv
bW1hbmQKIHsKICAgICByZXR1cm4gW1tbV2ViQ29yZUVkaXRDb21tYW5kIGFsbG9jXSBpbml0V2l0
aEVkaXRDb21tYW5kOmNvbW1hbmRdIGF1dG9yZWxlYXNlXTsKIH0KSW5kZXg6IFdlYkNvcmUvYnJp
ZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlk
Z2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3Jl
L2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY3
LDcgKzE5NjcsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ECiAg
ICAgaWYgKCFtX2ZyYW1lLT5oYXNTZWxlY3Rpb24oKSB8fCAhZnJhZ21lbnQpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBFZGl0Q29tbWFuZFB0cihuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgW2ZyYWdtZW50IF9mcmFnbWVudF0sIHNlbGVjdFJlcGxh
Y2VtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpKS5hcHBseSgpOworICAgIGFwcGx5Q29t
bWFuZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoW2ZyYWdtZW50IF9mcmFnbWVudF0sIHNl
bGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpKTsKICAgICBbc2VsZiBl
bnN1cmVTZWxlY3Rpb25WaXNpYmxlXTsKIH0KIApAQCAtMjA4Myw4ICsyMDgzLDcgQEAgc3RhdGlj
IEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogCiAtICh2b2lkKW1vdmVTZWxlY3Rp
b25Ub0RyYWdDYXJldDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKXNlbGVjdGlvbkZyYWdtZW50IHNt
YXJ0TW92ZTooQk9PTClzbWFydE1vdmUKIHsKLSAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS0+
ZHJhZ0NhcmV0KCkuYmFzZSgpOwotICAgIEVkaXRDb21tYW5kUHRyKG5ldyBNb3ZlU2VsZWN0aW9u
Q29tbWFuZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBbc2VsZWN0aW9uRnJhZ21lbnQgX2ZyYWdtZW50
XSwgYmFzZSwgc21hcnRNb3ZlKSkuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IE1vdmVT
ZWxlY3Rpb25Db21tYW5kKFtzZWxlY3Rpb25GcmFnbWVudCBfZnJhZ21lbnRdLCBtX2ZyYW1lLT5k
cmFnQ2FyZXQoKS5iYXNlKCksIHNtYXJ0TW92ZSkpOwogfQogCiAtIChWaXNpYmxlUG9zaXRpb24p
X3Zpc2libGVQb3NpdGlvbkZvclBvaW50OihOU1BvaW50KXBvaW50CkBAIC0yMTU5LDcgKzIxNTgs
NyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ECiAgICAgaWYgKCFt
X2ZyYW1lLT5oYXNTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEVkaXRD
b21tYW5kUHRyKG5ldyBEZWxldGVTZWxlY3Rpb25Db21tYW5kKG1fZnJhbWUtPmRvY3VtZW50KCks
IHNtYXJ0RGVsZXRlKSkuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc21hcnREZWxldGUpKTsKIH0KIAogLSAo
dm9pZClkZWxldGVLZXlQcmVzc2VkV2l0aFNtYXJ0RGVsZXRlOihCT09MKXNtYXJ0RGVsZXRlIGdy
YW51bGFyaXR5OihXZWJCcmlkZ2VTZWxlY3Rpb25HcmFudWxhcml0eSlncmFudWxhcml0eQpJbmRl
eDogV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2Uvd2luL0ZyYW1lV2luLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9icmlkZ2Uv
d2luL0ZyYW1lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0T2JqZWN0SW5zdGFuY2VG
b3JXaWRnZXQoV2lkZ2V0Kik7CiAgICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSog
Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7CiAgICAgCi0gICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciYp
OworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8RWRp
dENvbW1hbmQ+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNz
UmVmUHRyPEVkaXRDb21tYW5kPik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVy
YXRpb25zKCk7CiAgICAgdmlydHVhbCB2b2lkIGlzc3VlVW5kb0NvbW1hbmQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgaXNzdWVSZWRvQ29tbWFuZCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGVu
ZE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9k
ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBlbmRO
b2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwz
NSArMjgsMzQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BcHBlbmROb2RlQ29tbWFuZDo6
QXBwZW5kTm9kZUNvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBOb2RlICphcHBlbmRDaGlsZCwg
Tm9kZSAqcGFyZW50Tm9kZSkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9hcHBlbmRD
aGlsZChhcHBlbmRDaGlsZCksIG1fcGFyZW50Tm9kZShwYXJlbnROb2RlKQorQXBwZW5kTm9kZUNv
bW1hbmQ6OkFwcGVuZE5vZGVDb21tYW5kKE5vZGUqIHBhcmVudE5vZGUsIFBhc3NSZWZQdHI8Tm9k
ZT4gY2hpbGRUb0FwcGVuZCkKKyAgICA6IEVkaXRDb21tYW5kKHBhcmVudE5vZGUtPmRvY3VtZW50
KCkpLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSksIG1fY2hpbGRUb0FwcGVuZChjaGlsZFRvQXBw
ZW5kKQogewotICAgIEFTU0VSVChtX2FwcGVuZENoaWxkKTsKKyAgICBBU1NFUlQobV9jaGlsZFRv
QXBwZW5kKTsKICAgICBBU1NFUlQobV9wYXJlbnROb2RlKTsKIH0KIAogdm9pZCBBcHBlbmROb2Rl
Q29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgQVNTRVJUKG1fYXBwZW5kQ2hpbGQpOworICAgIEFT
U0VSVChtX2NoaWxkVG9BcHBlbmQpOwogICAgIEFTU0VSVChtX3BhcmVudE5vZGUpOwogICAgIC8v
IElmIHRoZSBjaGlsZCB0byBhcHBlbmQgaXMgYWxyZWFkeSBpbiBhIHRyZWUsIGFwcGVuZGluZyBp
dCB3aWxsIHJlbW92ZSBpdCBmcm9tIGl0J3Mgb2xkIGxvY2F0aW9uCiAgICAgLy8gaW4gYW4gbm9u
LXVuZG9hYmxlIHdheS4gIFdlIG1pZ2h0IGV2ZW50dWFsbHkgZmluZCBpdCB1c2VmdWwgdG8gZG8g
YW4gdW5kb2FibGUgcmVtb3ZlIGluIHRoaXMgY2FzZS4KLSAgICBBU1NFUlQoIW1fYXBwZW5kQ2hp
bGQtPnBhcmVudCgpKTsKKyAgICBBU1NFUlQoIW1fY2hpbGRUb0FwcGVuZC0+cGFyZW50KCkpOwog
ICAgIEFTU0VSVChtX3BhcmVudE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIW1fcGFyZW50
Tm9kZS0+YXR0YWNoZWQoKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX3Bh
cmVudE5vZGUtPmFwcGVuZENoaWxkKG1fYXBwZW5kQ2hpbGQuZ2V0KCksIGVjKTsKKyAgICBtX3Bh
cmVudE5vZGUtPmFwcGVuZENoaWxkKG1fY2hpbGRUb0FwcGVuZC5nZXQoKSwgZWMpOwogICAgIEFT
U0VSVChlYyA9PSAwKTsKIH0KIAogdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkK
IHsKLSAgICBBU1NFUlQobV9hcHBlbmRDaGlsZCk7CisgICAgQVNTRVJUKG1fY2hpbGRUb0FwcGVu
ZCk7CiAgICAgQVNTRVJUKG1fcGFyZW50Tm9kZSk7Ci0gICAgQVNTRVJUKHN0YXRlKCkgPT0gQXBw
bGllZCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX3BhcmVudE5vZGUtPnJl
bW92ZUNoaWxkKG1fYXBwZW5kQ2hpbGQuZ2V0KCksIGVjKTsKKyAgICBtX3BhcmVudE5vZGUtPnJl
bW92ZUNoaWxkKG1fY2hpbGRUb0FwcGVuZC5nZXQoKSwgZWMpOwogICAgIEFTU0VSVChlYyA9PSAw
KTsKIH0KIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmgJKHJldmlzaW9uIDE1
OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywzNSArMjMsMjggQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKLSNpZm5kZWYgX19hcHBlbmRfbm9kZV9jb21tYW5kX2hfXwotI2RlZmluZSBfX2Fw
cGVuZF9ub2RlX2NvbW1hbmRfaF9fCisjaWZuZGVmIGFwcGVuZF9ub2RlX2NvbW1hbmRfaF9fCisj
ZGVmaW5lIGFwcGVuZF9ub2RlX2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgTm9kZTsKLX0KIAotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBBcHBlbmROb2RlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFu
ZAoteworY2xhc3MgQXBwZW5kTm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVi
bGljOgotICAgIEFwcGVuZE5vZGVDb21tYW5kKERvY3VtZW50ICosIE5vZGUgKmFwcGVuZENoaWxk
LCBOb2RlICpwYXJlbnROb2RlKTsKLSAgICB2aXJ0dWFsIH5BcHBlbmROb2RlQ29tbWFuZCgpIHsg
fQorICAgIEFwcGVuZE5vZGVDb21tYW5kKE5vZGUqIHBhcmVudE5vZGUsIFBhc3NSZWZQdHI8Tm9k
ZT4gY2hpbGRUb0FwcGVuZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZp
cnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAotICAgIE5vZGUgKmFwcGVuZENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9hcHBlbmRDaGlsZC5nZXQoKTsgfQotICAgIE5vZGUgKnBhcmVudE5vZGUoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudE5vZGUuZ2V0KCk7IH0KKyAgICBOb2RlKiBwYXJlbnROb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlLmdldCgpOyB9CisgICAgTm9kZSogY2hpbGRU
b0FwcGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRUb0FwcGVuZC5nZXQoKTsgfQogCiBwcml2
YXRlOgotICAgIFJlZlB0cjxOb2RlPiBtX2FwcGVuZENoaWxkOwogICAgIFJlZlB0cjxOb2RlPiBt
X3BhcmVudE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fY2hpbGRUb0FwcGVuZDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9fYXBwZW5kX25vZGVfY29tbWFuZF9o
X18KLQorI2VuZGlmIC8vIGFwcGVuZF9ub2RlX2NvbW1hbmRfaF9fCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDggKzI4MCw4
IEBAIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2MKIHsKIH0KIAotQXBw
bHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgRWxl
bWVudCogZWxlbWVudCwgYm9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24p
Ci0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKK0FwcGx5U3R5bGVDb21tYW5k
OjpBcHBseVN0eWxlQ29tbWFuZChFbGVtZW50KiBlbGVtZW50LCBib29sIHJlbW92ZU9ubHksIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGVsZW1l
bnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3N0eWxlKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbigpKQogICAgICwgbV9lZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pCiAgICAgLCBtX3By
b3BlcnR5TGV2ZWwoUHJvcGVydHlEZWZhdWx0KQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEhUTUxFbGVtZW50OwogCi1jbGFzcyBBcHBseVN0eWxlQ29tbWFuZCA6
IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZAoteworY2xhc3MgQXBwbHlTdHlsZUNvbW1hbmQg
OiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgogICAgIGVudW0gRVByb3Bl
cnR5TGV2ZWwgeyBQcm9wZXJ0eURlZmF1bHQsIEZvcmNlQmxvY2tQcm9wZXJ0aWVzIH07CiAKICAg
ICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCosIENTU1N0eWxlRGVjbGFyYXRpb24qLCBFZGl0
QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsID0gUHJv
cGVydHlEZWZhdWx0KTsKICAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCosIENTU1N0eWxl
RGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQs
IEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcywgRVByb3BlcnR5TGV2ZWwg
PSBQcm9wZXJ0eURlZmF1bHQpOwotICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgRWxl
bWVudCosIGJvb2wgPSBmYWxzZSwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1
dGVzKTsKKyAgICBBcHBseVN0eWxlQ29tbWFuZChFbGVtZW50KiwgYm9vbCA9IGZhbHNlLCBFZGl0
QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpOwogCiAgICAgdmlydHVhbCB2b2lk
IGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0
OwpAQCAtNDksNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIHN0eWxlLXJlbW92
YWwgaGVscGVycwogICAgIGJvb2wgaXNIVE1MU3R5bGVOb2RlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUhUTUxTdHlsZU5vZGUoSFRN
TEVsZW1lbnQgKik7CisgICAgdm9pZCByZW1vdmVIVE1MU3R5bGVOb2RlKEhUTUxFbGVtZW50Kik7
CiAgICAgdm9pZCByZW1vdmVIVE1MRm9udFN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiwgSFRNTEVsZW1lbnQqKTsKICAgICB2b2lkIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrU3R5bGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVD
b21tYW5kLmNwcAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9j
a3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgiCiAKKyNp
bmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0xNTUsNyArMTU2LDcgQEAg
dm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICB9CiAgICAgCiAgICAg
Ly8gUHV0IHRoZSBzZWxlY3Rpb24gcmlnaHQgYmVmb3JlIHRoZSBicmVhay4KLSAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oUG9zaXRpb24oYnJlYWtOb2RlLmdldCgpLCAwKSwgRE9XTlNUUkVBTSk7Cisg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihicmVha05vZGUuZ2V0KCks
IDApLCBET1dOU1RSRUFNKSk7CiAgICAgcmViYWxhbmNlV2hpdGVzcGFjZSgpOwogfQogCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgJKHJldmlzaW9uIDE1OTkx
KQorKysgV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE1ICsyNywxMiBAQAogI2RlZmluZSBicmVh
a19ibG9ja3F1b3RlX2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFu
ZC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0
Q29tbWFuZAoteworY2xhc3MgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZCA6IHB1YmxpYyBDb21wb3Np
dGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZChEb2N1
bWVudCAqKTsKLQorICAgIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQoRG9jdW1lbnQqKTsKICAgICB2
aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogfTsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0
aWMgY29uc3QgU3RyaW5nICZibG9ja1BsYWNlaG9sZGVyQ2xhc3NTdHJpbmcoKTsKLQogQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OkNvbXBvc2l0ZUVkaXRDb21tYW5kKERvY3VtZW50ICpkb2N1bWVudCkg
CiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCkKIHsKQEAgLTc1LDEzOSArNzMsMTE1IEBAIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29tbWEKIAogdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAobV9jbWRzLmNvdW50KCkgPT0gMCkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RWRpdENvbW1h
bmRQdHI+OjpDb25zdEl0ZXJhdG9yIGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
RWRpdENvbW1hbmRQdHI+OjpDb25zdEl0ZXJhdG9yIGl0ID0gbV9jbWRzLmZyb21MYXN0KCk7IGl0
ICE9IGVuZDsgLS1pdCkKLSAgICAgICAgKCppdCktPnVuYXBwbHkoKTsKLQotICAgIHNldFN0YXRl
KE5vdEFwcGxpZWQpOworICAgIHNpemVfdCBzaXplID0gbV9jb21tYW5kcy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IHNpemU7IGkgIT0gMDsgLS1pKQorICAgICAgICBtX2NvbW1hbmRzW2kg
LSAxXS0+dW5hcHBseSgpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkb1JlYXBw
bHkoKQogewotICAgIGlmIChtX2NtZHMuY291bnQoKSA9PSAwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RWRpdENvbW1hbmRQdHI+OjpDb25zdEl0ZXJh
dG9yIGl0ID0gbV9jbWRzLmJlZ2luKCk7IGl0ICE9IG1fY21kcy5lbmQoKTsgKytpdCkKLSAgICAg
ICAgKCppdCktPnJlYXBwbHkoKTsKLQotICAgIHNldFN0YXRlKEFwcGxpZWQpOworICAgIHNpemVf
dCBzaXplID0gbV9jb21tYW5kcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0g
c2l6ZTsgKytpKQorICAgICAgICBtX2NvbW1hbmRzW2ldLT5yZWFwcGx5KCk7CiB9CiAKIC8vCiAv
LyBzdWdhcnktc3dlZXQgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhlbHAgY3JlYXRlIGFuZCBh
cHBseSBlZGl0IGNvbW1hbmRzIGluIGNvbXBvc2l0ZSBjb21tYW5kcwogLy8KLXZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEVkaXRDb21tYW5kUHRyICZj
bWQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQ
YXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiB7Ci0gICAgY21kLnNldFN0YXJ0aW5nU2VsZWN0
aW9uKGVuZGluZ1NlbGVjdGlvbigpKTsKLSAgICBjbWQuc2V0RW5kaW5nU2VsZWN0aW9uKGVuZGlu
Z1NlbGVjdGlvbigpKTsKLSAgICBjbWQuc2V0UGFyZW50KHRoaXMpOwotICAgIGNtZC5hcHBseSgp
OwotICAgIG1fY21kcy5hcHBlbmQoY21kKTsKKyAgICBjbWQtPnNldFBhcmVudCh0aGlzKTsKKyAg
ICBjbWQtPmFwcGx5KCk7CisgICAgbV9jb21tYW5kcy5hcHBlbmQoY21kKTsKIH0KIAotdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uICpzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uKQogewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgQXBwbHlTdHlsZUNvbW1hbmQo
ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKLSAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBBcHBseVN0eWxl
Q29tbWFuZChkb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOwogfQogCi12b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxl
LCBQb3NpdGlvbiBzdGFydCwgUG9zaXRpb24gZW5kLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24p
Cit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IEFw
cGx5U3R5bGVDb21tYW5kKGRvY3VtZW50KCksIHN0eWxlLCBzdGFydCwgZW5kLCBlZGl0aW5nQWN0
aW9uKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQoKSwgc3R5bGUsIHN0
YXJ0LCBlbmQsIGVkaXRpbmdBY3Rpb24pKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YXBwbHlTdHlsZWRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgRWRpdENvbW1h
bmRQdHIgY21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCgpLCBlbGVtZW50LCBmYWxz
ZSkpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUobmV3IEFwcGx5U3R5bGVDb21tYW5kKGVsZW1lbnQsIGZhbHNlKSk7CiB9CiAK
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IEFwcGx5U3R5bGVDb21tYW5k
KGRvY3VtZW50KCksIGVsZW1lbnQsIHRydWUpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBBcHBseVN0eWxlQ29tbWFu
ZChlbGVtZW50LCB0cnVlKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcigpCiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kKGRvY3VtZW50KCkpKTsKLSAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kKGRvY3VtZW50KCkpKTsKIH0KIAotdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZShOb2RlICppbnNlcnRDaGlsZCwgTm9k
ZSAqcmVmQ2hpbGQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3Jl
KE5vZGUqIGluc2VydENoaWxkLCBOb2RlKiByZWZDaGlsZCkKIHsKICAgICBBU1NFUlQoIXJlZkNo
aWxkLT5oYXNUYWdOYW1lKGJvZHlUYWcpKTsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IElu
c2VydE5vZGVCZWZvcmVDb21tYW5kKGRvY3VtZW50KCksIGluc2VydENoaWxkLCByZWZDaGlsZCkp
OwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUobmV3IEluc2VydE5vZGVCZWZvcmVDb21tYW5kKGluc2VydENoaWxkLCByZWZDaGls
ZCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoTm9k
ZSAqaW5zZXJ0Q2hpbGQsIE5vZGUgKnJlZkNoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6aW5zZXJ0Tm9kZUFmdGVyKE5vZGUqIGluc2VydENoaWxkLCBOb2RlKiByZWZDaGlsZCkKIHsK
ICAgICBBU1NFUlQoIXJlZkNoaWxkLT5oYXNUYWdOYW1lKGJvZHlUYWcpKTsKLSAgICBpZiAocmVm
Q2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxkKCkgPT0gcmVmQ2hpbGQpIHsKKyAgICBpZiAo
cmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxkKCkgPT0gcmVmQ2hpbGQpCiAgICAgICAg
IGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkLT5wYXJlbnROb2RlKCkpOwotICAgIH0K
ICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKHJlZkNoaWxkLT5uZXh0U2libGluZygpKTsKICAg
ICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQtPm5leHRTaWJsaW5n
KCkpOwogICAgIH0KIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0
KE5vZGUgKmluc2VydENoaWxkLCBOb2RlICpyZWZDaGlsZCwgaW50IG9mZnNldCkKK3ZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChOb2RlKiBpbnNlcnRDaGlsZCwgTm9kZSog
cmVmQ2hpbGQsIGludCBvZmZzZXQpCiB7CiAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRp
bmcocmVmQ2hpbGQpKSB7Ci0gICAgICAgIE5vZGUgKmNoaWxkID0gcmVmQ2hpbGQtPmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSByZWZDaGlsZC0+Zmlyc3RDaGlsZCgpOwogICAg
ICAgICBmb3IgKGludCBpID0gMDsgY2hpbGQgJiYgaSA8IG9mZnNldDsgaSsrKQogICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNoaWxkKQogICAg
ICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShpbnNlcnRDaGlsZCwgY2hpbGQpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBhcHBlbmROb2RlKGluc2VydENoaWxkLCByZWZDaGlsZCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKHJlZkNoaWxkLT5jYXJldE1pbk9mZnNldCgpID49IG9mZnNldCkgewor
ICAgIH0gZWxzZSBpZiAocmVmQ2hpbGQtPmNhcmV0TWluT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7CiAg
ICAgICAgIGluc2VydE5vZGVCZWZvcmUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkKTsKLSAgICB9IAot
ICAgIGVsc2UgaWYgKHJlZkNoaWxkLT5pc1RleHROb2RlKCkgJiYgcmVmQ2hpbGQtPmNhcmV0TWF4
T2Zmc2V0KCkgPiBvZmZzZXQpIHsKKyAgICB9IGVsc2UgaWYgKHJlZkNoaWxkLT5pc1RleHROb2Rl
KCkgJiYgcmVmQ2hpbGQtPmNhcmV0TWF4T2Zmc2V0KCkgPiBvZmZzZXQpIHsKICAgICAgICAgc3Bs
aXRUZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0ICo+KHJlZkNoaWxkKSwgb2Zmc2V0KTsKICAgICAg
ICAgaW5zZXJ0Tm9kZUJlZm9yZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpOwotICAgIH0gCi0gICAg
ZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGluc2VydENoaWxk
LCByZWZDaGlsZCk7CiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBl
bmROb2RlKE5vZGUgKmFwcGVuZENoaWxkLCBOb2RlICpwYXJlbnQpCit2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjphcHBlbmROb2RlKE5vZGUqIG5ld0NoaWxkLCBOb2RlKiBwYXJlbnQpCiB7CiAg
ICAgQVNTRVJUKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcocGFyZW50KSk7Ci0gICAgRWRpdENv
bW1hbmRQdHIgY21kKG5ldyBBcHBlbmROb2RlQ29tbWFuZChkb2N1bWVudCgpLCBhcHBlbmRDaGls
ZCwgcGFyZW50KSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgQXBwZW5kTm9kZUNvbW1hbmQocGFyZW50LCBuZXdDaGls
ZCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFu
Z2UoTm9kZSAqbm9kZSwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnJlbW92ZUNoaWxkcmVuSW5SYW5nZShOb2RlKiBub2RlLCBpbnQgZnJvbSwgaW50IHRvKQog
ewotICAgIE5vZGUgKm5vZGVUb1JlbW92ZSA9IG5vZGUtPmNoaWxkTm9kZShmcm9tKTsKKyAgICBO
b2RlKiBub2RlVG9SZW1vdmUgPSBub2RlLT5jaGlsZE5vZGUoZnJvbSk7CiAgICAgZm9yIChpbnQg
aSA9IGZyb207IGkgPCB0bzsgaSsrKSB7CiAgICAgICAgIEFTU0VSVChub2RlVG9SZW1vdmUpOwot
ICAgICAgICBOb2RlICpuZXh0ID0gbm9kZVRvUmVtb3ZlLT5uZXh0U2libGluZygpOworICAgICAg
ICBOb2RlKiBuZXh0ID0gbm9kZVRvUmVtb3ZlLT5uZXh0U2libGluZygpOwogICAgICAgICByZW1v
dmVOb2RlKG5vZGVUb1JlbW92ZSk7CiAgICAgICAgIG5vZGVUb1JlbW92ZSA9IG5leHQ7CiAgICAg
fQogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKE5vZGUgKnJlbW92
ZUNoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZShOb2RlKiByZW1v
dmVDaGlsZCkKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFJlbW92ZU5vZGVDb21tYW5k
KGRvY3VtZW50KCksIHJlbW92ZUNoaWxkKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
Y21kKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgUmVtb3ZlTm9kZUNvbW1hbmQo
cmVtb3ZlQ2hpbGQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbihOb2RlICpyZW1vdmVDaGlsZCkKK3ZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSogcmVtb3ZlQ2hpbGQp
CiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuQ29tbWFuZChkb2N1bWVudCgpLCByZW1vdmVDaGlsZCkpOwotICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKHJlbW92ZUNoaWxkKSk7CiB9CiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhOb2RlKiBub2Rl
KQpAQCAtMjQ0LDcxICsyMTgsNjAgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUo
UGFzc1JlZgogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRleHROb2RlKFRleHQg
KnRleHQsIGludCBvZmZzZXQpCiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBTcGxpdFRl
eHROb2RlQ29tbWFuZChkb2N1bWVudCgpLCB0ZXh0LCBvZmZzZXQpKTsKLSAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBTcGxp
dFRleHROb2RlQ29tbWFuZCh0ZXh0LCBvZmZzZXQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6c3BsaXRFbGVtZW50KEVsZW1lbnQgKmVsZW1lbnQsIE5vZGUgKmF0Q2hpbGQpCit2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwg
Tm9kZSogYXRDaGlsZCkKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFNwbGl0RWxlbWVu
dENvbW1hbmQoZG9jdW1lbnQoKSwgZWxlbWVudCwgYXRDaGlsZCkpOwotICAgIGFwcGx5Q29tbWFu
ZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFNwbGl0
RWxlbWVudENvbW1hbmQoZWxlbWVudCwgYXRDaGlsZCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjptZXJnZUlkZW50aWNhbEVsZW1lbnRzKEVsZW1lbnQgKmZpcnN0LCBFbGVtZW50
ICpzZWNvbmQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptZXJnZUlkZW50aWNhbEVsZW1l
bnRzKEVsZW1lbnQqIGZpcnN0LCBFbGVtZW50KiBzZWNvbmQpCiB7CiAgICAgQVNTRVJUKCFmaXJz
dC0+aXNBbmNlc3RvcihzZWNvbmQpICYmIHNlY29uZCAhPSBmaXJzdCk7CiAgICAgaWYgKGZpcnN0
LT5uZXh0U2libGluZygpICE9IHNlY29uZCkgewogICAgICAgICByZW1vdmVOb2RlKHNlY29uZCk7
CiAgICAgICAgIGluc2VydE5vZGVBZnRlcihzZWNvbmQsIGZpcnN0KTsKICAgICB9Ci0gICAgRWRp
dENvbW1hbmRQdHIgY21kKG5ldyBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChkb2N1bWVu
dCgpLCBmaXJzdCwgc2Vjb25kKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsK
KyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgTWVyZ2VJZGVudGljYWxFbGVtZW50c0Nv
bW1hbmQoZmlyc3QsIHNlY29uZCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3
cmFwQ29udGVudHNJbkR1bW15U3BhbihFbGVtZW50ICplbGVtZW50KQordm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6d3JhcENvbnRlbnRzSW5EdW1teVNwYW4oRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFu
ZChkb2N1bWVudCgpLCBlbGVtZW50KSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21k
KTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgV3JhcENvbnRlbnRzSW5EdW1teVNw
YW5Db21tYW5kKGVsZW1lbnQpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KFRleHQgKnRleHQsIGludCBvZmZzZXQpCiB7Ci0g
ICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRD
b21tYW5kKGRvY3VtZW50KCksIHRleHQsIG9mZnNldCkpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFNwbGl0VGV4dE5v
ZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQodGV4dCwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmpvaW5UZXh0Tm9kZXMoVGV4dCAqdGV4dDEsIFRleHQgKnRleHQy
KQogewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgSm9pblRleHROb2Rlc0NvbW1hbmQoZG9j
dW1lbnQoKSwgdGV4dDEsIHRleHQyKSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21k
KTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSm9pblRleHROb2Rlc0NvbW1hbmQo
dGV4dDEsIHRleHQyKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlucHV0VGV4
dChjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KQogewotICAgIElu
c2VydFRleHRDb21tYW5kICppbXBsID0gbmV3IEluc2VydFRleHRDb21tYW5kKGRvY3VtZW50KCkp
OwotICAgIEVkaXRDb21tYW5kUHRyIGNtZChpbXBsKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShjbWQpOwotICAgIGltcGwtPmlucHV0KHRleHQsIHNlbGVjdEluc2VydGVkVGV4dCk7Cisg
ICAgUmVmUHRyPEluc2VydFRleHRDb21tYW5kPiBjb21tYW5kID0gbmV3IEluc2VydFRleHRDb21t
YW5kKGRvY3VtZW50KCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOwor
ICAgIGNvbW1hbmQtPmlucHV0KHRleHQsIHNlbGVjdEluc2VydGVkVGV4dCk7CiB9CiAKIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZShUZXh0ICpub2RlLCBpbnQg
b2Zmc2V0LCBjb25zdCBTdHJpbmcgJnRleHQpCiB7Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5l
dyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgdGV4
dCkpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUobmV3IEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQobm9kZSwgb2Zmc2V0LCB0
ZXh0KSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9k
ZShUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpCiB7Ci0gICAgRWRpdENvbW1hbmRQ
dHIgY21kKG5ldyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKGRvY3VtZW50KCksIG5vZGUsIG9m
ZnNldCwgY291bnQpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKG5vZGUs
IG9mZnNldCwgY291bnQpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVRleHRJbk5vZGUoVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50LCBjb25zdCBTdHJp
bmcgJnJlcGxhY2VtZW50VGV4dCkKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBkZWxldGVDb21tYW5k
KG5ldyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwg
Y291bnQpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShkZWxldGVDb21tYW5kKTsKLSAg
ICBFZGl0Q29tbWFuZFB0ciBpbnNlcnRDb21tYW5kKG5ldyBJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgcmVwbGFjZW1lbnRUZXh0KSk7Ci0gICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoaW5zZXJ0Q29tbWFuZCk7CisgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUobmV3IERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQobm9kZSwgb2Zmc2V0LCBjb3Vu
dCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kKG5vZGUsIG9mZnNldCwgcmVwbGFjZW1lbnRUZXh0KSk7CiB9CiAKIFBvc2l0aW9uIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9u
JiBwb3MpCkBAIC0zMTYsNyArMjc5LDcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnBvc2l0aW9uTwogICAgIGlmICghaXNUYWJTcGFuVGV4dE5vZGUocG9zLm5vZGUoKSkpCiAgICAg
ICAgIHJldHVybiBwb3M7CiAgICAgCi0gICAgTm9kZSAqdGFiU3BhbiA9IHRhYlNwYW5Ob2RlKHBv
cy5ub2RlKCkpOworICAgIE5vZGUqIHRhYlNwYW4gPSB0YWJTcGFuTm9kZShwb3Mubm9kZSgpKTsK
ICAgICAKICAgICBpZiAocG9zLm9mZnNldCgpIDw9IHBvcy5ub2RlKCktPmNhcmV0TWluT2Zmc2V0
KCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUodGFiU3Bhbik7CkBAIC0zMjgs
NyArMjkxLDcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uTwogICAg
IHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUodGFiU3Bhbik7CiB9CiAKLXZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbihOb2RlICpub2RlLCBjb25z
dCBQb3NpdGlvbiYgcG9zKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0
VGFiU3BhblBvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAg
Ly8gaW5zZXJ0IG5vZGUgYmVmb3JlLCBhZnRlciwgb3IgYXQgc3BsaXQgb2YgdGFiIHNwYW4KICAg
ICBQb3NpdGlvbiBpbnNlcnRQb3MgPSBwb3NpdGlvbk91dHNpZGVUYWJTcGFuKHBvcyk7CkBAIC0z
MzcsMzkgKzMwMCwzMSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXRU
CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihib29sIHNtYXJ0
RGVsZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVwbGFjZSkKIHsKLSAg
ICBpZiAoZW5kaW5nU2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIEVkaXRDb21tYW5k
UHRyIGNtZChuZXcgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZChkb2N1bWVudCgpLCBzbWFydERlbGV0
ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFjZSkpOwotICAgICAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShjbWQpOwotICAgIH0KKyAgICBpZiAoZW5kaW5nU2VsZWN0aW9uKCkuaXNS
YW5nZSgpKQorICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZChkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSwgcmVwbGFjZSkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxl
Y3Rpb24oY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24sIGJvb2wgc21hcnREZWxldGUsIGJvb2wg
bWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgYm9vbCByZXBsYWNlKQogewotICAgIGlmIChzZWxlY3Rp
b24uaXNSYW5nZSgpKSB7Ci0gICAgICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZChkb2N1bWVudCgpLCBzZWxlY3Rpb24sIHNtYXJ0RGVsZXRlLCBtZXJnZUJs
b2Nrc0FmdGVyRGVsZXRlLCByZXBsYWNlKSk7Ci0gICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKGNtZCk7Ci0gICAgfQorICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZChzZWxlY3Rp
b24sIHNtYXJ0RGVsZXRlLCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCByZXBsYWNlKSk7CiB9CiAK
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUNTU1Byb3BlcnR5KENTU1N0eWxlRGVj
bGFyYXRpb24gKmRlY2wsIGludCBwcm9wZXJ0eSkKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQo
bmV3IFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZChkb2N1bWVudCgpLCBkZWNsLCBwcm9wZXJ0eSkp
OwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUobmV3IFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZChkb2N1bWVudCgpLCBkZWNsLCBw
cm9wZXJ0eSkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQXR0
cmlidXRlKEVsZW1lbnQgKmVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkK
K3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBdHRyaWJ1dGUoRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQogewotICAgIFN0cmluZyB2
YWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICAgIGlmICh2YWx1ZS5p
c0VtcHR5KCkpCisgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm47Ci0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBSZW1vdmVO
b2RlQXR0cmlidXRlQ29tbWFuZChkb2N1bWVudCgpLCBlbGVtZW50LCBhdHRyaWJ1dGUpKTsKLSAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKG5ldyBSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZChlbGVtZW50LCBhdHRyaWJ1dGUpKTsK
IH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2V0Tm9kZUF0dHJpYnV0ZShFbGVtZW50
ICplbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyAm
dmFsdWUpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0cmlidXRlKEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFNldE5vZGVBdHRyaWJ1dGVD
b21tYW5kKGRvY3VtZW50KCksIGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpKTsKLSAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5l
dyBTZXROb2RlQXR0cmlidXRlQ29tbWFuZChlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CiB9
CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VBdChjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC0zODIsOCArMzM3LDcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
ZXh0Tm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5zdHls
ZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEVkaXRDb21t
YW5kUHRyIGNtZChuZXcgUmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQoZG9jdW1lbnQoKSwgcG9z
aXRpb24pKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOyAgICAKKyAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgUmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQocG9zaXRp
b24pKTsgICAgCiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRl
c3BhY2UoKQpAQCAtMzk2LDEzICszNTAsMTMgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmViYWxhbmNlV2hpdAogICAgIH0KIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVs
ZXRlSW5zaWduaWZpY2FudFRleHQoVGV4dCAqdGV4dE5vZGUsIGludCBzdGFydCwgaW50IGVuZCkK
K3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQq
IHRleHROb2RlLCBpbnQgc3RhcnQsIGludCBlbmQpCiB7CiAgICAgaWYgKCF0ZXh0Tm9kZSB8fCAh
dGV4dE5vZGUtPnJlbmRlcmVyKCkgfHwgc3RhcnQgPj0gZW5kKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+
KHRleHROb2RlLT5yZW5kZXJlcigpKTsKLSAgICBJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVu
ZGVyZXItPmZpcnN0VGV4dEJveCgpOworICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHN0
YXRpY19jYXN0PFJlbmRlclRleHQqPih0ZXh0Tm9kZS0+cmVuZGVyZXIoKSk7CisgICAgSW5saW5l
VGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsKICAgICBpZiAoIWJv
eCkgewogICAgICAgICAvLyB3aG9sZSB0ZXh0IG5vZGUgaXMgZW1wdHkKICAgICAgICAgcmVtb3Zl
Tm9kZSh0ZXh0Tm9kZSk7CkBAIC00MTQsNyArMzY4LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6ZGVsZXRlSW5zaWduaQogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgcmVtb3ZlZCA9
IDA7Ci0gICAgSW5saW5lVGV4dEJveCAqcHJldkJveCA9IDA7CisgICAgSW5saW5lVGV4dEJveCog
cHJldkJveCA9IDA7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0cjsKIAogICAgIC8vIFRoaXMg
bG9vcCBzdHJ1Y3R1cmUgd29ya3MgdG8gcHJvY2VzcyBhbGwgZ2FwcyBwcmVjZWRpbmcgYSBib3gs
CkBAIC00NTcsNyArNDExLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5z
aWduaQogICAgIH0KIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWdu
aWZpY2FudFRleHQoY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQor
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewogICAgIGlmIChzdGFydC5p
c051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwzNSArNDE5
LDMwIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICBpZiAo
UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzdGFydCwgZW5kKSA+PSAwKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBOb2RlICpub2RlID0gc3RhcnQubm9kZSgpOwotICAgIHdoaWxlIChub2Rl
KSB7Ci0gICAgICAgIE5vZGUgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0gICAg
CisgICAgTm9kZSogbmV4dDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydC5ub2RlKCk7IG5v
ZGU7IG5vZGUgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7CiAgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgIFRleHQg
KnRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihub2RlKTsKLSAgICAgICAgICAgIGJvb2wg
aXNTdGFydE5vZGUgPSBub2RlID09IHN0YXJ0Lm5vZGUoKTsKLSAgICAgICAgICAgIGJvb2wgaXNF
bmROb2RlID0gbm9kZSA9PSBlbmQubm9kZSgpOwotICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0
ID0gaXNTdGFydE5vZGUgPyBzdGFydC5vZmZzZXQoKSA6IDA7Ci0gICAgICAgICAgICBpbnQgZW5k
T2Zmc2V0ID0gaXNFbmROb2RlID8gZW5kLm9mZnNldCgpIDogdGV4dE5vZGUtPmxlbmd0aCgpOwor
ICAgICAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7Cisg
ICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBub2RlID09IHN0YXJ0Lm5vZGUoKSA/IHN0YXJ0
Lm9mZnNldCgpIDogMDsKKyAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBub2RlID09IGVuZC5u
b2RlKCkgPyBlbmQub2Zmc2V0KCkgOiB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBk
ZWxldGVJbnNpZ25pZmljYW50VGV4dCh0ZXh0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
CiAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICBpZiAobm9kZSA9PSBlbmQubm9kZSgp
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG5vZGUgPSBuZXh0OwogICAgIH0KIH0KIAot
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3duc3Ry
ZWFtKGNvbnN0IFBvc2l0aW9uICZwb3MpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxl
dGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oY29uc3QgUG9zaXRpb24mIHBvcykKIHsKICAg
ICBQb3NpdGlvbiBlbmQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZ
KS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CiAgICAgZGVsZXRlSW5zaWdu
aWZpY2FudFRleHQocG9zLCBlbmQpOwogfQogCi1Ob2RlICpDb21wb3NpdGVFZGl0Q29tbWFuZDo6
YXBwZW5kQmxvY2tQbGFjZWhvbGRlcihOb2RlICpub2RlKQorTm9kZSogQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICAv
LyBTaG91bGQgYXNzZXJ0IGlzQmxvY2tGbG93IHx8IGlzSW5saW5lRmxvdyB3aGVuIGRlbGV0aW9u
IGltcHJvdmVzLiAgU2VlIDQyNDQ5NjQuCiAgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOwpA
QCAtNTAzLDEwICs0NTIsMTAgQEAgTm9kZSAqQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZEJs
b2NrUAogICAgIHJldHVybiBwbGFjZWhvbGRlci5nZXQoKTsKIH0KIAotTm9kZSAqQ29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydEJsb2NrUGxhY2Vob2xkZXIoY29uc3QgUG9zaXRpb24gJnBvcykK
K05vZGUqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRCbG9ja1BsYWNlaG9sZGVyKGNvbnN0
IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAgaWYgKHBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gU2hvdWxkIGFzc2VydCBpc0Jsb2Nr
RmxvdyB8fCBpc0lubGluZUZsb3cgd2hlbiBkZWxldGlvbiBpbXByb3Zlcy4gIFNlZSA0MjQ0OTY0
LgogICAgIEFTU0VSVChwb3Mubm9kZSgpLT5yZW5kZXJlcigpKTsKQEAgLTUxNiwyMyArNDY1LDIz
IEBAIE5vZGUgKkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRCbG9ja1AKICAgICByZXR1cm4g
cGxhY2Vob2xkZXIuZ2V0KCk7CiB9CiAKLU5vZGUgKkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphZGRC
bG9ja1BsYWNlaG9sZGVySWZOZWVkZWQoTm9kZSAqbm9kZSkKK05vZGUqIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjphZGRCbG9ja1BsYWNlaG9sZGVySWZOZWVkZWQoTm9kZSogbm9kZSkKIHsKICAgICBp
ZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICB1cGRhdGVMYXlvdXQoKTsKIAogICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8v
IGFwcGVuZCB0aGUgcGxhY2Vob2xkZXIgdG8gbWFrZSBzdXJlIGl0IGZvbGxvd3MKICAgICAvLyBh
bnkgdW5yZW5kZXJlZCBibG9ja3MKICAgICBpZiAocmVuZGVyZXItPmhlaWdodCgpID09IDAgfHwg
KHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkgJiYgcmVuZGVyZXItPmlzRW1wdHkoKSkpCiAgICAgICAg
IHJldHVybiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKG5vZGUpOwogCi0gICAgcmV0dXJuIE5VTEw7
CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUJs
b2NrUGxhY2Vob2xkZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBA
IC01NDMsMTEgKzQ5Miw5IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUJsb2Nr
UGwKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93
bnN0cmVhbSgpOwogICAgIGlmIChwLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgJiYgcC5vZmZz
ZXQoKSA9PSAwICYmIGlzRW5kT2ZCbG9jayh2aXNpYmxlUG9zaXRpb24pICYmIGlzU3RhcnRPZkJs
b2NrKHZpc2libGVQb3NpdGlvbikpCiAgICAgICAgIHJlbW92ZU5vZGUocC5ub2RlKCkpOwotICAg
ICAgICAKLSAgICByZXR1cm47CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeShjb25zdCBQb3NpdGlvbiAmcG9z
KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaENvbnRlbnRzVG9OZXdC
bG9ja0lmTmVjZXNzYXJ5KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAgaWYgKHBvcy5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTkxLDEwICs1MzgsMTAgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogCiAgICAgUmVmUHRyPE5vZGU+IG5ld0Jsb2Nr
ID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQoKSk7CiAKLSAgICBOb2Rl
ICptb3ZlTm9kZSA9IHBhcmFncmFwaFN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBtb3ZlTm9kZSA9
IHBhcmFncmFwaFN0YXJ0Lm5vZGUoKTsKICAgICBpZiAocGFyYWdyYXBoU3RhcnQub2Zmc2V0KCkg
Pj0gcGFyYWdyYXBoU3RhcnQubm9kZSgpLT5jYXJldE1heE9mZnNldCgpKQogICAgICAgICBtb3Zl
Tm9kZSA9IG1vdmVOb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0gICAgTm9kZSAqZW5kTm9kZSA9
IGVuZC5ub2RlKCk7CisgICAgTm9kZSogZW5kTm9kZSA9IGVuZC5ub2RlKCk7CiAgICAgCiAgICAg
aWYgKCFpc0F0b21pY05vZGUocGFyYWdyYXBoU3RhcnQubm9kZSgpKSkKICAgICAgICAgaW5zZXJ0
Tm9kZUF0KG5ld0Jsb2NrLmdldCgpLCBwYXJhZ3JhcGhTdGFydC5ub2RlKCksIHBhcmFncmFwaFN0
YXJ0Lm9mZnNldCgpKTsKQEAgLTYwNSw3ICs1NTIsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgfQogCiAgICAgd2hpbGUgKG1vdmVOb2RlICYmICFpc0Js
b2NrKG1vdmVOb2RlKSkgewotICAgICAgICBOb2RlICpuZXh0ID0gbW92ZU5vZGUtPnRyYXZlcnNl
TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgTm9kZSogbmV4dCA9IG1vdmVOb2RlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKCk7CiAgICAgICAgIHJlbW92ZU5vZGUobW92ZU5vZGUpOwogICAgICAgICBhcHBl
bmROb2RlKG1vdmVOb2RlLCBuZXdCbG9jay5nZXQoKSk7CiAgICAgICAgIGlmIChtb3ZlTm9kZSA9
PSBlbmROb2RlKQpAQCAtNjE4LDcgKzU2NSw2IEBAIE5vZGUqIGVuY2xvc2luZ0FuY2hvckVsZW1l
bnQoTm9kZSogbm9kZSkKIHsKICAgICB3aGlsZSAobm9kZSAmJiAhKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSAmJiBub2RlLT5pc0xpbmsoKSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCk7Ci0gICAgCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTc0MSw4ICs2ODcsNyBAQCB2b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgZGVzdGluYXRpb25JbmRl
eCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRUb0Rlc3RpbmF0aW9uUmFuZ2UuZ2V0
KCkpOwogICAgIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgRWRp
dENvbW1hbmRQdHIgY21kKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChkb2N1bWVudCgpLCBm
cmFnbWVudC5nZXQoKSwgdHJ1ZSwgZmFsc2UsICFwcmVzZXJ2ZVN0eWxlLCBmYWxzZSkpOwotICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKGZyYWdtZW50LmdldCgpLCB0cnVlLCBmYWxz
ZSwgIXByZXNlcnZlU3R5bGUsIGZhbHNlKSk7CiAgICAgCiAgICAgaWYgKHByZXNlcnZlU2VsZWN0
aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNl
bGVjdGlvbihUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50
KCksIGRlc3RpbmF0aW9uSW5kZXggKyBzdGFydEluZGV4LCAwKS0+c3RhcnRQb3NpdGlvbigpLCAK
QEAgLTc2MCwxMiArNzA1LDEyIEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0
T2ZFbXAKICAgICAgICAgCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IHN0eWxlQXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKIAotICAg
IE5vZGUgKmxpc3ROb2RlID0gZW1wdHlMaXN0SXRlbS0+cGFyZW50Tm9kZSgpOworICAgIE5vZGUq
IGxpc3ROb2RlID0gZW1wdHlMaXN0SXRlbS0+cGFyZW50Tm9kZSgpOwogICAgIFJlZlB0cjxOb2Rl
PiBuZXdCbG9jayA9IGlzTGlzdEVsZW1lbnQobGlzdE5vZGUtPnBhcmVudE5vZGUoKSkgPyBjcmVh
dGVMaXN0SXRlbUVsZW1lbnQoZG9jdW1lbnQoKSkgOiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxl
bWVudChkb2N1bWVudCgpKTsKICAgICAKICAgICBpZiAoZW1wdHlMaXN0SXRlbS0+cmVuZGVyZXIo
KS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoZW1wdHlMaXN0SXRlbS0+cmVuZGVyZXIo
KS0+cHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nh
c3Q8RWxlbWVudCAqPihsaXN0Tm9kZSksIGVtcHR5TGlzdEl0ZW0pOworICAgICAgICAgICAgc3Bs
aXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihsaXN0Tm9kZSksIGVtcHR5TGlzdEl0ZW0p
OwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5ld0Jsb2NrLmdldCgpLCBsaXN0Tm9kZSk7CiAg
ICAgICAgIHJlbW92ZU5vZGUoZW1wdHlMaXN0SXRlbSk7CiAgICAgfSBlbHNlIHsKQEAgLTc3NCw3
ICs3MTksNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wCiAgICAg
fQogICAgIAogICAgIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIobmV3QmxvY2suZ2V0KCkpOwotICAg
IHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlvbihuZXdCbG9jay5nZXQoKSwgMCksIERPV05TVFJF
QU0pOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24obmV3QmxvY2su
Z2V0KCksIDApLCBET1dOU1RSRUFNKSk7CiAgICAgCiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uIGVuZGluZ1N0eWxlKGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpKTsKICAg
ICBlbmRpbmdTdHlsZS5kaWZmKHN0eWxlLmdldCgpKTsKQEAgLTc4OSwxNCArNzM0LDkgQEAgUGFz
c1JlZlB0cjxFbGVtZW50PiBjcmVhdGVCbG9ja1BsYWNlaG9sZAogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIFJlZlB0cjxFbGVtZW50PiBicmVha05vZGUgPSBkb2N1bWVudC0+Y3JlYXRl
RWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAiYnIiLCBlYyk7CiAgICAgQVNTRVJUKGVjID09
IDApOwotICAgIGJyZWFrTm9kZS0+c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwgYmxvY2tQbGFjZWhv
bGRlckNsYXNzU3RyaW5nKCkpOworICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NTdHJpbmcgPSAid2Vi
a2l0LWJsb2NrLXBsYWNlaG9sZGVyIjsKKyAgICBicmVha05vZGUtPnNldEF0dHJpYnV0ZShjbGFz
c0F0dHIsIGNsYXNzU3RyaW5nKTsKICAgICByZXR1cm4gYnJlYWtOb2RlLnJlbGVhc2UoKTsKIH0K
IAotc3RhdGljIGNvbnN0IFN0cmluZyAmYmxvY2tQbGFjZWhvbGRlckNsYXNzU3RyaW5nKCkKLXsK
LSAgICBzdGF0aWMgU3RyaW5nIGJsb2NrUGxhY2Vob2xkZXJDbGFzc1N0cmluZyA9ICJ3ZWJraXQt
YmxvY2stcGxhY2Vob2xkZXIiOwotICAgIHJldHVybiBibG9ja1BsYWNlaG9sZGVyQ2xhc3NTdHJp
bmc7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjcsNzUgKzI3LDY5IEBACiAjZGVmaW5lIGNvbXBvc2l0ZV9lZGl0X2NvbW1hbmRfaF9fCiAK
ICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3Qu
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBj
bGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNzIFN0cmluZzsKLSAgICBjbGFzcyBU
ZXh0OwotICAgIGNsYXNzIFF1YWxpZmllZE5hbWU7Ci19CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBUZXh0OwogCi1jbGFzcyBDb21wb3Np
dGVFZGl0Q29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgQ29tcG9zaXRlRWRp
dENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIENvbXBvc2l0ZUVk
aXRDb21tYW5kKERvY3VtZW50ICopOworICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKERvY3VtZW50
Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRv
UmVhcHBseSgpOworICAgIGJvb2wgaXNGaXJzdENvbW1hbmQoRWRpdENvbW1hbmQqIGMpIHsgcmV0
dXJuICFtX2NvbW1hbmRzLmlzRW1wdHkoKSAmJiBtX2NvbW1hbmRzLmZpcnN0KCkgPT0gYzsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgLy8KICAgICAvLyBzdWdhcnktc3dlZXQgY29udmVuaWVuY2UgZnVu
Y3Rpb25zIHRvIGhlbHAgY3JlYXRlIGFuZCBhcHBseSBlZGl0IGNvbW1hbmRzIGluIGNvbXBvc2l0
ZSBjb21tYW5kcwogICAgIC8vCi0gICAgdm9pZCBhcHBlbmROb2RlKE5vZGUgKmFwcGVuZENoaWxk
LCBOb2RlICpwYXJlbnROb2RlKTsKLSAgICB2b2lkIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEVk
aXRDb21tYW5kUHRyICYpOwotICAgIHZvaWQgYXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
ICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uPUVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1
dGVzKTsKLSAgICB2b2lkIGFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIFBv
c2l0aW9uIHN0YXJ0LCBQb3NpdGlvbiBlbmQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbj1FZGl0
QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CisgICAgdm9pZCBhcHBlbmROb2RlKE5vZGUqIGFwcGVu
ZENoaWxkLCBOb2RlKiBwYXJlbnROb2RlKTsKKyAgICB2b2lkIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKKyAgICB2b2lkIGFwcGx5U3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7
CisgICAgdm9pZCBhcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hh
bmdlQXR0cmlidXRlcyk7CiAgICAgdm9pZCBhcHBseVN0eWxlZEVsZW1lbnQoRWxlbWVudCopOwog
ICAgIHZvaWQgcmVtb3ZlU3R5bGVkRWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCBkZWxldGVL
ZXlQcmVzc2VkKCk7Ci0gICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFydERlbGV0ZT1m
YWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlPXRydWUsIGJvb2wgcmVwbGFjZT1mYWxz
ZSk7Ci0gICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24s
IGJvb2wgc21hcnREZWxldGU9ZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZT10cnVl
LCBib29sIHJlcGxhY2U9ZmFsc2UpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5v
ZGUoVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKLSAgICB2b2lkIGlucHV0VGV4
dChjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0ID0gZmFsc2UpOwot
ICAgIHZvaWQgaW5zZXJ0Tm9kZUFmdGVyKE5vZGUgKmluc2VydENoaWxkLCBOb2RlICpyZWZDaGls
ZCk7Ci0gICAgdm9pZCBpbnNlcnROb2RlQXQoTm9kZSAqaW5zZXJ0Q2hpbGQsIE5vZGUgKnJlZkNo
aWxkLCBpbnQgb2Zmc2V0KTsKLSAgICB2b2lkIGluc2VydE5vZGVCZWZvcmUoTm9kZSAqaW5zZXJ0
Q2hpbGQsIE5vZGUgKnJlZkNoaWxkKTsKKyAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihib29sIHNt
YXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRydWUsIGJv
b2wgcmVwbGFjZSA9IGZhbHNlKTsKKyAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihjb25zdCBTZWxl
Y3Rpb24mLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRl
bGV0ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVGV4dEZyb21Ob2RlKFRleHQqIG5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCk7CisgICAg
dm9pZCBpbnB1dFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBm
YWxzZSk7CisgICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXIoTm9kZSogaW5zZXJ0Q2hpbGQsIE5vZGUq
IHJlZkNoaWxkKTsKKyAgICB2b2lkIGluc2VydE5vZGVBdChOb2RlKiBpbnNlcnRDaGlsZCwgTm9k
ZSogcmVmQ2hpbGQsIGludCBvZmZzZXQpOworICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShOb2Rl
KiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hpbGQpOwogICAgIHZvaWQgaW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yKCk7Ci0gICAgdm9pZCBpbnNlcnRUZXh0SW50b05vZGUoVGV4dCAqbm9kZSwgaW50
IG9mZnNldCwgY29uc3QgU3RyaW5nICZ0ZXh0KTsKLSAgICB2b2lkIGpvaW5UZXh0Tm9kZXMoVGV4
dCAqdGV4dDEsIFRleHQgKnRleHQyKTsKKyAgICB2b2lkIGluc2VydFRleHRJbnRvTm9kZShUZXh0
KiBub2RlLCBpbnQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIHZvaWQgam9pblRl
eHROb2RlcyhUZXh0KiwgVGV4dCopOwogICAgIHZvaWQgcmViYWxhbmNlV2hpdGVzcGFjZSgpOwot
ICAgIHZvaWQgcmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uICZwb3NpdGlvbik7
Ci0gICAgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eShDU1NTdHlsZURlY2xhcmF0aW9uICosIGludCBw
cm9wZXJ0eSk7Ci0gICAgdm9pZCByZW1vdmVOb2RlQXR0cmlidXRlKEVsZW1lbnQgKiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkcmVuSW5SYW5n
ZShOb2RlICpub2RlLCBpbnQgZnJvbSwgaW50IHRvKTsKKyAgICB2b2lkIHJlYmFsYW5jZVdoaXRl
c3BhY2VBdChjb25zdCBQb3NpdGlvbiYpOworICAgIHZvaWQgcmVtb3ZlQ1NTUHJvcGVydHkoQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9wZXJ0eSk7CisgICAgdm9pZCByZW1vdmVOb2RlQXR0
cmlidXRlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpOworICAgIHZv
aWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKE5vZGUqLCBpbnQgZnJvbSwgaW50IHRvKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShOb2RlKik7CiAgICAgdm9pZCByZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuKE5vZGUqKTsKLSAgICB2b2lkIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9y
cyhOb2RlKiBub2RlKTsKLSAgICB2b2lkIHBydW5lKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSk7Ci0g
ICAgdm9pZCByZXBsYWNlVGV4dEluTm9kZShUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291
bnQsIGNvbnN0IFN0cmluZyAmcmVwbGFjZW1lbnRUZXh0KTsKLSAgICBQb3NpdGlvbiBwb3NpdGlv
bk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3MpOwotICAgIHZvaWQgaW5zZXJ0Tm9k
ZUF0VGFiU3BhblBvc2l0aW9uKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3MpOwotICAg
IHZvaWQgc2V0Tm9kZUF0dHJpYnV0ZShFbGVtZW50ICosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZSwgY29uc3QgU3RyaW5nICYpOwotICAgIHZvaWQgc3BsaXRUZXh0Tm9kZShUZXh0ICp0
ZXh0LCBpbnQgb2Zmc2V0KTsKLSAgICB2b2lkIHNwbGl0RWxlbWVudChFbGVtZW50ICplbGVtZW50
LCBOb2RlICphdENoaWxkKTsKLSAgICB2b2lkIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoRWxlbWVu
dCAqZmlyc3QsIEVsZW1lbnQgKnNlY29uZCk7Ci0gICAgdm9pZCB3cmFwQ29udGVudHNJbkR1bW15
U3BhbihFbGVtZW50ICplbGVtZW50KTsKLSAgICB2b2lkIHNwbGl0VGV4dE5vZGVDb250YWluaW5n
RWxlbWVudChUZXh0ICp0ZXh0LCBpbnQgb2Zmc2V0KTsKLQotICAgIHZvaWQgZGVsZXRlSW5zaWdu
aWZpY2FudFRleHQoVGV4dCAqLCBpbnQgc3RhcnQsIGludCBlbmQpOwotICAgIHZvaWQgZGVsZXRl
SW5zaWduaWZpY2FudFRleHQoY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAm
ZW5kKTsKLSAgICB2b2lkIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShjb25zdCBQ
b3NpdGlvbiAmKTsKKyAgICB2b2lkIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhOb2RlKik7
CisgICAgdm9pZCBwcnVuZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHJlcGxhY2VUZXh0
SW5Ob2RlKFRleHQqIG5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFRleHQpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29u
c3QgUG9zaXRpb24mKTsKKyAgICB2b2lkIGluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbihOb2Rl
KiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICB2b2lkIHNldE5vZGVBdHRyaWJ1dGUoRWxlbWVudCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Cisg
ICAgdm9pZCBzcGxpdFRleHROb2RlKFRleHQqLCBpbnQgb2Zmc2V0KTsKKyAgICB2b2lkIHNwbGl0
RWxlbWVudChFbGVtZW50KiwgTm9kZSogYXRDaGlsZCk7CisgICAgdm9pZCBtZXJnZUlkZW50aWNh
bEVsZW1lbnRzKEVsZW1lbnQqLCBFbGVtZW50Kik7CisgICAgdm9pZCB3cmFwQ29udGVudHNJbkR1
bW15U3BhbihFbGVtZW50Kik7CisgICAgdm9pZCBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1l
bnQoVGV4dCosIGludCBvZmZzZXQpOworCisgICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4
dChUZXh0KiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKKyAgICB2b2lkIGRlbGV0ZUluc2lnbmlmaWNh
bnRUZXh0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CisgICAg
dm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oY29uc3QgUG9zaXRpb24mKTsK
IAogICAgIE5vZGUgKmFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoTm9kZSopOwotICAgIE5vZGUgKmlu
c2VydEJsb2NrUGxhY2Vob2xkZXIoY29uc3QgUG9zaXRpb24gJnBvcyk7CisgICAgTm9kZSAqaW5z
ZXJ0QmxvY2tQbGFjZWhvbGRlcihjb25zdCBQb3NpdGlvbiYpOwogICAgIE5vZGUgKmFkZEJsb2Nr
UGxhY2Vob2xkZXJJZk5lZWRlZChOb2RlKik7CiAgICAgdm9pZCByZW1vdmVCbG9ja1BsYWNlaG9s
ZGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCi0gICAgdm9pZCBtb3ZlUGFyYWdyYXBoQ29u
dGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkoY29uc3QgUG9zaXRpb24gJik7CisgICAgdm9pZCBt
b3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkoY29uc3QgUG9zaXRpb24m
KTsKICAgICAKICAgICB2b2lkIHB1c2hBbmNob3JFbGVtZW50RG93bihOb2RlKik7CiAgICAgdm9p
ZCBwdXNoUGFydGlhbGx5U2VsZWN0ZWRBbmNob3JFbGVtZW50c0Rvd24oKTsKQEAgLTEwNSw5ICs5
OSwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgYm9vbCBicmVha091dE9mRW1wdHlMaXN0SXRl
bSgpOwogCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxFZGl0Q29tbWFuZFB0cj4gbV9jbWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8RWRpdENvbW1hbmQ+ID4gbV9jb21tYW5kczsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIGRvUmVhcHBs
eSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19jb21wb3Np
dGVfZWRpdF9jb21tYW5kX2hfXworI2VuZGlmIC8vIGNvbXBvc2l0ZV9lZGl0X2NvbW1hbmRfaF9f
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3Bw
CShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLURlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OkRlbGV0ZUZyb21UZXh0Tm9k
ZUNvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBpbnQg
Y291bnQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fbm9kZShub2RlKSwgbV9vZmZz
ZXQob2Zmc2V0KSwgbV9jb3VudChjb3VudCkKK0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OkRl
bGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50
KQorICAgIDogRWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSksIG1fbm9kZShub2RlKSwgbV9v
ZmZzZXQob2Zmc2V0KSwgbV9jb3VudChjb3VudCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAg
ICBBU1NFUlQobV9vZmZzZXQgPj0gMCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDIxICsyOSwxNyBAQAogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBUZXh0OwotfQogCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBUZXh0OwogCi1jbGFzcyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kIDogcHVi
bGljIEVkaXRDb21tYW5kCi17CitjbGFzcyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kIDogcHVi
bGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5k
KERvY3VtZW50ICpkb2N1bWVudCwgVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50KTsK
LSAgICB2aXJ0dWFsIH5EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKCkgeyB9CisgICAgRGVsZXRl
RnJvbVRleHROb2RlQ29tbWFuZChUZXh0KiwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwog
Ci0gICAgVGV4dCAqbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAgIFRl
eHQqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KICAgICBpbnQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBpbnQgY291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2NvdW50OyB9CiAKQEAgLTU2LDQgKzUyLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFu
ZF9oX18KKyNlbmRpZiAvLyBkZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZF9oX18KSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1
OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OkRlbGV0
ZVNlbGVjdGlvbkMKIHsKIH0KIAotRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6RGVsZXRlU2VsZWN0
aW9uQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIGNvbnN0IFNlbGVjdGlvbiAmc2VsZWN0aW9u
LCBib29sIHNtYXJ0RGVsZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVw
bGFjZSkKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KSwgCitEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kKGNvbnN0IFNlbGVjdGlvbiYgc2Vs
ZWN0aW9uLCBib29sIHNtYXJ0RGVsZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJv
b2wgcmVwbGFjZSkKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHNlbGVjdGlvbi5zdGFydCgp
Lm5vZGUoKS0+ZG9jdW1lbnQoKSksIAogICAgICAgbV9oYXNTZWxlY3Rpb25Ub0RlbGV0ZSh0cnVl
KSwgCiAgICAgICBtX3NtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKSwgCiAgICAgICBtX21lcmdlQmxv
Y2tzQWZ0ZXJEZWxldGUobWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSksCkBAIC03Miw3ICs3Miw3IEBA
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OkRlbGV0ZVNlbGVjdGlvbkMKIH0KIAogdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFsaXplU3RhcnRFbmQoKQotIHsKK3sKICAgICBOb2Rl
KiBzdGFydFNwZWNpYWxDb250YWluZXIgPSAwOwogICAgIE5vZGUqIGVuZFNwZWNpYWxDb250YWlu
ZXIgPSAwOwogIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5o
CShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxOCArMjMsMTcg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgX19kZWxldGVfc2VsZWN0aW9uX2Nv
bW1hbmRfaF9fCi0jZGVmaW5lIF9fZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kX2hfXworI2lmbmRl
ZiBkZWxldGVfc2VsZWN0aW9uX2NvbW1hbmRfaF9fCisjZGVmaW5lIGRlbGV0ZV9zZWxlY3Rpb25f
Y29tbWFuZF9oX18KIAogI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBD
b21wb3NpdGVFZGl0Q29tbWFuZAoteyAKK2NsYXNzIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQgOiBw
dWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgeyAKIHB1YmxpYzoKLSAgICBEZWxldGVTZWxlY3Rp
b25Db21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZT1mYWxzZSwgYm9v
bCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlPXRydWUsIGJvb2wgcmVwbGFjZT1mYWxzZSk7Ci0gICAg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIGNvbnN0IFNlbGVjdGlv
biAmc2VsZWN0aW9uLCBib29sIHNtYXJ0RGVsZXRlPWZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0
ZXJEZWxldGU9dHJ1ZSwgYm9vbCByZXBsYWNlPWZhbHNlKTsKKyAgICBEZWxldGVTZWxlY3Rpb25D
b21tYW5kKERvY3VtZW50KiwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBib29sIG1lcmdlQmxv
Y2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJlcGxhY2UgPSBmYWxzZSk7CisgICAgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZChjb25zdCBTZWxlY3Rpb24mLCBib29sIHNtYXJ0RGVsZXRlID0gZmFs
c2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZh
bHNlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCBFZGl0QWN0
aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdDsKQEAgLTc5LDQgKzc4LDQgQEAgcHJpdmF0ZToKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19kZWxldGVfc2VsZWN0aW9uX2Nv
bW1hbmRfaF9fCisjZW5kaWYgLy8gZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kX2hfXwpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NiwxNzAgKzI2LDMzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1h
bmQuaCIKIAorI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5j
bHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
aHRtbGVkaXRpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
RXZlbnROYW1lczsKIAotI2RlZmluZSBJRl9JTVBMX05VTExfUkVUVVJOX0FSRyhhcmcpIGRvIHsg
XAotICAgICAgICBpZiAoKnRoaXMgPT0gMCkgeyByZXR1cm4gYXJnOyB9IFwKLSAgICB9IHdoaWxl
ICgwKQotICAgICAgICAKLSNkZWZpbmUgSUZfSU1QTF9OVUxMX1JFVFVSTiBkbyB7IFwKLSAgICAg
ICAgaWYgKCp0aGlzID09IDApIHsgcmV0dXJuOyB9IFwKLSAgICB9IHdoaWxlICgwKQotCi1FZGl0
Q29tbWFuZFB0cjo6RWRpdENvbW1hbmRQdHIoKQotewotfQotCi1FZGl0Q29tbWFuZFB0cjo6RWRp
dENvbW1hbmRQdHIoRWRpdENvbW1hbmQgKmltcGwpIDogUmVmUHRyPEVkaXRDb21tYW5kPihpbXBs
KQotewotfQotCi1ib29sIEVkaXRDb21tYW5kUHRyOjppc0NvbXBvc2l0ZVN0ZXAoKSBjb25zdAot
ewotICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKGZhbHNlKTsgICAgICAgIAotICAgIHJldHVy
biBnZXQoKS0+aXNDb21wb3NpdGVTdGVwKCk7Ci19Ci0KLWJvb2wgRWRpdENvbW1hbmRQdHI6Omlz
SW5zZXJ0VGV4dENvbW1hbmQoKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJH
KGZhbHNlKTsgICAgICAgIAotICAgIHJldHVybiBnZXQoKS0+aXNJbnNlcnRUZXh0Q29tbWFuZCgp
OwotfQotCi1ib29sIEVkaXRDb21tYW5kUHRyOjppc1R5cGluZ0NvbW1hbmQoKSBjb25zdAotewot
ICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKGZhbHNlKTsgICAgICAgIAotICAgIHJldHVybiBn
ZXQoKS0+aXNUeXBpbmdDb21tYW5kKCk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6OmFwcGx5
KCkgY29uc3QKLXsKLSAgICBJRl9JTVBMX05VTExfUkVUVVJOOwotICAgIGdldCgpLT5hcHBseSgp
OwotfQotCi12b2lkIEVkaXRDb21tYW5kUHRyOjp1bmFwcGx5KCkgY29uc3QKLXsKLSAgICBJRl9J
TVBMX05VTExfUkVUVVJOOwotICAgIGdldCgpLT51bmFwcGx5KCk7Ci19Ci0KLXZvaWQgRWRpdENv
bW1hbmRQdHI6OnJlYXBwbHkoKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk47Ci0g
ICAgZ2V0KCktPnJlYXBwbHkoKTsKLX0KLQotRWRpdEFjdGlvbiBFZGl0Q29tbWFuZFB0cjo6ZWRp
dGluZ0FjdGlvbigpIGNvbnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoRWRpdEFj
dGlvblVuc3BlY2lmaWVkKTsKLSAgICByZXR1cm4gZ2V0KCktPmVkaXRpbmdBY3Rpb24oKTsKLX0K
LQotRG9jdW1lbnQgKiBjb25zdCBFZGl0Q29tbWFuZFB0cjo6ZG9jdW1lbnQoKSBjb25zdAotewot
ICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKDApOwotICAgIHJldHVybiBnZXQoKS0+ZG9jdW1l
bnQoKTsKLX0KLQotU2VsZWN0aW9uIEVkaXRDb21tYW5kUHRyOjpzdGFydGluZ1NlbGVjdGlvbigp
IGNvbnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoU2VsZWN0aW9uKCkpOwotICAg
IHJldHVybiBnZXQoKS0+c3RhcnRpbmdTZWxlY3Rpb24oKTsKLX0KLQotU2VsZWN0aW9uIEVkaXRD
b21tYW5kUHRyOjplbmRpbmdTZWxlY3Rpb24oKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9S
RVRVUk5fQVJHKFNlbGVjdGlvbigpKTsKLSAgICByZXR1cm4gZ2V0KCktPmVuZGluZ1NlbGVjdGlv
bigpOwotfQotCi12b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25z
dCBTZWxlY3Rpb24gJnMpIGNvbnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTjsKLSAgICBn
ZXQoKS0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ocyk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6
OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkgY29uc3QKLXsK
LSAgICBJRl9JTVBMX05VTExfUkVUVVJOOwotICAgIGdldCgpLT5zZXRTdGFydGluZ1NlbGVjdGlv
bihwKTsKLX0KLQotdm9pZCBFZGl0Q29tbWFuZFB0cjo6c2V0U3RhcnRpbmdTZWxlY3Rpb24oY29u
c3QgUG9zaXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKLXsKLSAgICBJRl9JTVBM
X05VTExfUkVUVVJOOwotICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAsIGFmZmluaXR5KTsK
LSAgICBnZXQoKS0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ocyk7Ci19Ci0KLXZvaWQgRWRpdENvbW1h
bmRQdHI6OnNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnMpIGNvbnN0Ci17Ci0g
ICAgSUZfSU1QTF9OVUxMX1JFVFVSTjsKLSAgICBnZXQoKS0+c2V0RW5kaW5nU2VsZWN0aW9uKHMp
OwotfQotCi12b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZwKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk47Ci0gICAg
Z2V0KCktPnNldEVuZGluZ1NlbGVjdGlvbihwKTsKLX0KLQotdm9pZCBFZGl0Q29tbWFuZFB0cjo6
c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkp
IGNvbnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTjsKLSAgICBTZWxlY3Rpb24gcyA9IFNl
bGVjdGlvbihwLCBhZmZpbml0eSk7Ci0gICAgZ2V0KCktPnNldEVuZGluZ1NlbGVjdGlvbihzKTsK
LX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKkVkaXRDb21tYW5kUHRyOjp0eXBpbmdT
dHlsZSgpIGNvbnN0Ci17Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoMCk7Ci0gICAgcmV0
dXJuIGdldCgpLT50eXBpbmdTdHlsZSgpOwotfQotCi12b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRU
eXBpbmdTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkg
Y29uc3QKLXsKLSAgICBJRl9JTVBMX05VTExfUkVUVVJOOwotICAgIGdldCgpLT5zZXRUeXBpbmdT
dHlsZShzdHlsZSk7Ci19Ci0KLUVkaXRDb21tYW5kUHRyIEVkaXRDb21tYW5kUHRyOjpwYXJlbnQo
KSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKDApOwotICAgIHJldHVybiBn
ZXQoKS0+cGFyZW50KCk7Ci19Ci0KLXZvaWQgRWRpdENvbW1hbmRQdHI6OnNldFBhcmVudChjb25z
dCBFZGl0Q29tbWFuZFB0ciAmY21kKSBjb25zdAotewotICAgIElGX0lNUExfTlVMTF9SRVRVUk47
Ci0gICAgZ2V0KCktPnNldFBhcmVudChjbWQuZ2V0KCkpOwotfQotCi1FZGl0Q29tbWFuZFB0ciAm
RWRpdENvbW1hbmRQdHI6OmVtcHR5Q29tbWFuZCgpCi17Ci0gICAgc3RhdGljIEVkaXRDb21tYW5k
UHRyIG1fZW1wdHlDb21tYW5kOwotICAgIHJldHVybiBtX2VtcHR5Q29tbWFuZDsKLX0KLQotRWRp
dENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50ICpkb2N1bWVudCkgCi0gICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KSwgbV9zdGF0ZShOb3RBcHBsaWVkKSwgbV9wYXJlbnQoMCkKK0VkaXRDb21t
YW5kOjpFZGl0Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQpIAorICAgIDogbV9kb2N1bWVudChk
b2N1bWVudCkKKyAgICAsIG1fcGFyZW50KDApCisgICAgLCBtX3N0YXJ0aW5nU2VsZWN0aW9uKGRv
Y3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkKKyAgICAsIG1fZW5kaW5n
U2VsZWN0aW9uKG1fc3RhcnRpbmdTZWxlY3Rpb24pCisgICAgLCBtX3N0YXJ0aW5nUm9vdEVkaXRh
YmxlRWxlbWVudChtX3N0YXJ0aW5nU2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAg
ICAsIG1fZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudChtX3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxl
bWVudCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQt
PmZyYW1lKCkpOwotICAgIG1fc3RhcnRpbmdTZWxlY3Rpb24gPSBtX2RvY3VtZW50LT5mcmFtZSgp
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBtX2VuZGluZ1NlbGVjdGlvbiA9IG1fc3Rh
cnRpbmdTZWxlY3Rpb247CisgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24obV9kb2N1bWVudC0+ZnJh
bWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHNldEVuZGluZ1NlbGVjdGlvbiht
X3N0YXJ0aW5nU2VsZWN0aW9uKTsKIH0KIAogRWRpdENvbW1hbmQ6On5FZGl0Q29tbWFuZCgpCkBA
IC0yMDAsMTIgKzYzLDEwIEBAIHZvaWQgRWRpdENvbW1hbmQ6OmFwcGx5KCkKIHsKICAgICBBU1NF
UlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIEFT
U0VSVChzdGF0ZSgpID09IE5vdEFwcGxpZWQpOwogIAotICAgIEZyYW1lICpmcmFtZSA9IG1fZG9j
dW1lbnQtPmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsK
ICAgICAKLSAgICBib29sIHRvcExldmVsID0gIWlzQ29tcG9zaXRlU3RlcCgpOwotICAgIGlmICh0
b3BMZXZlbCkgeworICAgIGlmICghbV9wYXJlbnQpIHsKICAgICAgICAgaWYgKCFlbmRpbmdTZWxl
Y3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KGVkaXRpbmdBY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRWRpdEFjdGlvblR5cGlu
ZzoKQEAgLTIyMSwyMCArODIsMTcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6YXBwbHkoKQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgZG9BcHBseSgpOwotICAgIAot
ICAgIG1fc3RhdGUgPSBBcHBsaWVkOwogCiAgICAgLy8gRklYTUU6IEltcHJvdmUgdHlwaW5nIHN0
eWxlLgogICAgIC8vIFNlZSB0aGlzIGJ1ZzogPHJkYXI6Ly9wcm9ibGVtLzM3Njk4OTk+IEltcGxl
bWVudGF0aW9uIG9mIHR5cGluZyBzdHlsZSBuZWVkcyBpbXByb3ZlbWVudAogICAgIGlmICghcHJl
c2VydmVzVHlwaW5nU3R5bGUoKSkKICAgICAgICAgc2V0VHlwaW5nU3R5bGUoMCk7CiAKLSAgICBp
ZiAodG9wTGV2ZWwpIHsKKyAgICBpZiAoIW1fcGFyZW50KSB7CiAgICAgICAgIHVwZGF0ZUxheW91
dCgpOwotICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQodGhpcyk7Ci0gICAgICAgIGZyYW1lLT5h
cHBsaWVkRWRpdGluZyhjbWQpOworICAgICAgICBmcmFtZS0+YXBwbGllZEVkaXRpbmcodGhpcyk7
CiAgICAgfQogfQogCkBAIC0yNDIsMTggKzEwMCwxNCBAQCB2b2lkIEVkaXRDb21tYW5kOjp1bmFw
cGx5KCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQt
PmZyYW1lKCkpOwotICAgIEFTU0VSVChzdGF0ZSgpID09IEFwcGxpZWQpOwogIAotICAgIEZyYW1l
ICpmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1
bWVudC0+ZnJhbWUoKTsKICAgICAKICAgICBkb1VuYXBwbHkoKTsKLSAgICAKLSAgICBtX3N0YXRl
ID0gTm90QXBwbGllZDsKIAotICAgIGlmICghaXNDb21wb3NpdGVTdGVwKCkpIHsKKyAgICBpZiAo
IW1fcGFyZW50KSB7CiAgICAgICAgIHVwZGF0ZUxheW91dCgpOwotICAgICAgICBFZGl0Q29tbWFu
ZFB0ciBjbWQodGhpcyk7Ci0gICAgICAgIGZyYW1lLT51bmFwcGxpZWRFZGl0aW5nKGNtZCk7Cisg
ICAgICAgIGZyYW1lLT51bmFwcGxpZWRFZGl0aW5nKHRoaXMpOwogICAgIH0KIH0KIApAQCAtMjYx
LDE4ICsxMTUsMTQgQEAgdm9pZCBFZGl0Q29tbWFuZDo6cmVhcHBseSgpCiB7CiAgICAgQVNTRVJU
KG1fZG9jdW1lbnQpOwogICAgIEFTU0VSVChtX2RvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBBU1NF
UlQoc3RhdGUoKSA9PSBOb3RBcHBsaWVkKTsKICAKLSAgICBGcmFtZSAqZnJhbWUgPSBtX2RvY3Vt
ZW50LT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CiAg
ICAgCiAgICAgZG9SZWFwcGx5KCk7Ci0gICAgCi0gICAgbV9zdGF0ZSA9IEFwcGxpZWQ7CiAKLSAg
ICBpZiAoIWlzQ29tcG9zaXRlU3RlcCgpKSB7CisgICAgaWYgKCFtX3BhcmVudCkgewogICAgICAg
ICB1cGRhdGVMYXlvdXQoKTsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwotICAg
ICAgICBmcmFtZS0+cmVhcHBsaWVkRWRpdGluZyhjbWQpOworICAgICAgICBmcmFtZS0+cmVhcHBs
aWVkRWRpdGluZyh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI4Niw0NCArMTM2LDI0IEBAIEVkaXRB
Y3Rpb24gRWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSAKICAgICByZXR1cm4gRWRpdEFjdGlv
blVuc3BlY2lmaWVkOwogfQogCi12b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlv
bihjb25zdCBTZWxlY3Rpb24gJnMpCi17Ci0gICAgZm9yIChFZGl0Q29tbWFuZCAqY21kID0gdGhp
czsgY21kOyBjbWQgPSBjbWQtPm1fcGFyZW50KQotICAgICAgICBjbWQtPm1fc3RhcnRpbmdTZWxl
Y3Rpb24gPSBzOwotfQotCi12b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24gJnApCit2b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1Nl
bGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIHMpCiB7Ci0gICAgU2VsZWN0aW9uIHMgPSBTZWxlY3Rp
b24ocC5kZWVwRXF1aXZhbGVudCgpLCBwLmFmZmluaXR5KCkpOwotICAgIGZvciAoRWRpdENvbW1h
bmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkKLSAgICAgICAgY21kLT5t
X3N0YXJ0aW5nU2VsZWN0aW9uID0gczsKLX0KLQotdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3RhcnRp
bmdTZWxlY3Rpb24oY29uc3QgUG9zaXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkKLXsKLSAg
ICBTZWxlY3Rpb24gcyA9IFNlbGVjdGlvbihwLCBhZmZpbml0eSk7Ci0gICAgZm9yIChFZGl0Q29t
bWFuZCAqY21kID0gdGhpczsgY21kOyBjbWQgPSBjbWQtPm1fcGFyZW50KQorICAgIEVsZW1lbnQq
IHJvb3QgPSBzLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBmb3IgKEVkaXRDb21tYW5kKiBj
bWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNtZC0+bV9wYXJlbnQpIHsKICAgICAgICAgY21kLT5tX3N0
YXJ0aW5nU2VsZWN0aW9uID0gczsKKyAgICAgICAgY21kLT5tX3N0YXJ0aW5nUm9vdEVkaXRhYmxl
RWxlbWVudCA9IHJvb3Q7CisgICAgICAgIGlmICghY21kLT5tX3BhcmVudCB8fCBjbWQtPm1fcGFy
ZW50LT5pc0ZpcnN0Q29tbWFuZChjbWQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQogfQog
CiB2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZz
KQogewotICAgIGZvciAoRWRpdENvbW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5t
X3BhcmVudCkKLSAgICAgICAgY21kLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci19Ci0KLXZvaWQg
RWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnAp
Ci17Ci0gICAgU2VsZWN0aW9uIHMgPSBTZWxlY3Rpb24ocC5kZWVwRXF1aXZhbGVudCgpLCBwLmFm
ZmluaXR5KCkpOwotICAgIGZvciAoRWRpdENvbW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0g
Y21kLT5tX3BhcmVudCkKLSAgICAgICAgY21kLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci19Ci0K
LXZvaWQgRWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcCwg
RUFmZmluaXR5IGFmZmluaXR5KQotewotICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAsIGFm
ZmluaXR5KTsKLSAgICBmb3IgKEVkaXRDb21tYW5kICpjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNt
ZC0+bV9wYXJlbnQpCisgICAgRWxlbWVudCogcm9vdCA9IHMucm9vdEVkaXRhYmxlRWxlbWVudCgp
OworICAgIGZvciAoRWRpdENvbW1hbmQqIGNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3Bh
cmVudCkgewogICAgICAgICBjbWQtPm1fZW5kaW5nU2VsZWN0aW9uID0gczsKKyAgICAgICAgY21k
LT5tX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQgPSByb290OworICAgIH0KIH0KIAogdm9pZCBF
ZGl0Q29tbWFuZDo6c2V0VHlwaW5nU3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gc3R5bGUpCkBAIC0zNzMsNCArMjAzLDIwIEBAIHZvaWQgRWRpdENvbW1hbmQ6OnVw
ZGF0ZUxheW91dCgpIGNvbnN0CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiB9CiAKK3ZvaWQgRWRpdENvbW1hbmQ6OnNldFBhcmVudChDb21w
b3NpdGVFZGl0Q29tbWFuZCogcGFyZW50KQoreworICAgIEFTU0VSVChwYXJlbnQpOworICAgIEFT
U0VSVCghbV9wYXJlbnQpOworICAgIG1fcGFyZW50ID0gcGFyZW50OworICAgIG1fc3RhcnRpbmdT
ZWxlY3Rpb24gPSBwYXJlbnQtPm1fZW5kaW5nU2VsZWN0aW9uOworICAgIG1fZW5kaW5nU2VsZWN0
aW9uID0gcGFyZW50LT5tX2VuZGluZ1NlbGVjdGlvbjsKKyAgICBtX3N0YXJ0aW5nUm9vdEVkaXRh
YmxlRWxlbWVudCA9IHBhcmVudC0+bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50OworICAgIG1f
ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCA9IHBhcmVudC0+bV9lbmRpbmdSb290RWRpdGFibGVF
bGVtZW50OworfQorCit2b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBj
b21tYW5kKQoreworICAgIGNvbW1hbmQtPmFwcGx5KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNv
cmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjMsMTE4ICsyMyw2OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBl
ZGl0X2NvbW1hbmRfaF9fCi0jZGVmaW5lIGVkaXRfY29tbWFuZF9oX18KKyNpZm5kZWYgRWRpdENv
bW1hbmRfaAorI2RlZmluZSBFZGl0Q29tbWFuZF9oCiAKICNpbmNsdWRlICJFZGl0QWN0aW9uLmgi
CiAjaW5jbHVkZSAiU2VsZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
Q29tcG9zaXRlRWRpdENvbW1hbmQ7CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsK
LWNsYXNzIERvY3VtZW50OwotY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRWRpdENvbW1hbmQKLQotY2xhc3MgRWRpdENvbW1h
bmQgOiBwdWJsaWMgU2hhcmVkPEVkaXRDb21tYW5kPgoteworY2xhc3MgRWRpdENvbW1hbmQgOiBw
dWJsaWMgU2hhcmVkPEVkaXRDb21tYW5kPiB7CiBwdWJsaWM6Ci0gICAgRWRpdENvbW1hbmQoRG9j
dW1lbnQgKik7CisgICAgRWRpdENvbW1hbmQoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5FZGl0
Q29tbWFuZCgpOwogCi0gICAgYm9vbCBpc0NvbXBvc2l0ZVN0ZXAoKSBjb25zdCB7IHJldHVybiBt
X3BhcmVudCAhPSAwOyB9Ci0gICAgRWRpdENvbW1hbmQgKnBhcmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50OyB9Ci0gICAgdm9pZCBzZXRQYXJlbnQoRWRpdENvbW1hbmQgKnBhcmVudCkgeyBt
X3BhcmVudCA9IHBhcmVudDsgfQorICAgIHZvaWQgc2V0UGFyZW50KENvbXBvc2l0ZUVkaXRDb21t
YW5kKik7CiAKLSAgICBlbnVtIEVDb21tYW5kU3RhdGUgeyBOb3RBcHBsaWVkLCBBcHBsaWVkIH07
Ci0gICAgCiAgICAgdm9pZCBhcHBseSgpOwogICAgIHZvaWQgdW5hcHBseSgpOwogICAgIHZvaWQg
cmVhcHBseSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRvVW5hcHBseSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7ICAv
LyBjYWxscyBkb0FwcGx5KCkKLQogICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIERvY3VtZW50ICogY29uc3QgZG9jdW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2RvY3VtZW50LmdldCgpOyB9Ci0KICAgICBTZWxlY3Rpb24gc3RhcnRpbmdT
ZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nU2VsZWN0aW9uOyB9CiAgICAgU2Vs
ZWN0aW9uIGVuZGluZ1NlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kaW5nU2VsZWN0aW9u
OyB9CiAKLSAgICBFQ29tbWFuZFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsg
fQotICAgIHZvaWQgc2V0U3RhdGUoRUNvbW1hbmRTdGF0ZSBzdGF0ZSkgeyBtX3N0YXRlID0gc3Rh
dGU7IH0KLQotICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZz
KTsKLSAgICB2b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
cCk7Ci0gICAgdm9pZCBzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcCwgRUFm
ZmluaXR5IGFmZmluaXR5KTsKLSAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxl
Y3Rpb24gJnMpOwotICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmcCk7Ci0gICAgdm9pZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgUG9zaXRpb24gJnAs
IEVBZmZpbml0eSBhZmZpbml0eSk7CisgICAgRWxlbWVudCogc3RhcnRpbmdSb290RWRpdGFibGVF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQuZ2V0
KCk7IH0KKyAgICBFbGVtZW50KiBlbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50LmdldCgpOyB9CiAKICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGlu
Z1N0eWxlLmdldCgpOyB9OwogICAgIHZvaWQgc2V0VHlwaW5nU3R5bGUoUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4pOwogICAgIAotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwotICAg
IAogICAgIHZpcnR1YWwgYm9vbCBpc0luc2VydFRleHRDb21tYW5kKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0OwogCitwcm90ZWN0ZWQ6CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQorCisg
ICAgdm9pZCBzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKTsKKyAgICB2b2lk
IHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKTsKKworICAgIFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlQXRQb3NpdGlvbihjb25zdCBQb3NpdGlv
biYpOwogICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6Cisg
ICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBs
eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7IC8vIGNhbGxzIGRvQXBwbHko
KQorCiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7CiAKICAg
ICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7Ci0gICAgRUNvbW1hbmRTdGF0ZSBtX3N0YXRl
OwogICAgIFNlbGVjdGlvbiBtX3N0YXJ0aW5nU2VsZWN0aW9uOwogICAgIFNlbGVjdGlvbiBtX2Vu
ZGluZ1NlbGVjdGlvbjsKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9zdGFydGluZ1Jvb3RFZGl0YWJs
ZUVsZW1lbnQ7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVu
dDsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7
Ci0gICAgRWRpdENvbW1hbmQgKm1fcGFyZW50OworICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBt
X3BhcmVudDsKIH07CiAKLWNsYXNzIEVkaXRDb21tYW5kUHRyIDogcHVibGljIFJlZlB0cjxFZGl0
Q29tbWFuZD4KLXsKLXB1YmxpYzoKLSAgICBFZGl0Q29tbWFuZFB0cigpOwotICAgIEVkaXRDb21t
YW5kUHRyKEVkaXRDb21tYW5kICopOwotCi0gICAgYm9vbCBpc0NvbXBvc2l0ZVN0ZXAoKSBjb25z
dDsKLQotICAgIHZvaWQgYXBwbHkoKSBjb25zdDsKLSAgICB2b2lkIHVuYXBwbHkoKSBjb25zdDsK
LSAgICB2b2lkIHJlYXBwbHkoKSBjb25zdDsKLQotICAgIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bigpIGNvbnN0OwotCi0gICAgRG9jdW1lbnQgKiBjb25zdCBkb2N1bWVudCgpIGNvbnN0OwotCi0g
ICAgU2VsZWN0aW9uIHN0YXJ0aW5nU2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgU2VsZWN0aW9uIGVu
ZGluZ1NlbGVjdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTdGFydGluZ1NlbGVjdGlvbihj
b25zdCBTZWxlY3Rpb24gJnMpIGNvbnN0OwotICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKSBjb25zdDsKLSAgICB2b2lkIHNldFN0YXJ0aW5nU2Vs
ZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0OwotICAg
IHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmcykgY29uc3Q7Ci0gICAg
dm9pZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKSBjb25zdDsK
LSAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcCwgRUFmZmluaXR5
IGFmZmluaXR5KSBjb25zdDsKLQotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBp
bmdTdHlsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwaW5nU3R5bGUoUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4pIGNvbnN0OwotCi0gICAgRWRpdENvbW1hbmRQdHIgcGFy
ZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQYXJlbnQoY29uc3QgRWRpdENvbW1hbmRQdHIgJikg
Y29uc3Q7Ci0KLSAgICBib29sIGlzSW5zZXJ0VGV4dENvbW1hbmQoKSBjb25zdDsKLSAgICBib29s
IGlzSW5zZXJ0TGluZUJyZWFrQ29tbWFuZCgpIGNvbnN0OwotICAgIGJvb2wgaXNUeXBpbmdDb21t
YW5kKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgRWRpdENvbW1hbmRQdHIgJmVtcHR5Q29tbWFuZCgp
OwotfTsKK3ZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19lZGl0X2NvbW1hbmRfaF9fCisjZW5k
aWYgLy8gRWRpdENvbW1hbmRfaApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDggQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAogRm9ybWF0QmxvY2tDb21tYW5kOjpGb3JtYXRCbG9ja0NvbW1hbmQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRhZ05hbWUpIAogICAgIDogQ29tcG9zaXRl
RWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3RhZ05hbWUodGFnTmFtZSkKLXt9Ci0KLQoreworfQog
CiBib29sIEZvcm1hdEJsb2NrQ29tbWFuZDo6bW9kaWZ5UmFuZ2UoKQogewpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9ybWF0QmxvY2tDb21tYW5kIDog
cHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kCi17CitjbGFzcyBGb3JtYXRCbG9ja0NvbW1hbmQg
OiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIEZvcm1hdEJsb2Nr
Q29tbWFuZChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYpOworICAgIEZvcm1hdEJsb2NrQ29tbWFu
ZChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgdGFnTmFtZSk7CiAgICAgdmlydHVhbCB2b2lkIGRv
QXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIEVkaXRBY3Rpb25Gb3JtYXRCbG9jazsgfQogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJD
b3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NiwxMCArOTYsOCBAQCBOb2RlKiBJbmRlbnRPdXRkZW50Q29tbWFuZDo6c3BsaXRUcmVlVG9OCiAg
ICAgZm9yIChub2RlID0gc3RhcnQ7IG5vZGUgJiYgbm9kZS0+cGFyZW50KCkgIT0gZW5kOyBub2Rl
ID0gbm9kZS0+cGFyZW50KCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uSW5Q
YXJlbnQoUG9zaXRpb24obm9kZS0+cGFyZW50KCksIDApLCBET1dOU1RSRUFNKTsKICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uSW5Ob2RlKFBvc2l0aW9uKG5vZGUsIDApLCBET1dOU1RS
RUFNKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uSW5QYXJlbnQgIT0gcG9zaXRpb25Jbk5vZGUpIHsK
LSAgICAgICAgICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgU3BsaXRFbGVtZW50Q29tbWFuZChk
b2N1bWVudCgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZS0+cGFyZW50KCkpLCBub2RlKSk7
Ci0gICAgICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChwb3NpdGlvbkluUGFyZW50ICE9IHBvc2l0aW9uSW5Ob2RlKQorICAgICAgICAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFNwbGl0RWxlbWVudENvbW1hbmQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUtPnBhcmVudCgpKSwgbm9kZSkpOwogICAgIH0KICAgICBpZiAo
c3BsaXRBbmNlc3RvcikKICAgICAgICAgcmV0dXJuIHNwbGl0VHJlZVRvTm9kZShlbmQsIGVuZC0+
cGFyZW50KCkpOwpAQCAtMTcxLDE4ICsxNjksMTcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFu
ZDo6b3V0ZGVudFBhcmFncgogCiAgICAgLy8gSGFuZGxlIHRoZSBsaXN0IGNhc2UKICAgICBib29s
IGluTGlzdCA9IGZhbHNlOwotICAgIEluc2VydExpc3RDb21tYW5kOjpFTGlzdFR5cGUgdHlwZU9m
TGlzdDsKKyAgICBJbnNlcnRMaXN0Q29tbWFuZDo6VHlwZSB0eXBlT2ZMaXN0OwogICAgIGlmIChl
bmNsb3NpbmdOb2RlLT5oYXNUYWdOYW1lKG9sVGFnKSkgewogICAgICAgICBpbkxpc3QgPSB0cnVl
OwotICAgICAgICB0eXBlT2ZMaXN0ID0gSW5zZXJ0TGlzdENvbW1hbmQ6Ok9yZGVyZWRMaXN0VHlw
ZTsKKyAgICAgICAgdHlwZU9mTGlzdCA9IEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdDsK
ICAgICB9IGVsc2UgaWYgKGVuY2xvc2luZ05vZGUtPmhhc1RhZ05hbWUodWxUYWcpKSB7CiAgICAg
ICAgIGluTGlzdCA9IHRydWU7Ci0gICAgICAgIHR5cGVPZkxpc3QgPSBJbnNlcnRMaXN0Q29tbWFu
ZDo6VW5vcmRlcmVkTGlzdFR5cGU7CisgICAgICAgIHR5cGVPZkxpc3QgPSBJbnNlcnRMaXN0Q29t
bWFuZDo6VW5vcmRlcmVkTGlzdDsKICAgICB9CiAgICAgaWYgKGluTGlzdCkgewogICAgICAgICAv
LyBVc2UgSW5zZXJ0TGlzdENvbW1hbmQgdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
bGlzdAotICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IEluc2VydExpc3RDb21tYW5kKGRv
Y3VtZW50KCksIHR5cGVPZkxpc3QsICIiKSk7Ci0gICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKGNtZCk7CisgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBJbnNlcnRMaXN0
Q29tbWFuZChkb2N1bWVudCgpLCB0eXBlT2ZMaXN0LCAiIikpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIC8vIFRoZSBzZWxlY3Rpb24gaXMgaW5zaWRlIGEgYmxvY2txdW90ZQpAQCAtMjI3
LDcgKzIyNCw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRSZWdpb24KICAg
ICB3aGlsZSAoZW5kT2ZDdXJyZW50UGFyYWdyYXBoICE9IGVuZEFmdGVyU2VsZWN0aW9uKSB7CiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFw
aChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgubmV4dCgpKTsKICAgICAgICAgaWYgKGVuZE9mQ3VycmVu
dFBhcmFncmFwaCA9PSBlbmRPZkxhc3RQYXJhZ3JhcGgpCi0gICAgICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24ob3JpZ2luYWxTZWxlY3Rpb25FbmQsIERPV05TVFJFQU0pOworICAgICAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihvcmlnaW5hbFNlbGVjdGlvbkVuZCwgRE9XTlNU
UkVBTSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5k
T2ZDdXJyZW50UGFyYWdyYXBoKTsKICAgICAgICAgb3V0ZGVudFBhcmFncmFwaCgpOwpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNp
b24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
KERvY3VtZW50ICpkb2N1bWVudCwgVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3RyaW5n
ICZ0ZXh0KQotICAgIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX25vZGUobm9kZSksIG1fb2Zm
c2V0KG9mZnNldCkKK0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQoVGV4dCAqbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3RyaW5nICZ0ZXh0KQorICAg
IDogRWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSksIG1fbm9kZShub2RlKSwgbV9vZmZzZXQo
b2Zmc2V0KQogewogICAgIEFTU0VSVChtX25vZGUpOwogICAgIEFTU0VSVChtX29mZnNldCA+PSAw
KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaAko
cmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjIgKzI5LDE3
IEBACiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IGNsYXNzIFRleHQ7Ci0gICAgY2xhc3MgU3RyaW5nOwotfQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBUZXh0OwogCi1jbGFzcyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kIDogcHVibGlj
IEVkaXRDb21tYW5kCi17CitjbGFzcyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kIDogcHVibGlj
IEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKERv
Y3VtZW50ICpkb2N1bWVudCwgVGV4dCAqLCBpbnQsIGNvbnN0IFN0cmluZyAmKTsKLSAgICB2aXJ0
dWFsIH5JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKCkgeyB9CisgICAgSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZChUZXh0KiBub2RlLCBpbnQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5
KCk7CiAKLSAgICBUZXh0ICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9Cisg
ICAgVGV4dCogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogICAgIGludCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIFN0cmluZyB0ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0OyB9CiAKQEAgLTU2LDQgKzUxLDQgQEAgcHJpdmF0ZToKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19pbnNlcnRfaW50b190ZXh0X25vZGVf
Y29tbWFuZF9oX18KKyNlbmRpZiAvLyBpbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZF9oX18K
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICBpZiAoaXNUYWJTcGFuKSB7CiAgICAgICAgIGlu
c2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbihub2RlVG9JbnNlcnQuZ2V0KCksIHBvcyk7Ci0gICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlvbihub2RlVG9JbnNlcnQtPnRyYXZlcnNlTmV4
dE5vZGUoKSwgMCksIERPV05TVFJFQU0pOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2Vs
ZWN0aW9uKFBvc2l0aW9uKG5vZGVUb0luc2VydC0+dHJhdmVyc2VOZXh0Tm9kZSgpLCAwKSwgRE9X
TlNUUkVBTSkpOwogICAgIH0gZWxzZSBpZiAoaXNFbmRPZkJsb2NrKFZpc2libGVQb3NpdGlvbihw
b3MsIHNlbGVjdGlvbi5hZmZpbml0eSgpKSkpIHsKICAgICAgICAgTm9kZSogYmxvY2sgPSBwb3Mu
bm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiAgICAgICAgIApAQCAtMTE5LDIw
ICsxMTksMjAgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgaWYgKCFoYXZlQnJlYWspCiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXIoY3JlYXRlQnJl
YWtFbGVtZW50KGRvY3VtZW50KCkpLmdldCgpLCBub2RlVG9JbnNlcnQuZ2V0KCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlvbihibG9jaywgbWF4RGVl
cE9mZnNldChibG9jaykpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFNlbGVjdGlvbihQb3NpdGlvbihibG9jaywgbWF4RGVlcE9mZnNldChibG9jaykpLCBET1dOU1RS
RUFNKSk7CiAgICAgfSBlbHNlIGlmIChwb3Mub2Zmc2V0KCkgPD0gcG9zLm5vZGUoKS0+Y2FyZXRN
aW5PZmZzZXQoKSkgewogICAgICAgICBMT0coRWRpdGluZywgImlucHV0IG5ld2xpbmUgY2FzZSAy
Iik7CiAgICAgICAgIC8vIEluc2VydCBub2RlIGJlZm9yZSBkb3duc3RyZWFtIHBvc2l0aW9uLCBh
bmQgcGxhY2UgY2FyZXQgdGhlcmUgYXMgd2VsbC4gCiAgICAgICAgIFBvc2l0aW9uIGVuZGluZ1Bv
c2l0aW9uID0gcG9zLmRvd25zdHJlYW0oKTsKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZVBvc2l0
aW9uKG5vZGVUb0luc2VydC5nZXQoKSwgZW5kaW5nUG9zaXRpb24pOwotICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oZW5kaW5nUG9zaXRpb24sIERPV05TVFJFQU0pOworICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uLCBET1dOU1RSRUFNKSk7CiAgICAg
fSBlbHNlIGlmIChwb3Mub2Zmc2V0KCkgPj0gcG9zLm5vZGUoKS0+Y2FyZXRNYXhPZmZzZXQoKSkg
ewogICAgICAgICBMT0coRWRpdGluZywgImlucHV0IG5ld2xpbmUgY2FzZSAzIik7CiAgICAgICAg
IC8vIEluc2VydCBCUiBhZnRlciB0aGlzIG5vZGUuIFBsYWNlIGNhcmV0IGluIHRoZSBwb3NpdGlv
biB0aGF0IGlzIGRvd25zdHJlYW0KICAgICAgICAgLy8gb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24s
IHJlY2tvbmVkIGJlZm9yZSBpbnNlcnRpbmcgdGhlIEJSIGluIGJldHdlZW4uCiAgICAgICAgIFBv
c2l0aW9uIGVuZGluZ1Bvc2l0aW9uID0gcG9zLmRvd25zdHJlYW0oKTsKICAgICAgICAgaW5zZXJ0
Tm9kZUFmdGVyUG9zaXRpb24obm9kZVRvSW5zZXJ0LmdldCgpLCBwb3MpOwotICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oZW5kaW5nUG9zaXRpb24sIERPV05TVFJFQU0pOworICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uLCBET1dOU1RSRUFNKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gU3BsaXQgYSB0ZXh0IG5vZGUKICAgICAgICAgTE9HKEVk
aXRpbmcsICJpbnB1dCBuZXdsaW5lIGNhc2UgNCIpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQg
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICBpbnNlcnRUZXh0
SW50b05vZGUodGV4dE5vZGUsIDAsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRpbmdQb3NpdGlvbiwg
RE9XTlNUUkVBTSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oZW5kaW5n
UG9zaXRpb24sIERPV05TVFJFQU0pKTsKICAgICB9CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgdGhlcmUgaXMgYSB0eXBpbmcgc3R5bGUuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaW5lQnJlYWtDb21tYW5kLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpbmVCcmVha0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDE3ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElu
c2VydExpbmVCcmVha0NvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQKLXsKK2Ns
YXNzIEluc2VydExpbmVCcmVha0NvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQg
ewogcHVibGljOgotICAgIEluc2VydExpbmVCcmVha0NvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50
KTsKKyAgICBJbnNlcnRMaW5lQnJlYWtDb21tYW5kKERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZG9BcHBseSgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNU
eXBpbmdTdHlsZSgpIGNvbnN0OwotICAgIHZvaWQgaW5zZXJ0Tm9kZUFmdGVyUG9zaXRpb24oTm9k
ZSAqbm9kZSwgY29uc3QgUG9zaXRpb24gJnBvcyk7Ci0gICAgdm9pZCBpbnNlcnROb2RlQmVmb3Jl
UG9zaXRpb24oTm9kZSAqbm9kZSwgY29uc3QgUG9zaXRpb24gJnBvcyk7CisgICAgdm9pZCBpbnNl
cnROb2RlQWZ0ZXJQb3NpdGlvbihOb2RlKiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICB2b2lkIGlu
c2VydE5vZGVCZWZvcmVQb3NpdGlvbihOb2RlKiwgY29uc3QgUG9zaXRpb24mKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5k
LmNwcAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSwxMCBAQCBOb2RlKiBJbnNlcnRMaXN0
Q29tbWFuZDo6Zml4T3JwaGFuZWRMaXN0CiAgICAgcmV0dXJuIGxpc3RFbGVtZW50LmdldCgpOwog
fQogCi1JbnNlcnRMaXN0Q29tbWFuZDo6SW5zZXJ0TGlzdENvbW1hbmQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBFTGlzdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBpZCkgCitJbnNlcnRMaXN0Q29tbWFu
ZDo6SW5zZXJ0TGlzdENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgaWQpIAogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3R5
cGUodHlwZSksIG1faWQoaWQpLCBtX2ZvcmNlQ3JlYXRlTGlzdChmYWxzZSkKLXt9Cit7Cit9CiAK
IGJvb2wgSW5zZXJ0TGlzdENvbW1hbmQ6Om1vZGlmeVJhbmdlKCkKIHsKQEAgLTk0LDcgKzk1LDcg
QEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBOb2RlKiBzZWxlY3Rpb25Ob2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5u
b2RlKCk7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSBsaXN0VGFnID0gKG1fdHlwZSA9PSBPcmRl
cmVkTGlzdFR5cGUpID8gb2xUYWcgOiB1bFRhZzsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lIGxp
c3RUYWcgPSAobV90eXBlID09IE9yZGVyZWRMaXN0KSA/IG9sVGFnIDogdWxUYWc7CiAgICAgTm9k
ZSogbGlzdENoaWxkTm9kZSA9IGVuY2xvc2luZ0xpc3RDaGlsZChzZWxlY3Rpb25Ob2RlKTsKICAg
ICBib29sIHN3aXRjaExpc3RUeXBlID0gZmFsc2U7CiAgICAgaWYgKGxpc3RDaGlsZE5vZGUpIHsK
QEAgLTE2Miw3ICsxNjMsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgICAgIGFwcGVuZE5vZGUobGlzdEl0ZW1FbGVtZW50LmdldCgpLCBuZXh0TGlzdCk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0LgotICAgICAgICAg
ICAgUmVmUHRyPEVsZW1lbnQ+IGxpc3RFbGVtZW50ID0gbV90eXBlID09IE9yZGVyZWRMaXN0VHlw
ZSA/IGNyZWF0ZU9yZGVyZWRMaXN0RWxlbWVudChkb2N1bWVudCgpKSA6IGNyZWF0ZVVub3JkZXJl
ZExpc3RFbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGxp
c3RFbGVtZW50ID0gbV90eXBlID09IE9yZGVyZWRMaXN0ID8gY3JlYXRlT3JkZXJlZExpc3RFbGVt
ZW50KGRvY3VtZW50KCkpIDogY3JlYXRlVW5vcmRlcmVkTGlzdEVsZW1lbnQoZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGxpc3RFbGVtZW50LmdldCgp
KS0+c2V0SWQobV9pZCk7CiAgICAgICAgICAgICBhcHBlbmROb2RlKGxpc3RJdGVtRWxlbWVudC5n
ZXQoKSwgbGlzdEVsZW1lbnQuZ2V0KCkpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGxpc3RF
bGVtZW50LmdldCgpLCBzdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwgc3RhcnQuZGVlcEVx
dWl2YWxlbnQoKS5vZmZzZXQoKSk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENv
bW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQu
aAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSW5zZXJ0TGlzdENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1h
bmQKLXsKK2NsYXNzIEluc2VydExpc3RDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21t
YW5kIHsKIHB1YmxpYzoKLSAgICBlbnVtIEVMaXN0VHlwZSB7IE9yZGVyZWRMaXN0VHlwZSwgVW5v
cmRlcmVkTGlzdFR5cGUgfTsKLSAgICBJbnNlcnRMaXN0Q29tbWFuZChEb2N1bWVudCosIEVMaXN0
VHlwZSwgY29uc3QgU3RyaW5nJik7CisgICAgZW51bSBUeXBlIHsgT3JkZXJlZExpc3QsIFVub3Jk
ZXJlZExpc3QgfTsKKyAgICBJbnNlcnRMaXN0Q29tbWFuZChEb2N1bWVudCosIFR5cGUsIGNvbnN0
IFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0QWN0aW9uSW5zZXJ0TGlz
dDsgfQogcHJpdmF0ZToKICAgICBOb2RlKiBmaXhPcnBoYW5lZExpc3RDaGlsZChOb2RlKik7CiAg
ICAgYm9vbCBtb2RpZnlSYW5nZSgpOwotICAgIEVMaXN0VHlwZSBtX3R5cGU7CisgICAgVHlwZSBt
X3R5cGU7CiAgICAgU3RyaW5nIG1faWQ7CiAgICAgYm9vbCBtX2ZvcmNlQ3JlYXRlTGlzdDsKIH07
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChE
b2N1bWVudCAqZG9jdW1lbnQsIE5vZGUgKmluc2VydENoaWxkLCBOb2RlICpyZWZDaGlsZCkKLSAg
ICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9pbnNlcnRDaGlsZChpbnNlcnRDaGlsZCksIG1f
cmVmQ2hpbGQocmVmQ2hpbGQpCitJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6SW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hpbGQp
CisgICAgOiBFZGl0Q29tbWFuZChyZWZDaGlsZC0+ZG9jdW1lbnQoKSksIG1faW5zZXJ0Q2hpbGQo
aW5zZXJ0Q2hpbGQpLCBtX3JlZkNoaWxkKHJlZkNoaWxkKQogewogICAgIEFTU0VSVChtX2luc2Vy
dENoaWxkKTsKICAgICBBU1NFUlQobV9yZWZDaGlsZCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuaAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIzLDI0ICsyMywyMiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBfX2luc2VydF9ub2RlX2JlZm9yZV9jb21tYW5kX2hfXwotI2RlZmluZSBfX2luc2VydF9u
b2RlX2JlZm9yZV9jb21tYW5kX2hfXworI2lmbmRlZiBpbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFu
ZF9oX18KKyNkZWZpbmUgaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmRfaF9fCiAKICNpbmNsdWRl
ICJFZGl0Q29tbWFuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc2VydE5v
ZGVCZWZvcmVDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kCi17CitjbGFzcyBJbnNlcnROb2Rl
QmVmb3JlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgSW5zZXJ0
Tm9kZUJlZm9yZUNvbW1hbmQoRG9jdW1lbnQgKiwgTm9kZSAqaW5zZXJ0Q2hpbGQsIE5vZGUgKnJl
ZkNoaWxkKTsKLSAgICB2aXJ0dWFsIH5JbnNlcnROb2RlQmVmb3JlQ29tbWFuZCgpIHsgfQorICAg
IEluc2VydE5vZGVCZWZvcmVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4sIE5vZGUqIHJlZkNoaWxk
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5h
cHBseSgpOwogCi0gICAgTm9kZSAqaW5zZXJ0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2luc2Vy
dENoaWxkLmdldCgpOyB9Ci0gICAgTm9kZSAqcmVmQ2hpbGQoKSBjb25zdCB7IHJldHVybiBtX3Jl
ZkNoaWxkLmdldCgpOyB9CisgICAgTm9kZSogaW5zZXJ0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBt
X2luc2VydENoaWxkLmdldCgpOyB9CisgICAgTm9kZSogcmVmQ2hpbGQoKSBjb25zdCB7IHJldHVy
biBtX3JlZkNoaWxkLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1faW5z
ZXJ0Q2hpbGQ7CkBAIC00OSw0ICs0Nyw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIF9faW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmRfaF9fCisjZW5k
aWYgLy8gaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmRfaF9fCkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lv
biAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDExICsxMDAsOCBAQCB2b2lkIEluc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgLy8gRklYTUU6IFR1cm4gaW50byBhbiBJ
bnNlcnRMaW5lQnJlYWsgaW4gb3RoZXIgY2FzZXMgd2hlcmUgd2UgZG9uJ3Qgd2FudCB0byBkbyB0
aGUgc3BsaXR0aW5nL2Nsb25pbmcgdGhhdAogICAgIC8vIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ciBkb2VzLgogICAgIE5vZGUqIGJsb2NrID0gcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpOwotICAgIGlmICghYmxvY2sgfHwKLSAgICAgICAgIWJsb2NrLT5wYXJlbnROb2Rl
KCkgfHwKLSAgICAgICAgYmxvY2stPnJlbmRlcmVyKCkgJiYgYmxvY2stPnJlbmRlcmVyKCktPmlz
VGFibGVDZWxsKCkpIHsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnRMaW5l
QnJlYWtDb21tYW5kKGRvY3VtZW50KCkpKTsgCi0gICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKGNtZCk7CisgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPnBhcmVudE5vZGUoKSB8fCBibG9j
ay0+cmVuZGVyZXIoKSAmJiBibG9jay0+cmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwoKSkgeworICAg
ICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZChk
b2N1bWVudCgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xNTcsNyArMTU0
LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICAg
ICAgaW5zZXJ0Tm9kZUFmdGVyKGJsb2NrVG9JbnNlcnQuZ2V0KCksIHN0YXJ0QmxvY2spOwogCiAg
ICAgICAgIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoYmxvY2tUb0luc2VydC5nZXQoKSk7Ci0gICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlvbihibG9ja1RvSW5zZXJ0LmdldCgpLCAwKSwg
RE9XTlNUUkVBTSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRp
b24oYmxvY2tUb0luc2VydC5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKICAgICAgICAgYXBwbHlT
dHlsZUFmdGVySW5zZXJ0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzksOSAr
MTc2LDkgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogCiAgICAg
ICAgIGluc2VydE5vZGVCZWZvcmUoYmxvY2tUb0luc2VydC5nZXQoKSwgcmVmTm9kZSk7CiAgICAg
ICAgIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoYmxvY2tUb0luc2VydC5nZXQoKSk7Ci0gICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlvbihibG9ja1RvSW5zZXJ0LmdldCgpLCAwKSwgRE9X
TlNUUkVBTSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24o
YmxvY2tUb0luc2VydC5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKICAgICAgICAgYXBwbHlTdHls
ZUFmdGVySW5zZXJ0aW9uKCk7Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihwb3MsIERPV05T
VFJFQU0pOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKHBvcywgRE9XTlNU
UkVBTSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yOTMsNyArMjkwLDcgQEAgdm9p
ZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDAp
LCBET1dOU1RSRUFNKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9u
KGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dOU1RSRUFNKSk7CiAgICAgYXBwbHlTdHlsZUFm
dGVySW5zZXJ0aW9uKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTAgKzEzOSwxMCBAQCB2b2lkIEluc2VydFRl
eHRDb21tYW5kOjppbnB1dChjb25zdCBTdHJpCiAgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5
bGUpOwogCiAgICAgaWYgKCFzZWxlY3RJbnNlcnRlZFRleHQpCi0gICAgICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5p
dHkoKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oZW5kaW5nU2VsZWN0
aW9uKCkuZW5kKCksIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsKIH0KIAotUG9zaXRp
b24gSW5zZXJ0VGV4dENvbW1hbmQ6Omluc2VydFRhYihQb3NpdGlvbiBwb3MpCitQb3NpdGlvbiBJ
bnNlcnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAg
UG9zaXRpb24gaW5zZXJ0UG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSkuZGVl
cEVxdWl2YWxlbnQoKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4
dENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1h
bmQuaAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDM0ICsyMywzMyBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBfX2luc2VydF90ZXh0X2NvbW1hbmRf
aF9fCi0jZGVmaW5lIF9faW5zZXJ0X3RleHRfY29tbWFuZF9oX18KKyNpZm5kZWYgaW5zZXJ0X3Rl
eHRfY29tbWFuZF9oX18KKyNkZWZpbmUgaW5zZXJ0X3RleHRfY29tbWFuZF9oX18KIAogI2luY2x1
ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgSW5zZXJ0VGV4dENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQKLXsKK2Ns
YXNzIEluc2VydFRleHRDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1
YmxpYzoKLSAgICBJbnNlcnRUZXh0Q29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQpOworICAgIElu
c2VydFRleHRDb21tYW5kKERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgp
OwogCiAgICAgdm9pZCBkZWxldGVDaGFyYWN0ZXIoKTsKLSAgICB2b2lkIGlucHV0KGNvbnN0IFN0
cmluZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSk7Ci0gICAgCisgICAg
dm9pZCBpbnB1dChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0ID0g
ZmFsc2UpOworCiAgICAgdW5zaWduZWQgY2hhcmFjdGVyc0FkZGVkKCkgY29uc3QgeyByZXR1cm4g
bV9jaGFyYWN0ZXJzQWRkZWQ7IH0KICAgICAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
SW5zZXJ0VGV4dENvbW1hbmQoKSBjb25zdDsKIAotICAgIFBvc2l0aW9uIHByZXBhcmVGb3JUZXh0
SW5zZXJ0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3MpOwotICAgIFBvc2l0aW9uIGluc2VydFRhYihQ
b3NpdGlvbiBwb3MpOworICAgIFBvc2l0aW9uIHByZXBhcmVGb3JUZXh0SW5zZXJ0aW9uKGNvbnN0
IFBvc2l0aW9uJik7CisgICAgUG9zaXRpb24gaW5zZXJ0VGFiKGNvbnN0IFBvc2l0aW9uJik7CiAK
ICAgICB1bnNpZ25lZCBtX2NoYXJhY3RlcnNBZGRlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIF9faW5zZXJ0X3RleHRfY29tbWFuZF9oX18KKyNlbmRpZiAvLyBp
bnNlcnRfdGV4dF9jb21tYW5kX2hfXwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0pTRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSlNFZGl0b3IuY3BwCShyZXZpc2lvbiAx
NTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9KU0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDg4ICs1NCw4OCBAQCBuYW1lc3BhY2UgewogYm9vbCBzdXBwb3J0c1Bhc3RlQ29tbWFuZCA9
IGZhbHNlOwogCiBzdHJ1Y3QgQ29tbWFuZEltcCB7Ci0gICAgYm9vbCAoKmV4ZWNGbikoRnJhbWUg
KmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpOwotICAgIGJv
b2wgKCplbmFibGVkRm4pKEZyYW1lICpmcmFtZSk7Ci0gICAgRnJhbWU6OlRyaVN0YXRlICgqc3Rh
dGVGbikoRnJhbWUgKmZyYW1lKTsKLSAgICBTdHJpbmcgKCp2YWx1ZUZuKShGcmFtZSAqZnJhbWUp
OworICAgIGJvb2wgKCpleGVjRm4pKEZyYW1lKiwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKyAgICBib29sICgqZW5hYmxlZEZuKShGcmFtZSopOworICAgIEZyYW1l
OjpUcmlTdGF0ZSAoKnN0YXRlRm4pKEZyYW1lKik7CisgICAgU3RyaW5nICgqdmFsdWVGbikoRnJh
bWUqKTsKIH07CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsICosIGNvbnN0IENvbW1hbmRJ
bXAgKiwgQ2FzZUluc2Vuc2l0aXZlSGFzaD4gQ29tbWFuZE1hcDsKK3R5cGVkZWYgSGFzaE1hcDxT
dHJpbmdJbXBsKiwgY29uc3QgQ29tbWFuZEltcCosIENhc2VJbnNlbnNpdGl2ZUhhc2g+IENvbW1h
bmRNYXA7CiAKLUNvbW1hbmRNYXAgKmNyZWF0ZUNvbW1hbmREaWN0aW9uYXJ5KCk7CitDb21tYW5k
TWFwKiBjcmVhdGVDb21tYW5kRGljdGlvbmFyeSgpOwogCi1jb25zdCBDb21tYW5kSW1wICpjb21t
YW5kSW1wKGNvbnN0IFN0cmluZyAmY29tbWFuZCkKK2NvbnN0IENvbW1hbmRJbXAqIGNvbW1hbmRJ
bXAoY29uc3QgU3RyaW5nJiBjb21tYW5kKQogewotICAgIHN0YXRpYyBDb21tYW5kTWFwICpjb21t
YW5kRGljdGlvbmFyeSA9IGNyZWF0ZUNvbW1hbmREaWN0aW9uYXJ5KCk7CisgICAgc3RhdGljIENv
bW1hbmRNYXAqIGNvbW1hbmREaWN0aW9uYXJ5ID0gY3JlYXRlQ29tbWFuZERpY3Rpb25hcnkoKTsK
ICAgICByZXR1cm4gY29tbWFuZERpY3Rpb25hcnktPmdldChjb21tYW5kLmltcGwoKSk7CiB9CiAK
IH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1ib29sIEpTRWRpdG9yOjpleGVjQ29tbWFuZChj
b25zdCBTdHJpbmcgJmNvbW1hbmQsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2
YWx1ZSkKK2Jvb2wgSlNFZGl0b3I6OmV4ZWNDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwg
Ym9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGNvbnN0IENv
bW1hbmRJbXAgKmNtZCA9IGNvbW1hbmRJbXAoY29tbWFuZCk7CisgICAgY29uc3QgQ29tbWFuZElt
cCogY21kID0gY29tbWFuZEltcChjb21tYW5kKTsKICAgICBpZiAoIWNtZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIEZyYW1lICpmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOworICAgIEZyYW1l
KiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKLSAgICByZXR1cm4gY21kLT5lbmFibGVkRm4oZnJhbWUpICYmIGNtZC0+ZXhlY0Zu
KGZyYW1lLCAgdXNlckludGVyZmFjZSwgdmFsdWUpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiBjbWQtPmVuYWJsZWRG
bihmcmFtZSkgJiYgY21kLT5leGVjRm4oZnJhbWUsIHVzZXJJbnRlcmZhY2UsIHZhbHVlKTsKIH0K
IAotYm9vbCBKU0VkaXRvcjo6cXVlcnlDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcgJmNvbW1h
bmQpCitib29sIEpTRWRpdG9yOjpxdWVyeUNvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29t
bWFuZCkKIHsKLSAgICBjb25zdCBDb21tYW5kSW1wICpjbWQgPSBjb21tYW5kSW1wKGNvbW1hbmQp
OworICAgIGNvbnN0IENvbW1hbmRJbXAqIGNtZCA9IGNvbW1hbmRJbXAoY29tbWFuZCk7CiAgICAg
aWYgKCFjbWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGcmFtZSAqZnJhbWUgPSBtX2Rv
Yy0+ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2RvYy0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgbV9kb2N1bWVudC0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgcmV0dXJuIGNtZC0+ZW5hYmxlZEZu
KGZyYW1lKTsKIH0KIAotYm9vbCBKU0VkaXRvcjo6cXVlcnlDb21tYW5kSW5kZXRlcm0oY29uc3Qg
U3RyaW5nICZjb21tYW5kKQorYm9vbCBKU0VkaXRvcjo6cXVlcnlDb21tYW5kSW5kZXRlcm0oY29u
c3QgU3RyaW5nJiBjb21tYW5kKQogewotICAgIGNvbnN0IENvbW1hbmRJbXAgKmNtZCA9IGNvbW1h
bmRJbXAoY29tbWFuZCk7CisgICAgY29uc3QgQ29tbWFuZEltcCogY21kID0gY29tbWFuZEltcChj
b21tYW5kKTsKICAgICBpZiAoIWNtZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZyYW1l
ICpmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQt
PmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
ZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBtX2RvY3Vt
ZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4g
Y21kLT5zdGF0ZUZuKGZyYW1lKSA9PSBGcmFtZTo6bWl4ZWRUcmlTdGF0ZTsKIH0KIAotYm9vbCBK
U0VkaXRvcjo6cXVlcnlDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nICZjb21tYW5kKQorYm9vbCBK
U0VkaXRvcjo6cXVlcnlDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kKQogewotICAg
IGNvbnN0IENvbW1hbmRJbXAgKmNtZCA9IGNvbW1hbmRJbXAoY29tbWFuZCk7CisgICAgY29uc3Qg
Q29tbWFuZEltcCogY21kID0gY29tbWFuZEltcChjb21tYW5kKTsKICAgICBpZiAoIWNtZCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZyYW1lICpmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKKyAgICBtX2RvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4gY21kLT5zdGF0ZUZuKGZyYW1lKSAhPSBGcmFt
ZTo6ZmFsc2VUcmlTdGF0ZTsKIH0KIAotYm9vbCBKU0VkaXRvcjo6cXVlcnlDb21tYW5kU3VwcG9y
dGVkKGNvbnN0IFN0cmluZyAmY29tbWFuZCkKK2Jvb2wgSlNFZGl0b3I6OnF1ZXJ5Q29tbWFuZFN1
cHBvcnRlZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpCiB7CiAgICAgaWYgKCFzdXBwb3J0c1Bhc3Rl
Q29tbWFuZCAmJiBjb21tYW5kLmxvd2VyKCkgPT0gInBhc3RlIikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBjb21tYW5kSW1wKGNvbW1hbmQpICE9IDA7CiB9CiAKLVN0cmluZyBK
U0VkaXRvcjo6cXVlcnlDb21tYW5kVmFsdWUoY29uc3QgU3RyaW5nICZjb21tYW5kKQorU3RyaW5n
IEpTRWRpdG9yOjpxdWVyeUNvbW1hbmRWYWx1ZShjb25zdCBTdHJpbmcmIGNvbW1hbmQpCiB7Ci0g
ICAgY29uc3QgQ29tbWFuZEltcCAqY21kID0gY29tbWFuZEltcChjb21tYW5kKTsKKyAgICBjb25z
dCBDb21tYW5kSW1wKiBjbWQgPSBjb21tYW5kSW1wKGNvbW1hbmQpOwogICAgIGlmICghY21kKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgRnJhbWUgKmZyYW1lID0gbV9kb2MtPmZyYW1l
KCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9kb2MtPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIG1fZG9jdW1lbnQtPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBjbWQtPnZhbHVlRm4oZnJhbWUp
OwogfQogCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBKU0VkaXRvcjo6c2V0U3VwcG9ydHNQYXN0
ZUNvbW1hbmQoYgogCiBuYW1lc3BhY2UgewogCi1ib29sIGV4ZWNTdHlsZUNoYW5nZShGcmFtZSAq
ZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnByb3BlcnR5VmFsdWUpCitib29s
IGV4ZWNTdHlsZUNoYW5nZShGcmFtZSogZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5VmFsdWUpCiB7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKICAgICBzdHlsZS0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSk7CkBAIC0xNTgsMjYgKzE1OCwy
NiBAQCBib29sIGV4ZWNTdHlsZUNoYW5nZShGcmFtZSAqZnJhbWUsIGludCBwCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgZXhlY1N0eWxlQ2hhbmdlKEZyYW1lICpmcmFtZSwgaW50IHByb3Bl
cnR5SUQsIGNvbnN0IGNoYXIgKnByb3BlcnR5VmFsdWUpCitib29sIGV4ZWNTdHlsZUNoYW5nZShG
cmFtZSogZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBjaGFyKiBwcm9wZXJ0eVZhbHVlKQog
ewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBwcm9wZXJ0eUlELCBTdHJpbmco
cHJvcGVydHlWYWx1ZSkpOworICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIHByb3Bl
cnR5SUQsIFN0cmluZyhwcm9wZXJ0eVZhbHVlKSk7CiB9CiAKLUZyYW1lOjpUcmlTdGF0ZSBzdGF0
ZVN0eWxlKEZyYW1lICpmcmFtZSwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIgKmRlc2lyZWRW
YWx1ZSkKK0ZyYW1lOjpUcmlTdGF0ZSBzdGF0ZVN0eWxlKEZyYW1lKiBmcmFtZSwgaW50IHByb3Bl
cnR5SUQsIGNvbnN0IGNoYXIqIGRlc2lyZWRWYWx1ZSkKIHsKICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBkZXNpcmVkVmFsdWUpOwogICAg
IHJldHVybiBmcmFtZS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpOwogfQogCi1ib29s
IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoRnJhbWUgKmZyYW1lLCBpbnQgcHJvcGVydHlJRCwgY29u
c3QgY2hhciAqZGVzaXJlZFZhbHVlKQorYm9vbCBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKEZyYW1l
KiBmcmFtZSwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIGRlc2lyZWRWYWx1ZSkKIHsKICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gbmV3IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBk
ZXNpcmVkVmFsdWUpOwogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uU3RhcnRIYXNTdHlsZShz
dHlsZS5nZXQoKSk7CiB9CiAKLVN0cmluZyB2YWx1ZVN0eWxlKEZyYW1lICpmcmFtZSwgaW50IHBy
b3BlcnR5SUQpCitTdHJpbmcgdmFsdWVTdHlsZShGcmFtZSogZnJhbWUsIGludCBwcm9wZXJ0eUlE
KQogewogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uU3RhcnRTdHlsZVByb3BlcnR5VmFsdWUo
cHJvcGVydHlJRCk7CiB9CkBAIC0xODcsMTggKzE4NywxOCBAQCBTdHJpbmcgdmFsdWVTdHlsZShG
cmFtZSAqZnJhbWUsIGludCBwcm9wCiAvLyBleGVjQ29tbWFuZCBpbXBsZW1lbnRhdGlvbnMKIC8v
CiAKLWJvb2wgZXhlY0JhY2tDb2xvcihGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwg
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0JhY2tDb2xvcihGcmFtZSogZnJhbWUsIGJv
b2wsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShm
cmFtZSwgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiwgdmFsdWUpOwogfQogCi1ib29sIGV4ZWNC
b2xkKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVl
KQorYm9vbCBleGVjQm9sZChGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgYm9vbCBpc0JvbGQgPSBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKGZyYW1lLCAgQ1NTX1BST1Bf
Rk9OVF9XRUlHSFQsICJib2xkIik7Ci0gICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwg
IENTU19QUk9QX0ZPTlRfV0VJR0hULCBpc0JvbGQgPyAibm9ybWFsIiA6ICJib2xkIik7CisgICAg
Ym9vbCBpc0JvbGQgPSBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKGZyYW1lLCBDU1NfUFJPUF9GT05U
X1dFSUdIVCwgImJvbGQiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1Nf
UFJPUF9GT05UX1dFSUdIVCwgaXNCb2xkID8gIm5vcm1hbCIgOiAiYm9sZCIpOwogfQogCi1ib29s
IGV4ZWNDb3B5KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcg
JnZhbHVlKQorYm9vbCBleGVjQ29weShGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYp
CiB7CiAgICAgZnJhbWUtPmNvcHlUb1Bhc3RlYm9hcmQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTIxMyw2MyArMjEzLDYyIEBAIGJvb2wgZXhlY0NyZWF0ZUxpbmsoRnJhbWUqIGZyYW1lLCBib29s
IHUKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgRWRpdENvbW1hbmRQdHIobmV3IENyZWF0ZUxpbmtDb21tYW5kKGZyYW1lLT5kb2N1bWVu
dCgpLCB2YWx1ZSkpLmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5ldyBDcmVhdGVMaW5rQ29t
bWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgdmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBleGVjQ3V0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJp
bmcgJnZhbHVlKQorYm9vbCBleGVjQ3V0KEZyYW1lKiBmcmFtZSwgYm9vbCwgY29uc3QgU3RyaW5n
JikKIHsKICAgICBmcmFtZS0+Y3V0VG9QYXN0ZWJvYXJkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgZXhlY0RlbGV0ZShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29u
c3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0RlbGV0ZShGcmFtZSogZnJhbWUsIGJvb2wsIGNv
bnN0IFN0cmluZyYpCiB7CiAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChmcmFt
ZS0+ZG9jdW1lbnQoKSwgZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51
bGFyaXR5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gRklYTUU6IENvbWUgdXAgd2l0aCBh
IHdheSB0byBzZW5kIG1vcmUgcGFyYW1ldGVycyB0byBleGVjQ29tbWFuZCBzbyB0aGF0IHdlIGNh
biBzdXBwb3J0IGFsbCBvZiB0aGUgZmVhdHVyZXMgb2YgRnJhbWU6OmZpbmRTdHJpbmcuCi1ib29s
IGV4ZWNGaW5kU3RyaW5nKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBT
dHJpbmcgJnZhbHVlKQorYm9vbCBleGVjRmluZFN0cmluZyhGcmFtZSogZnJhbWUsIGJvb2wsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGZyYW1lLT5maW5kU3RyaW5nKHZhbHVl
LCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKLWJvb2wgZXhlY0ZvcndhcmREZWxldGUoRnJhbWUg
KmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4
ZWNGb3J3YXJkRGVsZXRlKEZyYW1lKiBmcmFtZSwgYm9vbCwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChmcmFtZS0+ZG9jdW1lbnQo
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0ZvbnROYW1lKEZyYW1lICpmcmFt
ZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjRm9u
dE5hbWUoRnJhbWUqIGZyYW1lLCBib29sLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJl
dHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9GT05UX0ZBTUlMWSwgdmFsdWUp
OworICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIENTU19QUk9QX0ZPTlRfRkFNSUxZ
LCB2YWx1ZSk7CiB9CiAKLWJvb2wgZXhlY0ZvbnRTaXplKEZyYW1lICpmcmFtZSwgYm9vbCB1c2Vy
SW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjRm9udFNpemUoRnJhbWUq
IGZyYW1lLCBib29sLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBleGVjU3R5
bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9GT05UX1NJWkUsIHZhbHVlKTsKKyAgICByZXR1cm4g
ZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJPUF9GT05UX1NJWkUsIHZhbHVlKTsKIH0KIAot
Ym9vbCBleGVjRm9udFNpemVEZWx0YShGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwg
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0ZvbnRTaXplRGVsdGEoRnJhbWUqIGZyYW1l
LCBib29sLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFu
Z2UoZnJhbWUsICBDU1NfUFJPUF9fV0VCS0lUX0ZPTlRfU0laRV9ERUxUQSwgdmFsdWUpOworICAg
IHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIENTU19QUk9QX19XRUJLSVRfRk9OVF9TSVpF
X0RFTFRBLCB2YWx1ZSk7CiB9CiAKLWJvb2wgZXhlY0ZvcmVDb2xvcihGcmFtZSAqZnJhbWUsIGJv
b2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0ZvcmVDb2xv
cihGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgcmV0dXJu
IGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgQ1NTX1BST1BfQ09MT1IsIHZhbHVlKTsKIH0KIAotYm9v
bCBleGVjRm9ybWF0QmxvY2soRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0
IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNGb3JtYXRCbG9jayhGcmFtZSogZnJhbWUsIGJvb2ws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgU3RyaW5nIHRhZ05hbWUgPSB2YWx1ZS5sb3dl
cigpOwogICAgIGlmICh0YWdOYW1lWzBdID09ICc8JyAmJiB0YWdOYW1lW3RhZ05hbWUubGVuZ3Ro
KCkgLSAxXSA9PSAnPicpCiAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygxLCB0
YWdOYW1lLmxlbmd0aCgpIC0gMik7CiAgICAgaWYgKCF2YWxpZEJsb2NrVGFnKHRhZ05hbWUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFZGl0Q29tbWFuZFB0cihuZXcgRm9ybWF0Qmxv
Y2tDb21tYW5kKGZyYW1lLT5kb2N1bWVudCgpLCB0YWdOYW1lKSkuYXBwbHkoKTsKKyAgICBhcHBs
eUNvbW1hbmQobmV3IEZvcm1hdEJsb2NrQ29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgdGFnTmFt
ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yODMsMTcgKzI4MiwxNSBAQCBib29sIGV4
ZWNJbnNlcnRIb3Jpem9udGFsUnVsZShGcmFtZSogZnJhCiAgICAgaWYgKGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIobmV3IFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kKGZyYW1lLT5kb2N1bWVudCgpLCBmcmFnbWVudC5nZXQoKSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgdHJ1ZSwgRWRpdEFjdGlvblVuc3BlY2lmaWVkKSkuYXBwbHkoKTsKKyAgICBhcHBs
eUNvbW1hbmQobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKGZyYWdtZW50LnJlbGVhc2UoKSwK
KyAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgRWRpdEFjdGlvblVuc3BlY2lmaWVk
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgZXhlY0luc2VydEhUTUwoRnJhbWUqIGZy
YW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgRGVw
cmVjYXRlZFN0cmluZyBiYXNlVVJMID0gIiI7Ci0gICAgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCA9
IGZhbHNlOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgdmFsdWUuZGVwcmVjYXRlZFN0cmlu
ZygpLCBiYXNlVVJMKTsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kKGZyYW1lLT5kb2N1bWVudCgpLCBmcmFnbWVudC5nZXQoKSwgc2VsZWN0UmVwbGFj
ZW1lbnQpKTsKLSAgICBjbWQuYXBwbHkoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kKGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdmFsdWUsICIiKSwgZmFsc2Up
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzExLDEwMyArMzA4LDEwMyBAQCBib29sIGV4
ZWNJbnNlcnRJbWFnZShGcmFtZSogZnJhbWUsIGJvb2wgCiAgICAgaWYgKGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIobmV3IFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kKGZyYW1lLT5kb2N1bWVudCgpLCBmcmFnbWVudC5nZXQoKSwgZmFsc2UpKS5hcHBs
eSgpOworICAgIGFwcGx5Q29tbWFuZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoZnJhZ21l
bnQucmVsZWFzZSgpLCBmYWxzZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNJ
bmRlbnQoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFs
dWUpCitib29sIGV4ZWNJbmRlbnQoRnJhbWUqIGZyYW1lLCBib29sLCBjb25zdCBTdHJpbmcmKQog
ewotICAgIEVkaXRDb21tYW5kUHRyKG5ldyBJbmRlbnRPdXRkZW50Q29tbWFuZChmcmFtZS0+ZG9j
dW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6OkluZGVudCkpLmFwcGx5KCk7CisgICAgYXBw
bHlDb21tYW5kKG5ldyBJbmRlbnRPdXRkZW50Q29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgSW5k
ZW50T3V0ZGVudENvbW1hbmQ6OkluZGVudCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGV4ZWNJbnNlcnRMaW5lQnJlYWsoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNv
bnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNJbnNlcnRMaW5lQnJlYWsoRnJhbWUqIGZyYW1l
LCBib29sLCBjb25zdCBTdHJpbmcmKQogewogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVC
cmVhayhmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhl
Y0luc2VydFBhcmFncmFwaChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0luc2VydFBhcmFncmFwaChGcmFtZSogZnJhbWUsIGJv
b2wsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yKGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBleGVjSW5zZXJ0TmV3bGluZUluUXVvdGVkQ29udGVudChGcmFtZSAqZnJhbWUsIGJvb2wgdXNl
ckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0luc2VydE5ld2xpbmVJ
blF1b3RlZENvbnRlbnQoRnJhbWUqIGZyYW1lLCBib29sLCBjb25zdCBTdHJpbmcmKQogewogICAg
IFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChm
cmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0luc2Vy
dFRleHQoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFs
dWUpCitib29sIGV4ZWNJbnNlcnRUZXh0KEZyYW1lKiBmcmFtZSwgYm9vbCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGZyYW1lLT5kb2N1bWVu
dCgpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0luc2VydFVub3Jk
ZXJlZExpc3QoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAm
dmFsdWUpCitib29sIGV4ZWNJbnNlcnRVbm9yZGVyZWRMaXN0KEZyYW1lKiBmcmFtZSwgYm9vbCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBFZGl0Q29tbWFuZFB0cihuZXcgSW5zZXJ0TGlz
dENvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpVbm9yZGVyZWRM
aXN0VHlwZSwgdmFsdWUpKS5hcHBseSgpOworICAgIGFwcGx5Q29tbWFuZChuZXcgSW5zZXJ0TGlz
dENvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpVbm9yZGVyZWRM
aXN0LCB2YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNJbnNlcnRPcmRl
cmVkTGlzdChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2
YWx1ZSkKK2Jvb2wgZXhlY0luc2VydE9yZGVyZWRMaXN0KEZyYW1lKiBmcmFtZSwgYm9vbCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBFZGl0Q29tbWFuZFB0cihuZXcgSW5zZXJ0TGlzdENv
bW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdFR5
cGUsIHZhbHVlKSkuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IEluc2VydExpc3RDb21t
YW5kKGZyYW1lLT5kb2N1bWVudCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6T3JkZXJlZExpc3QsIHZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY0l0YWxpYyhGcmFtZSAqZnJh
bWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY0l0
YWxpYyhGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYm9vbCBpc0l0
YWxpYyA9IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsICBDU1NfUFJPUF9GT05UX1NUWUxF
LCAiaXRhbGljIik7Ci0gICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9Q
X0ZPTlRfU1RZTEUsIGlzSXRhbGljID8gIm5vcm1hbCIgOiAiaXRhbGljIik7CisgICAgYm9vbCBp
c0l0YWxpYyA9IHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoZnJhbWUsIENTU19QUk9QX0ZPTlRfU1RZ
TEUsICJpdGFsaWMiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCBDU1NfUFJP
UF9GT05UX1NUWUxFLCBpc0l0YWxpYyA/ICJub3JtYWwiIDogIml0YWxpYyIpOwogfQogCi1ib29s
IGV4ZWNKdXN0aWZ5Q2VudGVyKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25z
dCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjSnVzdGlmeUNlbnRlcihGcmFtZSogZnJhbWUsIGJv
b2wsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwg
IENTU19QUk9QX1RFWFRfQUxJR04sICJjZW50ZXIiKTsKKyAgICByZXR1cm4gZXhlY1N0eWxlQ2hh
bmdlKGZyYW1lLCBDU1NfUFJPUF9URVhUX0FMSUdOLCAiY2VudGVyIik7CiB9CiAKLWJvb2wgZXhl
Y0p1c3RpZnlGdWxsKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJp
bmcgJnZhbHVlKQorYm9vbCBleGVjSnVzdGlmeUZ1bGwoRnJhbWUqIGZyYW1lLCBib29sLCBjb25z
dCBTdHJpbmcmKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJP
UF9URVhUX0FMSUdOLCAianVzdGlmeSIpOworICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJh
bWUsIENTU19QUk9QX1RFWFRfQUxJR04sICJqdXN0aWZ5Iik7CiB9CiAKLWJvb2wgZXhlY0p1c3Rp
ZnlMZWZ0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZh
bHVlKQorYm9vbCBleGVjSnVzdGlmeUxlZnQoRnJhbWUqIGZyYW1lLCBib29sLCBjb25zdCBTdHJp
bmcmKQogewotICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9URVhU
X0FMSUdOLCAibGVmdCIpOworICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIENTU19Q
Uk9QX1RFWFRfQUxJR04sICJsZWZ0Iik7CiB9CiAKLWJvb2wgZXhlY0p1c3RpZnlSaWdodChGcmFt
ZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wg
ZXhlY0p1c3RpZnlSaWdodChGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgcmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX1RFWFRfQUxJR04sICJy
aWdodCIpOworICAgIHJldHVybiBleGVjU3R5bGVDaGFuZ2UoZnJhbWUsIENTU19QUk9QX1RFWFRf
QUxJR04sICJyaWdodCIpOwogfQogCi1ib29sIGV4ZWNPdXRkZW50KEZyYW1lICpmcmFtZSwgYm9v
bCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjT3V0ZGVudChG
cmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgRWRpdENvbW1hbmRQdHIo
bmV3IEluZGVudE91dGRlbnRDb21tYW5kKGZyYW1lLT5kb2N1bWVudCgpLCBJbmRlbnRPdXRkZW50
Q29tbWFuZDo6T3V0ZGVudCkpLmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5ldyBJbmRlbnRP
dXRkZW50Q29tbWFuZChmcmFtZS0+ZG9jdW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6Ok91
dGRlbnQpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjUGFzdGUoRnJhbWUgKmZy
YW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4ZWNQ
YXN0ZShGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgZnJhbWUtPnBh
c3RlRnJvbVBhc3RlYm9hcmQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjUGFz
dGVBbmRNYXRjaFN0eWxlKEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBT
dHJpbmcgJnZhbHVlKQorYm9vbCBleGVjUGFzdGVBbmRNYXRjaFN0eWxlKEZyYW1lKiBmcmFtZSwg
Ym9vbCwgY29uc3QgU3RyaW5nJikKIHsKICAgICBmcmFtZS0+cGFzdGVBbmRNYXRjaFN0eWxlKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY1ByaW50KEZyYW1lICpmcmFtZSwgYm9v
bCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjUHJpbnQoRnJh
bWUqIGZyYW1lLCBib29sLCBjb25zdCBTdHJpbmcmKQogewogICAgIGZyYW1lLT5wcmludCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNSZWRvKEZyYW1lICpmcmFtZSwgYm9vbCB1
c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjUmVkbyhGcmFtZSog
ZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgZnJhbWUtPnJlZG8oKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQxNSw1OCArNDEyLDU5IEBAIGJvb2wgZXhlY1JlZG8oRnJhbWUgKmZy
YW1lLCBib29sIHVzZXJJbnQKIAogYm9vbCBleGVjUmVtb3ZlRm9ybWF0KEZyYW1lKiBmcmFtZSwg
Ym9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoZnJhbWUt
PnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLnRvU3RyaW5n
KCkpOwotICAgIEVkaXRDb21tYW5kUHRyKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChmcmFt
ZS0+ZG9jdW1lbnQoKSwgZnJhZ21lbnQuZ2V0KCksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IEVkaXRBY3Rpb25VbnNwZWNpZmllZCkpLmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKG5ldyBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZCgKKyAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChm
cmFtZS0+c2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpLCBmcmFtZS0+c2VsZWN0aW9uKCkudG9T
dHJpbmcoKSksCisgICAgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIEVkaXRBY3Rpb25V
bnNwZWNpZmllZCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4ZWNTZWxlY3RBbGwo
RnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiti
b29sIGV4ZWNTZWxlY3RBbGwoRnJhbWUqIGZyYW1lLCBib29sLCBjb25zdCBTdHJpbmcmKQogewog
ICAgIGZyYW1lLT5zZWxlY3RBbGwoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVj
U3RyaWtldGhyb3VnaChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY1N0cmlrZXRocm91Z2goRnJhbWUqIGZyYW1lLCBib29sLCBj
b25zdCBTdHJpbmcmKQogewogICAgIGJvb2wgaXNTdHJpa2V0aHJvdWdoID0gc2VsZWN0aW9uU3Rh
cnRIYXNTdHlsZShmcmFtZSwgIENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9F
RkZFQ1QsICJsaW5lLXRocm91Z2giKTsKLSAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1l
LCAgQ1NTX1BST1BfX1dFQktJVF9URVhUX0RFQ09SQVRJT05TX0lOX0VGRkVDVCwgaXNTdHJpa2V0
aHJvdWdoID8gIm5vbmUiIDogImxpbmUtdGhyb3VnaCIpOworICAgIHJldHVybiBleGVjU3R5bGVD
aGFuZ2UoZnJhbWUsIENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1Qs
IGlzU3RyaWtldGhyb3VnaCA/ICJub25lIiA6ICJsaW5lLXRocm91Z2giKTsKIH0KIAotYm9vbCBl
eGVjU3Vic2NyaXB0KEZyYW1lICpmcmFtZSwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJp
bmcgJnZhbHVlKQorYm9vbCBleGVjU3Vic2NyaXB0KEZyYW1lKiBmcmFtZSwgYm9vbCwgY29uc3Qg
U3RyaW5nJikKIHsKICAgICByZXR1cm4gZXhlY1N0eWxlQ2hhbmdlKGZyYW1lLCAgQ1NTX1BST1Bf
VkVSVElDQUxfQUxJR04sICJzdWIiKTsKIH0KIAotYm9vbCBleGVjU3VwZXJzY3JpcHQoRnJhbWUg
KmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCitib29sIGV4
ZWNTdXBlcnNjcmlwdChGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAg
cmV0dXJuIGV4ZWNTdHlsZUNoYW5nZShmcmFtZSwgIENTU19QUk9QX1ZFUlRJQ0FMX0FMSUdOLCAi
c3VwZXIiKTsKIH0KIAotYm9vbCBleGVjVHJhbnNwb3NlKEZyYW1lICpmcmFtZSwgYm9vbCB1c2Vy
SW50ZXJmYWNlLCBjb25zdCBTdHJpbmcgJnZhbHVlKQorYm9vbCBleGVjVHJhbnNwb3NlKEZyYW1l
KiBmcmFtZSwgYm9vbCwgY29uc3QgU3RyaW5nJikKIHsKICAgICBmcmFtZS0+dHJhbnNwb3NlKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXhlY1VuZGVybGluZShGcmFtZSAqZnJhbWUs
IGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKK2Jvb2wgZXhlY1VuZGVy
bGluZShGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgYm9vbCBpc1Vu
ZGVybGluZWQgPSBzZWxlY3Rpb25TdGFydEhhc1N0eWxlKGZyYW1lLCAgQ1NTX1BST1BfX1dFQktJ
VF9URVhUX0RFQ09SQVRJT05TX0lOX0VGRkVDVCwgInVuZGVybGluZSIpOwogICAgIHJldHVybiBl
eGVjU3R5bGVDaGFuZ2UoZnJhbWUsICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfREVDT1JBVElPTlNf
SU5fRUZGRUNULCBpc1VuZGVybGluZWQgPyAibm9uZSIgOiAidW5kZXJsaW5lIik7CiB9CiAKLWJv
b2wgZXhlY1VuZG8oRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCitib29sIGV4ZWNVbmRvKEZyYW1lKiBmcmFtZSwgYm9vbCwgY29uc3QgU3RyaW5n
JikKIHsKICAgICBmcmFtZS0+dW5kbygpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGV4
ZWNVbmxpbmsoRnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAm
dmFsdWUpCitib29sIGV4ZWNVbmxpbmsoRnJhbWUqIGZyYW1lLCBib29sLCBjb25zdCBTdHJpbmcm
KQogewotICAgIEVkaXRDb21tYW5kUHRyKG5ldyBVbmxpbmtDb21tYW5kKGZyYW1lLT5kb2N1bWVu
dCgpKSkuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IFVubGlua0NvbW1hbmQoZnJhbWUt
PmRvY3VtZW50KCkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBleGVjVW5zZWxlY3Qo
RnJhbWUgKmZyYW1lLCBib29sIHVzZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiti
b29sIGV4ZWNVbnNlbGVjdChGcmFtZSogZnJhbWUsIGJvb2wsIGNvbnN0IFN0cmluZyYpCiB7CiAg
ICAgLy8gRklYTUU6IDY0OTggU2hvdWxkIGp1c3QgYmUgYWJsZSB0byBjYWxsIG1fZnJhbWUtPnNl
bGVjdGlvbigpLmNsZWFyKCkKICAgICBmcmFtZS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRy
b2xsZXIoKSk7CkBAIC00ODMsNjIgKzQ4MSw2MiBAQCBib29sIGV4ZWNVbnNlbGVjdChGcmFtZSAq
ZnJhbWUsIGJvb2wgdXNlCiAvLyAgICAgU3VwcG9ydGVkID0gVGhlIGNvbW1hbmQgaXMgc3VwcG9y
dGVkIGJ5IHRoaXMgb2JqZWN0LgogLy8gICAgIEVuYWJsZWQgPSAgIFRoZSBjb21tYW5kIGlzIGF2
YWlsYWJsZSBhbmQgZW5hYmxlZC4KIAotYm9vbCBlbmFibGVkKEZyYW1lICpmcmFtZSkKK2Jvb2wg
ZW5hYmxlZChGcmFtZSopCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZW5hYmxlZEFu
eUNhcmV0KEZyYW1lICpmcmFtZSkKK2Jvb2wgZW5hYmxlZEFueUNhcmV0KEZyYW1lKiBmcmFtZSkK
IHsKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAotYm9vbCBlbmFibGVkQW55U2VsZWN0
aW9uKEZyYW1lICpmcmFtZSkKK2Jvb2wgZW5hYmxlZEFueVNlbGVjdGlvbihGcmFtZSogZnJhbWUp
CiB7CiAgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpOwogfQog
Ci1ib29sIGVuYWJsZWRBbnlFZGl0YWJsZVNlbGVjdGlvbihGcmFtZSAqZnJhbWUpCitib29sIGVu
YWJsZWRBbnlFZGl0YWJsZVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIGZy
YW1lLT5zZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCi1ib29sIGVuYWJsZWRBbnlSaWNobHlFZGl0YWJsZVNl
bGVjdGlvbihGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRBbnlSaWNobHlFZGl0YWJsZVNlbGVj
dGlvbihGcmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0Nh
cmV0T3JSYW5nZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZSgpOwogfQogCi1ib29sIGVuYWJsZWRQYXN0ZShGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRQ
YXN0ZShGcmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIHN1cHBvcnRzUGFzdGVDb21tYW5kICYm
IGZyYW1lLT5jYW5QYXN0ZSgpOwogfQogCi1ib29sIGVuYWJsZWRQYXN0ZUFuZE1hdGNoU3R5bGUo
RnJhbWUgKmZyYW1lKQorYm9vbCBlbmFibGVkUGFzdGVBbmRNYXRjaFN0eWxlKEZyYW1lKiBmcmFt
ZSkKIHsKICAgICByZXR1cm4gc3VwcG9ydHNQYXN0ZUNvbW1hbmQgJiYgZnJhbWUtPmNhblBhc3Rl
KCk7CiB9CiAKLWJvb2wgZW5hYmxlZEFueVJhbmdlU2VsZWN0aW9uKEZyYW1lICpmcmFtZSkKK2Jv
b2wgZW5hYmxlZEFueVJhbmdlU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4g
ZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKTsKIH0KIAotYm9vbCBlbmFibGVkQW55RWRpdGFi
bGVSYW5nZVNlbGVjdGlvbihGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRBbnlFZGl0YWJsZVJh
bmdlU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsK
IH0KIAotYm9vbCBlbmFibGVkQW55UmljaGx5RWRpdGFibGVSYW5nZVNlbGVjdGlvbihGcmFtZSAq
ZnJhbWUpCitib29sIGVuYWJsZWRBbnlSaWNobHlFZGl0YWJsZVJhbmdlU2VsZWN0aW9uKEZyYW1l
KiBmcmFtZSkKIHsKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSAmJiBm
cmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAotYm9vbCBl
bmFibGVkUmVkbyhGcmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRSZWRvKEZyYW1lKiBmcmFtZSkK
IHsKICAgICByZXR1cm4gZnJhbWUtPmNhblJlZG8oKTsKIH0KIAotYm9vbCBlbmFibGVkVW5kbyhG
cmFtZSAqZnJhbWUpCitib29sIGVuYWJsZWRVbmRvKEZyYW1lKiBmcmFtZSkKIHsKICAgICByZXR1
cm4gZnJhbWUtPmNhblVuZG8oKTsKIH0KQEAgLTU2MCw0NCArNTU4LDQ0IEBAIGJvb2wgZW5hYmxl
ZFVuZG8oRnJhbWUgKmZyYW1lKQogLy8gVGhlbiwgcXVlcnlDb21tYW5kSW5kZXRlcm0gc2hvdWxk
IHJldHVybiAibm8iIGluIHRoZSBjYXNlIHdoZXJlCiAvLyBhbGwgdGhlIHRleHQgaXMgZWl0aGVy
IGFsbCBib2xkIG9yIG5vdC1ib2xkIGFuZCBhbmQgInllcyIgZm9yIHBhcnRpYWxseS1ib2xkIHRl
eHQuCiAKLUZyYW1lOjpUcmlTdGF0ZSBzdGF0ZU5vbmUoRnJhbWUgKmZyYW1lKQorRnJhbWU6OlRy
aVN0YXRlIHN0YXRlTm9uZShGcmFtZSopCiB7CiAgICAgcmV0dXJuIEZyYW1lOjpmYWxzZVRyaVN0
YXRlOwogfQogCi1GcmFtZTo6VHJpU3RhdGUgc3RhdGVCb2xkKEZyYW1lICpmcmFtZSkKK0ZyYW1l
OjpUcmlTdGF0ZSBzdGF0ZUJvbGQoRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0
eWxlKGZyYW1lLCAgQ1NTX1BST1BfRk9OVF9XRUlHSFQsICJib2xkIik7CisgICAgcmV0dXJuIHN0
YXRlU3R5bGUoZnJhbWUsIENTU19QUk9QX0ZPTlRfV0VJR0hULCAiYm9sZCIpOwogfQogCi1GcmFt
ZTo6VHJpU3RhdGUgc3RhdGVJdGFsaWMoRnJhbWUgKmZyYW1lKQorRnJhbWU6OlRyaVN0YXRlIHN0
YXRlSXRhbGljKEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwg
IENTU19QUk9QX0ZPTlRfU1RZTEUsICJpdGFsaWMiKTsKKyAgICByZXR1cm4gc3RhdGVTdHlsZShm
cmFtZSwgQ1NTX1BST1BfRk9OVF9TVFlMRSwgIml0YWxpYyIpOwogfQogCi1GcmFtZTo6VHJpU3Rh
dGUgc3RhdGVMaXN0KEZyYW1lICpmcmFtZSkKK0ZyYW1lOjpUcmlTdGF0ZSBzdGF0ZUxpc3QoRnJh
bWUqIGZyYW1lKQogewogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uTGlzdFN0YXRlKCk7CiB9
CiAKLUZyYW1lOjpUcmlTdGF0ZSBzdGF0ZVN0cmlrZXRocm91Z2goRnJhbWUgKmZyYW1lKQorRnJh
bWU6OlRyaVN0YXRlIHN0YXRlU3RyaWtldGhyb3VnaChGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0
dXJuIHN0YXRlU3R5bGUoZnJhbWUsICBDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04sICJsaW5lLXRo
cm91Z2giKTsKKyAgICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwgQ1NTX1BST1BfVEVYVF9ERUNP
UkFUSU9OLCAibGluZS10aHJvdWdoIik7CiB9CiAKLUZyYW1lOjpUcmlTdGF0ZSBzdGF0ZVN1YnNj
cmlwdChGcmFtZSAqZnJhbWUpCitGcmFtZTo6VHJpU3RhdGUgc3RhdGVTdWJzY3JpcHQoRnJhbWUq
IGZyYW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfVkVSVElD
QUxfQUxJR04sICJzdWIiKTsKKyAgICByZXR1cm4gc3RhdGVTdHlsZShmcmFtZSwgQ1NTX1BST1Bf
VkVSVElDQUxfQUxJR04sICJzdWIiKTsKIH0KIAotRnJhbWU6OlRyaVN0YXRlIHN0YXRlU3VwZXJz
Y3JpcHQoRnJhbWUgKmZyYW1lKQorRnJhbWU6OlRyaVN0YXRlIHN0YXRlU3VwZXJzY3JpcHQoRnJh
bWUqIGZyYW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfVkVS
VElDQUxfQUxJR04sICJzdXBlciIpOworICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCBDU1Nf
UFJPUF9WRVJUSUNBTF9BTElHTiwgInN1cGVyIik7CiB9CiAKLUZyYW1lOjpUcmlTdGF0ZSBzdGF0
ZVVuZGVybGluZShGcmFtZSAqZnJhbWUpCitGcmFtZTo6VHJpU3RhdGUgc3RhdGVVbmRlcmxpbmUo
RnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBzdGF0ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1Bf
VEVYVF9ERUNPUkFUSU9OLCAidW5kZXJsaW5lIik7CisgICAgcmV0dXJuIHN0YXRlU3R5bGUoZnJh
bWUsIENTU19QUk9QX1RFWFRfREVDT1JBVElPTiwgInVuZGVybGluZSIpOwogfQogCiAvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTYwNSw0MSArNjAzLDQxIEBAIEZy
YW1lOjpUcmlTdGF0ZSBzdGF0ZVVuZGVybGluZShGcmFtZSAqZnIKIC8vIHF1ZXJ5Q29tbWFuZFZh
bHVlIGltcGxlbWVudGF0aW9ucwogLy8KIAotU3RyaW5nIHZhbHVlTnVsbChGcmFtZSAqZnJhbWUp
CitTdHJpbmcgdmFsdWVOdWxsKEZyYW1lKikKIHsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAK
LVN0cmluZyB2YWx1ZUJhY2tDb2xvcihGcmFtZSAqZnJhbWUpCitTdHJpbmcgdmFsdWVCYWNrQ29s
b3IoRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCAgQ1NTX1BS
T1BfQkFDS0dST1VORF9DT0xPUik7CisgICAgcmV0dXJuIHZhbHVlU3R5bGUoZnJhbWUsIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfQ09MT1IpOwogfQogCi1TdHJpbmcgdmFsdWVGb250TmFtZShGcmFtZSAq
ZnJhbWUpCitTdHJpbmcgdmFsdWVGb250TmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJu
IHZhbHVlU3R5bGUoZnJhbWUsICBDU1NfUFJPUF9GT05UX0ZBTUlMWSk7CisgICAgcmV0dXJuIHZh
bHVlU3R5bGUoZnJhbWUsIENTU19QUk9QX0ZPTlRfRkFNSUxZKTsKIH0KIAotU3RyaW5nIHZhbHVl
Rm9udFNpemUoRnJhbWUgKmZyYW1lKQorU3RyaW5nIHZhbHVlRm9udFNpemUoRnJhbWUqIGZyYW1l
KQogewotICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCAgQ1NTX1BST1BfRk9OVF9TSVpFKTsK
KyAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgQ1NTX1BST1BfRk9OVF9TSVpFKTsKIH0KIAot
U3RyaW5nIHZhbHVlRm9udFNpemVEZWx0YShGcmFtZSAqZnJhbWUpCitTdHJpbmcgdmFsdWVGb250
U2l6ZURlbHRhKEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwg
IENTU19QUk9QX19XRUJLSVRfRk9OVF9TSVpFX0RFTFRBKTsKKyAgICByZXR1cm4gdmFsdWVTdHls
ZShmcmFtZSwgQ1NTX1BST1BfX1dFQktJVF9GT05UX1NJWkVfREVMVEEpOwogfQogCi1TdHJpbmcg
dmFsdWVGb3JlQ29sb3IoRnJhbWUgKmZyYW1lKQorU3RyaW5nIHZhbHVlRm9yZUNvbG9yKEZyYW1l
KiBmcmFtZSkKIHsKLSAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgIENTU19QUk9QX0NPTE9S
KTsKKyAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwgQ1NTX1BST1BfQ09MT1IpOwogfQogCiAv
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotQ29tbWFuZE1hcCAqY3Jl
YXRlQ29tbWFuZERpY3Rpb25hcnkoKQorQ29tbWFuZE1hcCogY3JlYXRlQ29tbWFuZERpY3Rpb25h
cnkoKQogewotICAgIHN0cnVjdCBFZGl0b3JDb21tYW5kIHsgY29uc3QgY2hhciAqbmFtZTsgQ29t
bWFuZEltcCBpbXA7IH07CisgICAgc3RydWN0IEVkaXRvckNvbW1hbmQgeyBjb25zdCBjaGFyKiBu
YW1lOyBDb21tYW5kSW1wIGltcDsgfTsKIAogICAgIHN0YXRpYyBjb25zdCBFZGl0b3JDb21tYW5k
IGNvbW1hbmRzW10gPSB7CiAKQEAgLTczOSw3ICs3MzcsNyBAQCBDb21tYW5kTWFwICpjcmVhdGVD
b21tYW5kRGljdGlvbmFyeSgpCiAgICAgICAgIC8vIFVuYm9va21hcmsgKG5vdCBzdXBwb3J0ZWQp
CiAgICAgfTsKIAotICAgIENvbW1hbmRNYXAgKmNvbW1hbmRNYXAgPSBuZXcgQ29tbWFuZE1hcDsK
KyAgICBDb21tYW5kTWFwKiBjb21tYW5kTWFwID0gbmV3IENvbW1hbmRNYXA7CiAKICAgICBjb25z
dCBpbnQgbnVtQ29tbWFuZHMgPSBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBd
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbW1hbmRzOyArK2kpIHsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9KU0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9K
U0VkaXRvci5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9KU0VkaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywzNSArMjMsMzEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYganNlZGl0aW5nX2hfXwotI2RlZmluZSBqc2VkaXRpbmdfaF9fCisjaWZuZGVm
IEpTRWRpdG9yX2gKKyNkZWZpbmUgSlNFZGl0b3JfaAogCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBEZXByZWNhdGVkU3RyaW5nOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTdHJp
bmc7CiAKLWNsYXNzIEpTRWRpdG9yIHsKLQorY2xhc3MgSlNFZGl0b3IgOiBOb25jb3B5YWJsZSB7
CiBwdWJsaWM6Ci0gICAgSlNFZGl0b3IoRG9jdW1lbnQgKmRvYykgOiBtX2RvYyhkb2MpIHsgfQor
ICAgIEpTRWRpdG9yKERvY3VtZW50KiBkb2N1bWVudCkgOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7
IH0KIAotICAgIGJvb2wgZXhlY0NvbW1hbmQoY29uc3QgU3RyaW5nICZjb21tYW5kLCBib29sIHVz
ZXJJbnRlcmZhY2UsIGNvbnN0IFN0cmluZyAmdmFsdWUpOwotICAgIGJvb2wgcXVlcnlDb21tYW5k
RW5hYmxlZChjb25zdCBTdHJpbmcgJmNvbW1hbmQpOwotICAgIGJvb2wgcXVlcnlDb21tYW5kSW5k
ZXRlcm0oY29uc3QgU3RyaW5nICZjb21tYW5kKTsKLSAgICBib29sIHF1ZXJ5Q29tbWFuZFN0YXRl
KGNvbnN0IFN0cmluZyAmY29tbWFuZCk7Ci0gICAgYm9vbCBxdWVyeUNvbW1hbmRTdXBwb3J0ZWQo
Y29uc3QgU3RyaW5nICZjb21tYW5kKTsKLSAgICBTdHJpbmcgcXVlcnlDb21tYW5kVmFsdWUoY29u
c3QgU3RyaW5nICZjb21tYW5kKTsKKyAgICBib29sIGV4ZWNDb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZCwgYm9vbCB1c2VySW50ZXJmYWNlLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlcik7Cisg
ICAgYm9vbCBxdWVyeUNvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZCk7CisgICAg
Ym9vbCBxdWVyeUNvbW1hbmRJbmRldGVybShjb25zdCBTdHJpbmcmIGNvbW1hbmQpOworICAgIGJv
b2wgcXVlcnlDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kKTsKKyAgICBib29sIHF1
ZXJ5Q29tbWFuZFN1cHBvcnRlZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpOworICAgIFN0cmluZyBx
dWVyeUNvbW1hbmRWYWx1ZShjb25zdCBTdHJpbmcmIGNvbW1hbmQpOwogCi0gICAgc3RhdGljIHZv
aWQgc2V0U3VwcG9ydHNQYXN0ZUNvbW1hbmQoYm9vbCBmbGFnPXRydWUpOworICAgIHN0YXRpYyB2
b2lkIHNldFN1cHBvcnRzUGFzdGVDb21tYW5kKGJvb2wgZmxhZyA9IHRydWUpOwogCiBwcml2YXRl
OgotICAgIEpTRWRpdG9yKGNvbnN0IEpTRWRpdG9yICYpOwotICAgIEpTRWRpdG9yICZvcGVyYXRv
cj0oY29uc3QgSlNFZGl0b3IgJik7Ci0KLSAgICBEb2N1bWVudCAqbV9kb2M7CisgICAgRG9jdW1l
bnQqIG1fZG9jdW1lbnQ7CiB9OwogCiB9IC8vIGVuZCBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTk5MSkK
KysrIFdlYkNvcmUvZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Kb2luVGV4dE5v
ZGVzQ29tbWFuZDo6Sm9pblRleHROb2Rlc0NvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBUZXh0
ICp0ZXh0MSwgVGV4dCAqdGV4dDIpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fdGV4
dDEodGV4dDEpLCBtX3RleHQyKHRleHQyKQorSm9pblRleHROb2Rlc0NvbW1hbmQ6OkpvaW5UZXh0
Tm9kZXNDb21tYW5kKFRleHQgKnRleHQxLCBUZXh0ICp0ZXh0MikKKyAgICA6IEVkaXRDb21tYW5k
KHRleHQxLT5kb2N1bWVudCgpKSwgbV90ZXh0MSh0ZXh0MSksIG1fdGV4dDIodGV4dDIpCiB7CiAg
ICAgQVNTRVJUKG1fdGV4dDEpOwogICAgIEFTU0VSVChtX3RleHQyKTsKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUv
ZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjMsMjggKzIzLDI1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIF9fam9pbl90ZXh0X25vZGVzX2NvbW1hbmRfaF9fCi0jZGVmaW5lIF9fam9pbl90ZXh0X25v
ZGVzX2NvbW1hbmRfaF9fCisjaWZuZGVmIGpvaW5fdGV4dF9ub2Rlc19jb21tYW5kX2hfXworI2Rl
ZmluZSBqb2luX3RleHRfbm9kZXNfY29tbWFuZF9oX18KIAogI2luY2x1ZGUgIkVkaXRDb21tYW5k
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBUZXh0OwotfQogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBUZXh0OwogCiBjbGFzcyBKb2luVGV4dE5vZGVzQ29tbWFuZCA6
IHB1YmxpYyBFZGl0Q29tbWFuZAogewogcHVibGljOgotICAgIEpvaW5UZXh0Tm9kZXNDb21tYW5k
KERvY3VtZW50ICosIFRleHQgKiwgVGV4dCAqKTsKLSAgICB2aXJ0dWFsIH5Kb2luVGV4dE5vZGVz
Q29tbWFuZCgpIHsgfQorICAgIEpvaW5UZXh0Tm9kZXNDb21tYW5kKFRleHQqLCBUZXh0Kik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHko
KTsKIAotICAgIFRleHQgKmZpcnN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDEuZ2V0KCk7
IH0KLSAgICBUZXh0ICpzZWNvbmROb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Mi5nZXQoKTsg
fQorICAgIFRleHQqIGZpcnN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDEuZ2V0KCk7IH0K
KyAgICBUZXh0KiBzZWNvbmROb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Mi5nZXQoKTsgfQog
CiBwcml2YXRlOgogICAgIFJlZlB0cjxUZXh0PiBtX3RleHQxOwpAQCAtNTQsNCArNTEsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX2pvaW5fdGV4
dF9ub2Rlc19jb21tYW5kX2hfXworI2VuZGlmIC8vIGpvaW5fdGV4dF9ub2Rlc19jb21tYW5kX2hf
XwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0Nv
bW1hbmQuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBFbGVtZW50
ICpmaXJzdCwgRWxlbWVudCAqc2Vjb25kKQotICAgIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBt
X2VsZW1lbnQxKGZpcnN0KSwgbV9lbGVtZW50MihzZWNvbmQpCitNZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZDo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoRWxlbWVudCogZmlyc3Qs
IEVsZW1lbnQqIHNlY29uZCkKKyAgICA6IEVkaXRDb21tYW5kKGZpcnN0LT5kb2N1bWVudCgpKSwg
bV9lbGVtZW50MShmaXJzdCksIG1fZWxlbWVudDIoc2Vjb25kKQogewogICAgIEFTU0VSVChtX2Vs
ZW1lbnQxKTsKICAgICBBU1NFUlQobV9lbGVtZW50Mik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaAkocmV2aXNpb24gMTU5OTEpCisr
KyBXZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE4ICsyMywxNiBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBfX21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5k
X2hfXwotI2RlZmluZSBfX21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kX2hfXworI2lm
bmRlZiBtZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZF9oX18KKyNkZWZpbmUgbWVyZ2Vf
aWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lcmdlSWRlbnRpY2FsRWxlbWVudHND
b21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kCi17CitjbGFzcyBNZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQoRG9jdW1lbnQgKiwgRWxlbWVudCAqZmlyc3QsIEVsZW1lbnQg
KnNlY29uZCk7Ci0gICAgdmlydHVhbCB+TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoKSB7
IH0KKyAgICBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChFbGVtZW50KiwgRWxlbWVudCop
OwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFw
cGx5KCk7CkBAIC00Nyw0ICs0NSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIF9fbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmRfaF9fCisj
ZW5kaWYgLy8gbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmRfaF9fCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkocmV2aXNpb24gMTU5
OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBib29sIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQ6OnByCiB9CiAKIC8vIFRoaXMgbmVlZHMgdG8gYmUgc3RhdGljIHNvIGl0IGNhbiBi
ZSBjYWxsZWQgYnkgY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwgYW5kIGNhbkRlY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsCi1zdGF0aWMgYm9vbCBnZXRTdGFydEVuZExpc3RDaGlsZHJlbihj
b25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSoqIHN0YXJ0LCBOb2RlKiogZW5kKQorc3Rh
dGljIGJvb2wgZ2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4oY29uc3QgU2VsZWN0aW9uJiBzZWxlY3Rp
b24sIE5vZGUqJiBzdGFydCwgTm9kZSomIGVuZCkKIHsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04Myw4ICs4Myw4IEBAIHN0YXRpYyBib29s
IGdldFN0YXJ0RW5kTGlzdENoaWxkcmVuKGNvbnMKICAgICAgICAgICAgIGVuZExpc3RDaGlsZCA9
IHItPmVsZW1lbnQoKTsKICAgICB9CiAKLSAgICAqc3RhcnQgPSBzdGFydExpc3RDaGlsZDsKLSAg
ICAqZW5kID0gZW5kTGlzdENoaWxkOworICAgIHN0YXJ0ID0gc3RhcnRMaXN0Q2hpbGQ7CisgICAg
ZW5kID0gZW5kTGlzdENoaWxkOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzQsMjcgKzEz
NCwyMSBAQCB2b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmFwCiAgICAgfQog
fQogCi1JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OkluY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQsIEVMaXN0VHlwZSBsaXN0VHlwZSkK
K0luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6SW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgVHlwZSBsaXN0VHlwZSkKICAgICA6IE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoZG9jdW1lbnQpCisgICAgLCBtX2xpc3RUeXBl
KGxpc3RUeXBlKQogewotICAgIG1fbGlzdFR5cGUgPSBsaXN0VHlwZTsKLSAgICBtX2xpc3RFbGVt
ZW50ID0gMDsKLX0KLQotTm9kZSogSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjps
aXN0RWxlbWVudCgpCi17Ci0gICAgcmV0dXJuIG1fbGlzdEVsZW1lbnQ7CiB9CiAKIC8vIFRoaXMg
bmVlZHMgdG8gYmUgc3RhdGljIHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkgY2FuSW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWwKLXN0YXRpYyBib29sIGNhbkluY3JlYXNlTGlzdExldmVsKGNvbnN0IFNl
bGVjdGlvbiYgc2VsZWN0aW9uLCBOb2RlKiogc3RhcnQsIE5vZGUqKiBlbmQpCitzdGF0aWMgYm9v
bCBjYW5JbmNyZWFzZUxpc3RMZXZlbChjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSom
IHN0YXJ0LCBOb2RlKiYgZW5kKQogewogICAgIGlmICghZ2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4o
c2VsZWN0aW9uLCBzdGFydCwgZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAvLyBzdGFydCBtdXN0IG5vdCBiZSB0aGUgZmlyc3QgY2hpbGQgKGJlY2F1c2UgeW91IG5l
ZWQgYSBwcmlvciBvbmUKICAgICAvLyB0byBpbmNyZWFzZSByZWxhdGl2ZSB0bykKLSAgICBpZiAo
ISgqc3RhcnQpLT5yZW5kZXJlcigpLT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICBpZiAoIXN0YXJ0
LT5yZW5kZXJlcigpLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTc4LDcgKzE3Miw3IEBAIHZvaWQgSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjoKIHsKICAgICBOb2RlKiBzdGFydExpc3RDaGlsZDsK
ICAgICBOb2RlKiBlbmRMaXN0Q2hpbGQ7Ci0gICAgaWYgKCFjYW5JbmNyZWFzZUxpc3RMZXZlbChl
bmRpbmdTZWxlY3Rpb24oKSwgJnN0YXJ0TGlzdENoaWxkLCAmZW5kTGlzdENoaWxkKSkKKyAgICBp
ZiAoIWNhbkluY3JlYXNlTGlzdExldmVsKGVuZGluZ1NlbGVjdGlvbigpLCBzdGFydExpc3RDaGls
ZCwgZW5kTGlzdENoaWxkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogcHJldmlvdXNJ
dGVtID0gc3RhcnRMaXN0Q2hpbGQtPnJlbmRlcmVyKCktPnByZXZpb3VzU2libGluZygpLT5lbGVt
ZW50KCk7CkBAIC0yMTAsMjkgKzIwNCwzMCBAQCBib29sIEluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsQ29tbWFuZDo6CiB7CiAgICAgTm9kZSogc3RhcnRMaXN0Q2hpbGQ7CiAgICAgTm9kZSogZW5k
TGlzdENoaWxkOwotICAgIAotICAgIHJldHVybiBjYW5JbmNyZWFzZUxpc3RMZXZlbChkb2N1bWVu
dC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksICZzdGFydExpc3RDaGlsZCwgJmVu
ZExpc3RDaGlsZCk7CisgICAgcmV0dXJuIGNhbkluY3JlYXNlTGlzdExldmVsKGRvY3VtZW50LT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3RhcnRMaXN0Q2hpbGQsIGVuZExpc3RD
aGlsZCk7CiB9CiAKLXN0YXRpYyBOb2RlKiBpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFdpdGhU
eXBlKERvY3VtZW50KiBkb2N1bWVudCwgRUxpc3RUeXBlIGxpc3RUeXBlKQorTm9kZSogSW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFdp
dGhUeXBlKERvY3VtZW50KiBkb2N1bWVudCwgVHlwZSBsaXN0VHlwZSkKIHsKICAgICBBU1NFUlQo
ZG9jdW1lbnQpOwogICAgIEFTU0VSVChkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kKiBtb2RDb21tYW5kID0gbmV3IEluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZChkb2N1bWVudCwgbGlzdFR5cGUpOwotICAgIEVkaXRDb21tYW5k
UHRyIGNtZChtb2RDb21tYW5kKTsKLSAgICBjbWQuYXBwbHkoKTsKLSAgICByZXR1cm4gbW9kQ29t
bWFuZC0+bGlzdEVsZW1lbnQoKTsKKyAgICBSZWZQdHI8SW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxDb21tYW5kPiBtb2RDb21tYW5kID0gbmV3IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29t
bWFuZChkb2N1bWVudCwgbGlzdFR5cGUpOworICAgIG1vZENvbW1hbmQtPmFwcGx5KCk7CisgICAg
cmV0dXJuIG1vZENvbW1hbmQtPm1fbGlzdEVsZW1lbnQuZ2V0KCk7CiB9CiAKLU5vZGUqIEluY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
RG9jdW1lbnQqIGRvY3VtZW50KSB7CitOb2RlKiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKERvY3VtZW50KiBkb2N1bWVudCkKK3sK
ICAgICByZXR1cm4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxXaXRoVHlwZShkb2N1bWVudCwg
SW5oZXJpdGVkTGlzdFR5cGUpOwogfQogCi1Ob2RlKiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZChEb2N1bWVudCogZG9j
dW1lbnQpIHsKK05vZGUqIEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKERvY3VtZW50KiBkb2N1bWVudCkKK3sKICAgICBy
ZXR1cm4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxXaXRoVHlwZShkb2N1bWVudCwgT3JkZXJl
ZExpc3QpOwogfQogCi1Ob2RlKiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omlu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKERvY3VtZW50KiBkb2N1bWVudCkgewor
Tm9kZSogSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbFVub3JkZXJlZChEb2N1bWVudCogZG9jdW1lbnQpCit7CiAgICAgcmV0dXJuIGlu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsV2l0aFR5cGUoZG9jdW1lbnQsIFVub3JkZXJlZExpc3Qp
OwogfQogCkBAIC0yNDIsMTMgKzIzNywxMyBAQCBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OkRlY3JlCiB9CiAKIC8vIFRoaXMgbmVlZHMgdG8gYmUgc3RhdGljIHNvIGl0IGNhbiBi
ZSBjYWxsZWQgYnkgY2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXN0YXRpYyBib29sIGNh
bkRlY3JlYXNlTGlzdExldmVsKGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOb2RlKiogc3Rh
cnQsIE5vZGUqKiBlbmQpCitzdGF0aWMgYm9vbCBjYW5EZWNyZWFzZUxpc3RMZXZlbChjb25zdCBT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSomIHN0YXJ0LCBOb2RlKiYgZW5kKQogewogICAgIGlm
ICghZ2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4oc2VsZWN0aW9uLCBzdGFydCwgZW5kKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIHRoZXJlIG11c3QgYmUgYSBkZXN0aW5hdGlv
biBsaXN0IHRvIG1vdmUgdGhlIGl0ZW1zIHRvCi0gICAgaWYgKCFpc0xpc3RFbGVtZW50KCgqc3Rh
cnQpLT5wYXJlbnROb2RlKCktPnBhcmVudE5vZGUoKSkpCisgICAgaWYgKCFpc0xpc3RFbGVtZW50
KHN0YXJ0LT5wYXJlbnROb2RlKCktPnBhcmVudE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTgsNyArMjUzLDcgQEAgdm9pZCBE
ZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OgogewogICAgIE5vZGUqIHN0YXJ0TGlz
dENoaWxkOwogICAgIE5vZGUqIGVuZExpc3RDaGlsZDsKLSAgICBpZiAoIWNhbkRlY3JlYXNlTGlz
dExldmVsKGVuZGluZ1NlbGVjdGlvbigpLCAmc3RhcnRMaXN0Q2hpbGQsICZlbmRMaXN0Q2hpbGQp
KQorICAgIGlmICghY2FuRGVjcmVhc2VMaXN0TGV2ZWwoZW5kaW5nU2VsZWN0aW9uKCksIHN0YXJ0
TGlzdENoaWxkLCBlbmRMaXN0Q2hpbGQpKQogICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBw
cmV2aW91c0l0ZW0gPSBzdGFydExpc3RDaGlsZC0+cmVuZGVyZXIoKS0+cHJldmlvdXNTaWJsaW5n
KCkgPyBzdGFydExpc3RDaGlsZC0+cmVuZGVyZXIoKS0+cHJldmlvdXNTaWJsaW5nKCktPmVsZW1l
bnQoKSA6IDA7CkBAIC0yODUsMTcgKzI4MCwxNCBAQCBib29sIERlY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsQ29tbWFuZDo6CiB7CiAgICAgTm9kZSogc3RhcnRMaXN0Q2hpbGQ7CiAgICAgTm9kZSog
ZW5kTGlzdENoaWxkOwotICAgIAotICAgIHJldHVybiBjYW5EZWNyZWFzZUxpc3RMZXZlbChkb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksICZzdGFydExpc3RDaGlsZCwg
JmVuZExpc3RDaGlsZCk7CisgICAgcmV0dXJuIGNhbkRlY3JlYXNlTGlzdExldmVsKGRvY3VtZW50
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3RhcnRMaXN0Q2hpbGQsIGVuZExp
c3RDaGlsZCk7CiB9CiAKIHZvaWQgRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjpk
ZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgQVNT
RVJUKGRvY3VtZW50KTsKICAgICBBU1NFUlQoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIERlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCogbW9kQ29tbWFuZCA9IG5ldyBEZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoZG9jdW1lbnQpOwotICAgIEVkaXRDb21tYW5kUHRyIGNt
ZChtb2RDb21tYW5kKTsKLSAgICBjbWQuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IERl
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZChkb2N1bWVudCkpOwogfQogCiB9CkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oCShyZXZpc2lvbiAx
NTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNjIgKzIzLDU4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIF9fbW9kaWZ5X3NlbGVjdGlvbl9saXN0X2xldmVsX2hfXwotI2RlZmluZSBfX21vZGlm
eV9zZWxlY3Rpb25fbGlzdF9sZXZlbF9oX18KKyNpZm5kZWYgbW9kaWZ5X3NlbGVjdGlvbl9saXN0
X2xldmVsX2hfXworI2RlZmluZSBtb2RpZnlfc2VsZWN0aW9uX2xpc3RfbGV2ZWxfaF9fCiAKICNp
bmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQgcHJvdmlkZXMgZnVuY3Rpb25zIHVz
ZWZ1bCBmb3IgYm90aCBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBsaXN0Ci0vLyBsZXZl
bC4gIFNvLCBpdCBpcyB0aGUgYmFzZSBjbGFzcyBvZiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQgYW5kIERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZC4KKy8vIE1vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQgcHJvdmlkZXMgZnVuY3Rpb25zIHVzZWZ1bCBmb3Ig
Ym90aCBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBsaXN0IGxldmVsLgorLy8gSXQgaXMg
dGhlIGJhc2UgY2xhc3Mgb2YgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIGFuZCBE
ZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQuCiAvLyBJdCBpcyBub3QgdXNlZCBvbiBp
dHMgb3duLgotY2xhc3MgTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBD
b21wb3NpdGVFZGl0Q29tbWFuZAotewotcHVibGljOgotICAgIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgdmly
dHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7Ci0gICAgCitjbGFzcyBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5k
IHsKIHByb3RlY3RlZDoKKyAgICBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kKERvY3Vt
ZW50Kik7CisgICAgCiAgICAgdm9pZCBhcHBlbmRTaWJsaW5nTm9kZVJhbmdlKE5vZGUqIHN0YXJ0
Tm9kZSwgTm9kZSogZW5kTm9kZSwgTm9kZSogbmV3UGFyZW50KTsKICAgICB2b2lkIGluc2VydFNp
YmxpbmdOb2RlUmFuZ2VCZWZvcmUoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2RlLCBOb2Rl
KiByZWZOb2RlKTsKICAgICB2b2lkIGluc2VydFNpYmxpbmdOb2RlUmFuZ2VBZnRlcihOb2RlKiBz
dGFydE5vZGUsIE5vZGUqIGVuZE5vZGUsIE5vZGUqIHJlZk5vZGUpOwotfTsKIAotLy8gSW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIG1vdmVzIHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW1z
IG9uZSBsZXZlbCBkZWVwZXIKLXR5cGVkZWYgZW51bSBFTGlzdFR5cGUgeyBJbmhlcml0ZWRMaXN0
VHlwZSwgT3JkZXJlZExpc3QsIFVub3JkZXJlZExpc3QgfTsKK3ByaXZhdGU6CisgICAgdmlydHVh
bCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7ICAgIAorfTsKIAotY2xhc3MgSW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIDogcHVibGljIE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbENvbW1hbmQKLXsKKy8vIEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCBt
b3ZlcyB0aGUgc2VsZWN0ZWQgbGlzdCBpdGVtcyBvbmUgbGV2ZWwgZGVlcGVyLgorY2xhc3MgSW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIDogcHVibGljIE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbENvbW1hbmQgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhbkluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsKERvY3VtZW50Kik7CiAgICAgc3RhdGljIE5vZGUqIGluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsKERvY3VtZW50Kik7CiAgICAgc3RhdGljIE5vZGUqIGluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsT3JkZXJlZChEb2N1bWVudCopOwogICAgIHN0YXRpYyBOb2RlKiBpbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZChEb2N1bWVudCopOwogCi0gICAgSW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgRUxpc3RUeXBl
KTsKLSAgICBOb2RlKiAgICAgICBsaXN0RWxlbWVudCgpOworcHJpdmF0ZToKKyAgICBlbnVtIFR5
cGUgeyBJbmhlcml0ZWRMaXN0VHlwZSwgT3JkZXJlZExpc3QsIFVub3JkZXJlZExpc3QgfTsKKyAg
ICBzdGF0aWMgTm9kZSogaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxXaXRoVHlwZShEb2N1bWVu
dCosIFR5cGUgbGlzdFR5cGUpOworCisgICAgSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21t
YW5kKERvY3VtZW50KiwgVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAotcHJp
dmF0ZToKLSAgICBFTGlzdFR5cGUgICBtX2xpc3RUeXBlOwotICAgIE5vZGUqICAgICAgIG1fbGlz
dEVsZW1lbnQ7CisgICAgVHlwZSBtX2xpc3RUeXBlOworICAgIFJlZlB0cjxOb2RlPiBtX2xpc3RF
bGVtZW50OwogfTsKIAotLy8gRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kIG1vdmVz
IHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW1zIG9uZSBsZXZlbCBzaGFsbG93ZXIKLWNsYXNzIERlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWxDb21tYW5kCi17CisvLyBEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQgbW92
ZXMgdGhlIHNlbGVjdGVkIGxpc3QgaXRlbXMgb25lIGxldmVsIHNoYWxsb3dlci4KK2NsYXNzIERl
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWxDb21tYW5kIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW5EZWNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbChEb2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRlY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsKERvY3VtZW50Kik7CiAKLSAgICBEZWNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KTsKLQorcHJpdmF0ZToKKyAgICBEZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZG9BcHBseSgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19t
b2RpZnlfc2VsZWN0aW9uX2xpc3RfbGV2ZWxfaF9fCisjZW5kaWYgLy8gbW9kaWZ5X3NlbGVjdGlv
bl9saXN0X2xldmVsX2hfXwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9u
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICsz
MSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTW92ZVNlbGVjdGlvbkNvbW1hbmQ6Ok1v
dmVTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCAq
ZnJhZ21lbnQsIFBvc2l0aW9uICZwb3NpdGlvbiwgYm9vbCBzbWFydE1vdmUpIAotICAgIDogQ29t
cG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX2ZyYWdtZW50KGZyYWdtZW50KSwgbV9wb3Np
dGlvbihwb3NpdGlvbiksIG1fc21hcnRNb3ZlKHNtYXJ0TW92ZSkKK01vdmVTZWxlY3Rpb25Db21t
YW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50LCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGJvb2wgc21hcnRNb3ZlKSAKKyAgICA6
IENvbXBvc2l0ZUVkaXRDb21tYW5kKGZyYWdtZW50LT5kb2N1bWVudCgpKSwgbV9mcmFnbWVudChm
cmFnbWVudCksIG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX3NtYXJ0TW92ZShzbWFydE1vdmUpCiB7
CiAgICAgQVNTRVJUKG1fZnJhZ21lbnQpOwogfQpAQCAtNzMsOSArNzMsOCBAQCB2b2lkIE1vdmVT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIXBvcy5ub2RlKCktPmluRG9jdW1l
bnQoKSkKICAgICAgICAgcG9zID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsKIAotICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpOwotICAg
IEVkaXRDb21tYW5kUHRyIGNtZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQo
KSwgbV9mcmFnbWVudC5nZXQoKSwgdHJ1ZSwgbV9zbWFydE1vdmUpKTsKLSAgICBhcHBseUNvbW1h
bmRUb0NvbXBvc2l0ZShjbWQpOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24ocG9z
LCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0eSgpKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKG1fZnJhZ21lbnQuZ2V0KCksIHRydWUs
IG1fc21hcnRNb3ZlKSk7CiB9CiAKIEVkaXRBY3Rpb24gTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmVk
aXRpbmdBY3Rpb24oKSBjb25zdApJbmRleDogV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25D
b21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21t
YW5kLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25D
b21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyMyw4
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIF9fbW92ZV9zZWxlY3Rpb25fY29t
bWFuZF9oX18KLSNkZWZpbmUgX19tb3ZlX3NlbGVjdGlvbl9jb21tYW5kX2hfXworI2lmbmRlZiBt
b3ZlX3NlbGVjdGlvbl9jb21tYW5kX2hfXworI2RlZmluZSBtb3ZlX3NlbGVjdGlvbl9jb21tYW5k
X2hfXwogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKIApAQCAtMzIsMTAgKzMy
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogCi1j
bGFzcyBNb3ZlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZAot
eworY2xhc3MgTW92ZVNlbGVjdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1h
bmQgewogcHVibGljOgotICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50ICpkb2N1bWVu
dCwgRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQsIFBvc2l0aW9uICZwb3NpdGlvbiwgYm9vbCBz
bWFydE1vdmU9ZmFsc2UpOworICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kKFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4sIGNvbnN0IFBvc2l0aW9uJiwgYm9vbCBzbWFydE1vdmUgPSBmYWxzZSk7
CiAgICAgdmlydHVhbCB+TW92ZVNlbGVjdGlvbkNvbW1hbmQoKTsKICAgICAKICAgICB2aXJ0dWFs
IHZvaWQgZG9BcHBseSgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlYmFsYW5jZVdoaXRlc3Bh
Y2VDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmViYWxhbmNlV2hp
dGVzcGFjZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9S
ZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMz
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFu
ZDo6UmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBQ
b3NpdGlvbiAmcG9zKQotICAgIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3Bvc2l0aW9uKHBv
cyksIG1fdXBzdHJlYW1PZmZzZXQoSW52YWxpZE9mZnNldCkKK1JlYmFsYW5jZVdoaXRlc3BhY2VD
b21tYW5kOjpSZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZChjb25zdCBQb3NpdGlvbiYgcG9zKQor
ICAgIDogRWRpdENvbW1hbmQocG9zLm5vZGUoKS0+ZG9jdW1lbnQoKSksIG1fcG9zaXRpb24ocG9z
KSwgbV91cHN0cmVhbU9mZnNldChJbnZhbGlkT2Zmc2V0KQogewogfQogCkBAIC00Nyw3ICs0Nyw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2UoVUNoYXIgYykKIC8vIEZJWE1FOiBU
aGlzIHR1cm5zIHByZXNlcnZlZCBuZXdsaW5lcyBpbnRvIG5ic3BzLgogdm9pZCBSZWJhbGFuY2VX
aGl0ZXNwYWNlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgaWYgKG1fcG9zaXRpb24uaXNOdWxs
KCkgfHwgIW1fcG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgaWYgKCFtX3Bvc2l0
aW9uLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBUZXh0KiB0
ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihtX3Bvc2l0aW9uLm5vZGUoKSk7CkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvUmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvUmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQuaAkocmV2aXNpb24g
MTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDExICszMCw5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmViYWxhbmNlV2hpdGVzcGFjZUNvbW1hbmQgOiBw
dWJsaWMgRWRpdENvbW1hbmQKLXsKK2NsYXNzIFJlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5kIDog
cHVibGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBSZWJhbGFuY2VXaGl0ZXNwYWNlQ29t
bWFuZChEb2N1bWVudCAqLCBjb25zdCBQb3NpdGlvbiAmKTsKLSAgICB2aXJ0dWFsIH5SZWJhbGFu
Y2VXaGl0ZXNwYWNlQ29tbWFuZCgpIHsgfQorICAgIFJlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5k
KGNvbnN0IFBvc2l0aW9uJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZp
cnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKQEAgLTUzLDQgKzUxLDQgQEAgcHJpdmF0ZToKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19yZWJhbGFuY2Vfd2hpdGVzcGFjZV9j
b21tYW5kX2hfXworI2VuZGlmIC8vIHJlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmRfaF9fCklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oCShyZXZpc2lv
biAxNTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogCi1jbGFzcyBSZW1v
dmVDU1NQcm9wZXJ0eUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQKLXsKK2NsYXNzIFJlbW92
ZUNTU1Byb3BlcnR5Q29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAg
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKERvY3VtZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbios
IGludCBwcm9wZXJ0eSk7CiAgICAgdmlydHVhbCB+UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKCk7
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1
dGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kOjpSZW1vdmVOb2RlQXR0
cmlidXRlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIEVsZW1lbnQgKmVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwg
bV9lbGVtZW50KGVsZW1lbnQpLCBtX2F0dHJpYnV0ZShhdHRyaWJ1dGUpCitSZW1vdmVOb2RlQXR0
cmlidXRlQ29tbWFuZDo6UmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQorICAgIDogRWRpdENvbW1hbmQoZWxl
bWVudC0+ZG9jdW1lbnQoKSksIG1fZWxlbWVudChlbGVtZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmli
dXRlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2Vi
Q29yZS9lZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyNSArMjMsMjIgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgX19yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KLSNkZWZp
bmUgX19yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KKyNpZm5kZWYgcmVtb3ZlX25v
ZGVfYXR0cmlidXRlX2NvbW1hbmRfaF9fCisjZGVmaW5lIHJlbW92ZV9ub2RlX2F0dHJpYnV0ZV9j
b21tYW5kX2hfXwogCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLQogI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW1vdmVOb2RlQXR0
cmlidXRlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAoteworY2xhc3MgUmVtb3ZlTm9kZUF0
dHJpYnV0ZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFJlbW92
ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKERvY3VtZW50ICosIEVsZW1lbnQgKiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlKTsKLSAgICB2aXJ0dWFsIH5SZW1vdmVOb2RlQXR0cmlidXRlQ29t
bWFuZCgpIHsgfQorICAgIFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKEVsZW1lbnQqLCBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHko
KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBFbGVtZW50ICplbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CisgICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlOyB9CiAgICAgCiBw
cml2YXRlOgpAQCAtNTIsNCArNDksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBfX3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXworI2Vu
ZGlmIC8vIHJlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXwpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5v
ZGVDb21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgTm9kZSAqcmVtb3ZlQ2hpbGQpCi0gICAgOiBF
ZGl0Q29tbWFuZChkb2N1bWVudCksIG1fcmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpLCBtX3BhcmVu
dChtX3JlbW92ZUNoaWxkLT5wYXJlbnROb2RlKCkpLCBtX3JlZkNoaWxkKG1fcmVtb3ZlQ2hpbGQt
Pm5leHRTaWJsaW5nKCkpCitSZW1vdmVOb2RlQ29tbWFuZDo6UmVtb3ZlTm9kZUNvbW1hbmQoTm9k
ZSogcmVtb3ZlQ2hpbGQpCisgICAgOiBFZGl0Q29tbWFuZChyZW1vdmVDaGlsZC0+ZG9jdW1lbnQo
KSkKKyAgICAsIG1fcmVtb3ZlQ2hpbGQocmVtb3ZlQ2hpbGQpCisgICAgLCBtX3BhcmVudChtX3Jl
bW92ZUNoaWxkLT5wYXJlbnROb2RlKCkpCisgICAgLCBtX3JlZkNoaWxkKG1fcmVtb3ZlQ2hpbGQt
Pm5leHRTaWJsaW5nKCkpCiB7CiAgICAgQVNTRVJUKG1fcGFyZW50KTsKIH0KSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjMsMjMgKzIzLDIxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIF9f
cmVtb3ZlX25vZGVfY29tbWFuZF9oX18KLSNkZWZpbmUgX19yZW1vdmVfbm9kZV9jb21tYW5kX2hf
XworI2lmbmRlZiByZW1vdmVfbm9kZV9jb21tYW5kX2hfXworI2RlZmluZSByZW1vdmVfbm9kZV9j
b21tYW5kX2hfXwogCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBSZW1vdmVOb2RlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZAotewor
Y2xhc3MgUmVtb3ZlTm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgot
ICAgIFJlbW92ZU5vZGVDb21tYW5kKERvY3VtZW50ICosIE5vZGUgKik7Ci0gICAgdmlydHVhbCB+
UmVtb3ZlTm9kZUNvbW1hbmQoKSB7IH0KKyAgICBSZW1vdmVOb2RlQ29tbWFuZChOb2RlKik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHko
KTsKIAotICAgIE5vZGUgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZUNoaWxkLmdldCgp
OyB9CisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlQ2hpbGQuZ2V0KCk7
IH0KIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9yZW1vdmVDaGlsZDsKQEAgLTQ5LDQg
KzQ3LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
X19yZW1vdmVfbm9kZV9jb21tYW5kX2hfXworI2VuZGlmIC8vIHJlbW92ZV9ub2RlX2NvbW1hbmRf
aF9fCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0
aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29t
bWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIE5vZGUgKm5vZGUpCi0gICAgOiBDb21wb3NpdGVFZGl0
Q29tbWFuZChkb2N1bWVudCksIG1fbm9kZShub2RlKQorUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQ6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKE5vZGUqIG5v
ZGUpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKSwgbV9ub2Rl
KG5vZGUpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAkocmV2aXNp
b24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDIyICsy
MywyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBfX3JlbW92ZV9ub2RlX3By
ZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFuZF9oX18KLSNkZWZpbmUgX19yZW1vdmVfbm9kZV9wcmVz
ZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmRfaF9fCisjaWZuZGVmIHJlbW92ZV9ub2RlX3ByZXNlcnZp
bmdfY2hpbGRyZW5fY29tbWFuZF9oX18KKyNkZWZpbmUgcmVtb3ZlX25vZGVfcHJlc2VydmluZ19j
aGlsZHJlbl9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZAoteworY2xhc3MgUmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1h
bmQgewogcHVibGljOgotICAgIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKERv
Y3VtZW50ICosIE5vZGUgKik7Ci0gICAgdmlydHVhbCB+UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQoKSB7IH0KKyAgICBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFu
ZChOb2RlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogCi0gICAgTm9kZSAqbm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAgIE5vZGUqIG5vZGUoKSBjb25z
dCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlOwpAQCAtNDYsNCArNDQsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBfX3JlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29tbWFu
ZF9oX18KKyNlbmRpZiAvLyByZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmRf
aF9fCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsOCBAQCBzdGF0aWMgYm9vbCBpc0lu
dGVyY2hhbmdlQ29udmVydGVkU3BhY2VTCiAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEhU
TUxFbGVtZW50ICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBjb252ZXJ0ZWRT
cGFjZVNwYW5DbGFzc1N0cmluZzsKIH0KIAotUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1l
bnRGcmFnbWVudChEb2N1bWVudCogZG9jdW1lbnQsIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
LCBib29sIG1hdGNoU3R5bGUsIGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uKQotICAgIDogbV9k
b2N1bWVudChkb2N1bWVudCksCitSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdt
ZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBib29sIG1hdGNoU3R5bGUsIGNvbnN0IFNl
bGVjdGlvbiYgc2VsZWN0aW9uKQorICAgIDogbV9kb2N1bWVudChmcmFnbWVudC0+ZG9jdW1lbnQo
KSksCiAgICAgICBtX2ZyYWdtZW50KGZyYWdtZW50KSwKICAgICAgIG1fbWF0Y2hTdHlsZShtYXRj
aFN0eWxlKSwgCiAgICAgICBtX2hhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQoZmFsc2UpLCAK
QEAgLTI1NSw4ICsyNTUsMTAgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVVbnJl
bmRlcgogICAgICAgICByZW1vdmVOb2RlKGl0LmN1cnJlbnQoKSk7CiB9CiAKLVJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQs
IERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29s
IHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlLCBib29sIHByZXZlbnROZXN0aW5nLCBFZGl0
QWN0aW9uIGVkaXRBY3Rpb24pIAotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQp
LAorUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsCisgICAgICAgIGJvb2wgc2VsZWN0UmVw
bGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIGJvb2wgcHJldmVu
dE5lc3RpbmcsCisgICAgICAgIEVkaXRBY3Rpb24gZWRpdEFjdGlvbikgCisgICAgOiBDb21wb3Np
dGVFZGl0Q29tbWFuZChmcmFnbWVudC0+ZG9jdW1lbnQoKSksCiAgICAgICBtX3NlbGVjdFJlcGxh
Y2VtZW50KHNlbGVjdFJlcGxhY2VtZW50KSwgCiAgICAgICBtX3NtYXJ0UmVwbGFjZShzbWFydFJl
cGxhY2UpLAogICAgICAgbV9tYXRjaFN0eWxlKG1hdGNoU3R5bGUpLApAQCAtNDIxLDcgKzQyMyw3
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBtX21h
dGNoU3R5bGUgPSB0cnVlOwogICAgIAogICAgIEVsZW1lbnQqIGN1cnJlbnRSb290ID0gc2VsZWN0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBSZXBsYWNlbWVudEZyYWdtZW50IGZyYWdt
ZW50KGRvY3VtZW50KCksIG1fZG9jdW1lbnRGcmFnbWVudC5nZXQoKSwgbV9tYXRjaFN0eWxlLCBz
ZWxlY3Rpb24pOworICAgIFJlcGxhY2VtZW50RnJhZ21lbnQgZnJhZ21lbnQobV9kb2N1bWVudEZy
YWdtZW50LmdldCgpLCBtX21hdGNoU3R5bGUsIHNlbGVjdGlvbik7CiAgICAgCiAgICAgaWYgKGZy
YWdtZW50LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzEwLDcgKzcxMiw3IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNvbXBsZXRlSFQKICAgICBpZiAobV9zZWxlY3RS
ZXBsYWNlbWVudCkKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihzdGFydCwg
ZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgIGVsc2UKLSAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKGVuZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOworICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oU2VsZWN0aW9uKGVuZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKIH0KIAogRWRp
dEFjdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24g
MTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDkgQEAgZW51bSBFRnJhZ21lbnRUeXBlIHsgRW1wdHlG
cmFnbWVudCwgU2luZwogCiAvLyAtLS0gUmVwbGFjZW1lbnRGcmFnbWVudCBoZWxwZXIgY2xhc3MK
IAotY2xhc3MgUmVwbGFjZW1lbnRGcmFnbWVudCA6IE5vbmNvcHlhYmxlCi17CitjbGFzcyBSZXBs
YWNlbWVudEZyYWdtZW50IDogTm9uY29weWFibGUgewogcHVibGljOgotICAgIFJlcGxhY2VtZW50
RnJhZ21lbnQoRG9jdW1lbnQqLCBEb2N1bWVudEZyYWdtZW50KiwgYm9vbCBtYXRjaFN0eWxlLCBj
b25zdCBTZWxlY3Rpb24mKTsKKyAgICBSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQqLCBib29sIG1hdGNoU3R5bGUsIGNvbnN0IFNlbGVjdGlvbiYpOwogCiAgICAgTm9kZSogZmly
c3RDaGlsZCgpIGNvbnN0OwogICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNvbnN0OwpAQCAtNjgsMjAg
KzY3LDIxIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0ludGVyY2hhbmdlTmV3bGluZUF0RW5k
OwogfTsKIAotY2xhc3MgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRl
RWRpdENvbW1hbmQKLXsKK2NsYXNzIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kIDogcHVibGljIENv
bXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZChEb2N1bWVudCosIERvY3VtZW50RnJhZ21lbnQqLCBib29sIHNlbGVjdFJlcGxhY2VtZW50PXRy
dWUsIGJvb2wgc21hcnRSZXBsYWNlPWZhbHNlLCBib29sIG1hdGNoU3R5bGU9ZmFsc2UsIGJvb2wg
cHJldmVudE5lc3Rpbmc9dHJ1ZSwgRWRpdEFjdGlvbiBhY3Rpb249RWRpdEFjdGlvblBhc3RlKTsK
KyAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
LAorICAgICAgICBib29sIHNlbGVjdFJlcGxhY2VtZW50ID0gdHJ1ZSwgYm9vbCBzbWFydFJlcGxh
Y2UgPSBmYWxzZSwgYm9vbCBtYXRjaFN0eWxlID0gZmFsc2UsIGJvb2wgcHJldmVudE5lc3Rpbmcg
PSB0cnVlLAorICAgICAgICBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblBhc3RlKTsKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb21wbGV0ZUhUTUxSZXBsYWNl
bWVudChjb25zdCBQb3NpdGlvbiAmbGFzdFBvc2l0aW9uVG9TZWxlY3QpOworICAgIHZvaWQgY29t
cGxldGVIVE1MUmVwbGFjZW1lbnQoY29uc3QgUG9zaXRpb24mIGxhc3RQb3NpdGlvblRvU2VsZWN0
KTsKIAotICAgIHZvaWQgaW5zZXJ0Tm9kZUFmdGVyQW5kVXBkYXRlTm9kZXNJbnNlcnRlZChOb2Rl
ICppbnNlcnRDaGlsZCwgTm9kZSAqcmVmQ2hpbGQpOwotICAgIHZvaWQgaW5zZXJ0Tm9kZUF0QW5k
VXBkYXRlTm9kZXNJbnNlcnRlZChOb2RlICppbnNlcnRDaGlsZCwgTm9kZSAqcmVmQ2hpbGQsIGlu
dCBvZmZzZXQpOwotICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZUFuZFVwZGF0ZU5vZGVzSW5zZXJ0
ZWQoTm9kZSAqaW5zZXJ0Q2hpbGQsIE5vZGUgKnJlZkNoaWxkKTsKKyAgICB2b2lkIGluc2VydE5v
ZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9kZSogaW5zZXJ0Q2hpbGQsIE5vZGUqIHJl
ZkNoaWxkKTsKKyAgICB2b2lkIGluc2VydE5vZGVBdEFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9k
ZSogaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBpbnQgb2Zmc2V0KTsKKyAgICB2b2lkIGlu
c2VydE5vZGVCZWZvcmVBbmRVcGRhdGVOb2Rlc0luc2VydGVkKE5vZGUqIGluc2VydENoaWxkLCBO
b2RlKiByZWZDaGlsZCk7CiAKICAgICB2b2lkIHVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9kZSopOwog
ICAgIGJvb2wgc2hvdWxkUmVtb3ZlRW5kQlIoTm9kZSopOwpAQCAtMTA1LDQgKzEwNSw0IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9fcmVwbGFjZV9z
ZWxlY3Rpb25fY29tbWFuZF9oX18KKyNlbmRpZiAvLyByZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5k
X2hfXwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29y
ZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00NCwzMiArNDQsNDcgQEAgU2VsZWN0aW9uOjpTZWxlY3Rpb24oKQogewogfQog
Ci1TZWxlY3Rpb246OlNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZm
aW5pdHkpCi0gICAgOiBtX2Jhc2UocG9zKSwgbV9leHRlbnQocG9zKQorU2VsZWN0aW9uOjpTZWxl
Y3Rpb24oY29uc3QgUG9zaXRpb24mIHBvcywgRUFmZmluaXR5IGFmZmluaXR5KQorICAgIDogbV9i
YXNlKHBvcykKKyAgICAsIG1fZXh0ZW50KHBvcykKICAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkp
CiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICwgbV9zdGF0
ZShOT05FKQotICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewogICAgIHZhbGlkYXRlKCk7CiB9
CiAKLVNlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZiYXNlLCBjb25zdCBQb3Np
dGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHkpCi0gICAgOiBtX2Jhc2UoYmFzZSksIG1f
ZXh0ZW50KGV4dGVudCkKK1NlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uJiBiYXNl
LCBjb25zdCBQb3NpdGlvbiYgZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHkpCisgICAgOiBtX2Jh
c2UoYmFzZSkKKyAgICAsIG1fZXh0ZW50KGV4dGVudCkKICAgICAsIG1fYWZmaW5pdHkoYWZmaW5p
dHkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICwgbV9z
dGF0ZShOT05FKQotICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewogICAgIHZhbGlkYXRlKCk7
CiB9CiAKLVNlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFJhbmdlICpyYW5nZSwgRUFmZmluaXR5
IGFmZmluaXR5KQotICAgIDogbV9iYXNlKHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX2V4dGVu
dChyYW5nZS0+ZW5kUG9zaXRpb24oKSkKK1NlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zKQorICAgIDogbV9iYXNlKHBvcy5kZWVwRXF1aXZhbGVudCgpKQorICAg
ICwgbV9leHRlbnQocG9zLmRlZXBFcXVpdmFsZW50KCkpCisgICAgLCBtX2FmZmluaXR5KHBvcy5h
ZmZpbml0eSgpKQorICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKK3sK
KyAgICB2YWxpZGF0ZSgpOworfQorCitTZWxlY3Rpb246OlNlbGVjdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZXh0ZW50KQorICAgIDogbV9i
YXNlKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSkKKyAgICAsIG1fZXh0ZW50KGV4dGVudC5kZWVwRXF1
aXZhbGVudCgpKQorICAgICwgbV9hZmZpbml0eShiYXNlLmFmZmluaXR5KCkpCisgICAgLCBtX2dy
YW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQoreworICAgIHZhbGlkYXRlKCk7Cit9CisK
K1NlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmlu
aXR5KQorICAgIDogbV9iYXNlKHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCisgICAgLCBtX2V4dGVu
dChyYW5nZS0+ZW5kUG9zaXRpb24oKSkKICAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCiAgICAg
LCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICwgbV9zdGF0ZShOT05F
KQotICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewogICAgIHZhbGlkYXRlKCk7CiB9CkBAIC0y
OTksOSArMzE0LDkgQEAgdm9pZCBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29udGVudAog
ICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgfHwgbV9zdGFydC5pc051bGwoKSB8fCBtX2VuZC5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSAqYmFzZVJvb3QgPSBtX2Jhc2Uubm9k
ZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgTm9kZSAqc3RhcnRSb290ID0gbV9zdGFy
dC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBOb2RlICplbmRSb290ID0gbV9l
bmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogYmFzZVJvb3QgPSBt
X2Jhc2Uubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogc3RhcnRSb290
ID0gbV9zdGFydC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBOb2RlKiBlbmRS
b290ID0gbV9lbmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgCiAgICAgTm9k
ZSogYmFzZUVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKG1fYmFzZS5u
b2RlKCkpOwogICAgIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24uaAkocmV2aXNpb24gMTU5OTEpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiwz
MCBAQAogI2lmbmRlZiBTZWxlY3Rpb25faAogI2RlZmluZSBTZWxlY3Rpb25faAogCi0jaW5jbHVk
ZSAiUG9zaXRpb24uaCIKLSNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJU
ZXh0R3JhbnVsYXJpdHkuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBQb3NpdGlvbjsKIAotY2xhc3MgU2VsZWN0aW9uCi17Citj
b25zdCBFQWZmaW5pdHkgU0VMX0RFRkFVTFRfQUZGSU5JVFkgPSBET1dOU1RSRUFNOworCitjbGFz
cyBTZWxlY3Rpb24gewogcHVibGljOgogICAgIGVudW0gRVN0YXRlIHsgTk9ORSwgQ0FSRVQsIFJB
TkdFIH07CiAgICAgZW51bSBFRGlyZWN0aW9uIHsgRk9SV0FSRCwgQkFDS1dBUkQsIFJJR0hULCBM
RUZUIH07Ci0jZGVmaW5lIFNFTF9ERUZBVUxUX0FGRklOSVRZIERPV05TVFJFQU0KIAogICAgIFNl
bGVjdGlvbigpOwotICAgIFNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmLCBFQWZmaW5pdHkpOwot
ICAgIFNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmLCBjb25zdCBQb3NpdGlvbiAmLCBFQWZmaW5p
dHkpOwotICAgIFNlbGVjdGlvbihjb25zdCBSYW5nZSAqLCBFQWZmaW5pdHkgPSBET1dOU1RSRUFN
KTsKKworICAgIFNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSk7CisgICAgU2Vs
ZWN0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHkpOworCisg
ICAgU2VsZWN0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5ID0gU0VMX0RFRkFVTFRfQUZGSU5J
VFkpOwogICAgIAorICAgIFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICBT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CisKICAgICBzdGF0aWMgU2VsZWN0aW9uIHNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2Rl
Kik7CiAKICAgICBFU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CkBAIC01
Myw4ICs1Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFmZmluaXR5KEVBZmZpbml0eSBhZmZp
bml0eSkgeyBtX2FmZmluaXR5ID0gYWZmaW5pdHk7IH0KICAgICBFQWZmaW5pdHkgYWZmaW5pdHko
KSBjb25zdCB7IHJldHVybiBtX2FmZmluaXR5OyB9CiAKLSAgICB2b2lkIHNldEJhc2UoUG9zaXRp
b24gYmFzZSkgeyBtX2Jhc2UgPSBiYXNlOyB9Ci0gICAgdm9pZCBzZXRFeHRlbnQoUG9zaXRpb24g
ZXh0ZW50KSB7IG1fZXh0ZW50ID0gZXh0ZW50OyB9CisgICAgdm9pZCBzZXRCYXNlKGNvbnN0IFBv
c2l0aW9uJiBiYXNlKSB7IG1fYmFzZSA9IGJhc2U7IH0KKyAgICB2b2lkIHNldEV4dGVudChjb25z
dCBQb3NpdGlvbiYgZXh0ZW50KSB7IG1fZXh0ZW50ID0gZXh0ZW50OyB9CiAgICAgUG9zaXRpb24g
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQogICAgIFBvc2l0aW9uIGV4dGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9CiAgICAgUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0OyB9CkBAIC0xMDMsMTIgKzEwNywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9iYXNlSXNGaXJzdDsgICAgICAgICAgICAgICAvLyB0cnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRo
ZSBleHRlbnQKIH07CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uICZh
LCBjb25zdCBTZWxlY3Rpb24gJmIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNlbGVj
dGlvbiYgYSwgY29uc3QgU2VsZWN0aW9uJiBiKQogewogICAgIHJldHVybiBhLnN0YXJ0KCkgPT0g
Yi5zdGFydCgpICYmIGEuZW5kKCkgPT0gYi5lbmQoKSAmJiBhLmFmZmluaXR5KCkgPT0gYi5hZmZp
bml0eSgpICYmIGEuZ3JhbnVsYXJpdHkoKSA9PSBiLmdyYW51bGFyaXR5KCk7CiB9CiAKLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2VsZWN0aW9uICZhLCBjb25zdCBTZWxlY3Rpb24gJmIp
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNlbGVjdGlvbiYgYSwgY29uc3QgU2VsZWN0
aW9uJiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2Vi
Q29yZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNldE5vZGVBdHRyaWJ1
dGVDb21tYW5kOjpTZXROb2RlQXR0cmlidXRlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIEVs
ZW1lbnQgKmVsZW1lbnQsIAorU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OlNldE5vZGVBdHRyaWJ1
dGVDb21tYW5kKEVsZW1lbnQqIGVsZW1lbnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29u
c3QgU3RyaW5nICZ2YWx1ZSkKLSAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9lbGVtZW50
KGVsZW1lbnQpLCBtX2F0dHJpYnV0ZShhdHRyaWJ1dGUpLCBtX3ZhbHVlKHZhbHVlKQorICAgIDog
RWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSksIG1fZWxlbWVudChlbGVtZW50KSwgbV9h
dHRyaWJ1dGUoYXR0cmlidXRlKSwgbV92YWx1ZSh2YWx1ZSkKIHsKICAgICBBU1NFUlQobV9lbGVt
ZW50KTsKICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29y
ZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMywyNSArMjMsMjIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgX19zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KLSNkZWZpbmUgX19zZXRf
bm9kZV9hdHRyaWJ1dGVfY29tbWFuZF9oX18KKyNpZm5kZWYgc2V0X25vZGVfYXR0cmlidXRlX2Nv
bW1hbmRfaF9fCisjZGVmaW5lIHNldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXwogCiAjaW5j
bHVkZSAiRWRpdENvbW1hbmQuaCIKLQogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTZXROb2RlQXR0cmlidXRlQ29tbWFuZCA6IHB1Ymxp
YyBFZGl0Q29tbWFuZAoteworY2xhc3MgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQgOiBwdWJsaWMg
RWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKERvY3Vt
ZW50ICosIEVsZW1lbnQgKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBT
dHJpbmcgJnZhbHVlKTsKLSAgICB2aXJ0dWFsIH5TZXROb2RlQXR0cmlidXRlQ29tbWFuZCgpIHsg
fQorICAgIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyAmdmFsdWUpOwogCiAgICAgdmlydHVhbCB2b2lk
IGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBFbGVtZW50
ICplbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CisgICAgRWxlbWVu
dCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQogICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlOyB9
CiAgICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIApAQCAt
NTQsNCArNTEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBfX3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kX2hfXworI2VuZGlmIC8vIHNldF9ub2Rl
X2F0dHJpYnV0ZV9jb21tYW5kX2hfXwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVu
dENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVt
ZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TcGxpdEVsZW1lbnRDb21tYW5kOjpTcGxpdEVsZW1lbnRDb21tYW5k
KERvY3VtZW50ICpkb2N1bWVudCwgRWxlbWVudCAqZWxlbWVudCwgTm9kZSAqYXRDaGlsZCkKLSAg
ICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV9lbGVtZW50MihlbGVtZW50KSwgbV9hdENoaWxk
KGF0Q2hpbGQpCitTcGxpdEVsZW1lbnRDb21tYW5kOjpTcGxpdEVsZW1lbnRDb21tYW5kKEVsZW1l
bnQqIGVsZW1lbnQsIE5vZGUqIGF0Q2hpbGQpCisgICAgOiBFZGl0Q29tbWFuZChlbGVtZW50LT5k
b2N1bWVudCgpKSwgbV9lbGVtZW50MihlbGVtZW50KSwgbV9hdENoaWxkKGF0Q2hpbGQpCiB7CiAg
ICAgQVNTRVJUKG1fZWxlbWVudDIpOwogICAgIEFTU0VSVChtX2F0Q2hpbGQpOwpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNv
cmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMywxOCArMjMsMTYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgX19zcGxpdF9lbGVtZW50X2NvbW1hbmRfaF9fCi0jZGVmaW5lIF9fc3BsaXRfZWxlbWVu
dF9jb21tYW5kX2hfXworI2lmbmRlZiBzcGxpdF9lbGVtZW50X2NvbW1hbmRfaF9fCisjZGVmaW5l
IHNwbGl0X2VsZW1lbnRfY29tbWFuZF9oX18KIAogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3BsaXRFbGVtZW50Q29tbWFuZCA6IHB1Ymxp
YyBFZGl0Q29tbWFuZAoteworY2xhc3MgU3BsaXRFbGVtZW50Q29tbWFuZCA6IHB1YmxpYyBFZGl0
Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgU3BsaXRFbGVtZW50Q29tbWFuZChEb2N1bWVudCAqLCBF
bGVtZW50ICplbGVtZW50LCBOb2RlICphdENoaWxkKTsKLSAgICB2aXJ0dWFsIH5TcGxpdEVsZW1l
bnRDb21tYW5kKCkgeyB9CisgICAgU3BsaXRFbGVtZW50Q29tbWFuZChFbGVtZW50KiwgTm9kZSog
c3BsaXRQb2ludENoaWxkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmly
dHVhbCB2b2lkIGRvVW5hcHBseSgpOwpAQCAtNDcsNCArNDUsNCBAQCBwcml2YXRlOgogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX3NwbGl0X2VsZW1lbnRfY29tbWFuZF9o
X18KKyNlbmRpZiAvLyBzcGxpdF9lbGVtZW50X2NvbW1hbmRfaF9fCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29y
ZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
OCArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNwbGl0VGV4dE5vZGVDb21tYW5k
OjpTcGxpdFRleHROb2RlQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIFRleHQgKnRleHQsIGlu
dCBvZmZzZXQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fdGV4dDIodGV4dCksIG1f
b2Zmc2V0KG9mZnNldCkKK1NwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2RlQ29tbWFu
ZChUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0KQorICAgIDogRWRpdENvbW1hbmQodGV4dC0+ZG9jdW1l
bnQoKSksIG1fdGV4dDIodGV4dCksIG1fb2Zmc2V0KG9mZnNldCkKIHsKICAgICBBU1NFUlQobV90
ZXh0Mik7CiAgICAgQVNTRVJUKG1fdGV4dDItPmxlbmd0aCgpID4gMCk7CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIzLDI3ICsyMywyNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBfX3NwbGl0X3RleHRfbm9kZV9jb21tYW5kX2hfXwotI2RlZmluZSBfX3NwbGl0X3RleHRf
bm9kZV9jb21tYW5kX2hfXworI2lmbmRlZiBzcGxpdF90ZXh0X25vZGVfY29tbWFuZF9oX18KKyNk
ZWZpbmUgc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJFZGl0Q29tbWFu
ZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgVGV4dDsKLX0KIAotbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgVGV4dDsKIAotY2xhc3MgU3BsaXRUZXh0Tm9kZUNvbW1hbmQg
OiBwdWJsaWMgRWRpdENvbW1hbmQKLXsKK2NsYXNzIFNwbGl0VGV4dE5vZGVDb21tYW5kIDogcHVi
bGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBTcGxpdFRleHROb2RlQ29tbWFuZChEb2N1
bWVudCAqLCBUZXh0ICosIGludCk7CisgICAgU3BsaXRUZXh0Tm9kZUNvbW1hbmQoVGV4dCosIGlu
dCBvZmZzZXQpOwogICAgIHZpcnR1YWwgflNwbGl0VGV4dE5vZGVDb21tYW5kKCkgeyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsK
IAotICAgIFRleHQgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX3RleHQyLmdldCgpOyB9CisgICAg
VGV4dCogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDIuZ2V0KCk7IH0KICAgICBpbnQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KIAogcHJpdmF0ZToKQEAgLTU0LDQgKzUx
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX19z
cGxpdF90ZXh0X25vZGVfY29tbWFuZF9oX18KKyNlbmRpZiAvLyBzcGxpdF90ZXh0X25vZGVfY29t
bWFuZF9oX18KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIFRleHQgKnRleHQsIGludCBv
ZmZzZXQpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fdGV4dCh0ZXh0
KSwgbV9vZmZzZXQob2Zmc2V0KQorU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFu
ZDo6U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChUZXh0KiB0ZXh0LCBpbnQg
b2Zmc2V0KQorICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQodGV4dC0+ZG9jdW1lbnQoKSksIG1f
dGV4dCh0ZXh0KSwgbV9vZmZzZXQob2Zmc2V0KQogewogICAgIEFTU0VSVChtX3RleHQpOwogICAg
IEFTU0VSVChtX3RleHQtPmxlbmd0aCgpID4gMCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgJKHJldmlz
aW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE4
ICsyMywxNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBfX3NwbGl0X3RleHRf
bm9kZV9jb250YWluaW5nX2VsZW1lbnRfY29tbWFuZF9oX18KLSNkZWZpbmUgX19zcGxpdF90ZXh0
X25vZGVfY29udGFpbmluZ19lbGVtZW50X2NvbW1hbmRfaF9fCisjaWZuZGVmIHNwbGl0X3RleHRf
bm9kZV9jb250YWluaW5nX2VsZW1lbnRfY29tbWFuZF9oX18KKyNkZWZpbmUgc3BsaXRfdGV4dF9u
b2RlX2NvbnRhaW5pbmdfZWxlbWVudF9jb21tYW5kX2hfXwogCiAjaW5jbHVkZSAiQ29tcG9zaXRl
RWRpdENvbW1hbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5k
Ci17CitjbGFzcyBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kIDogcHVibGlj
IENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBTcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnRDb21tYW5kKERvY3VtZW50ICosIFRleHQgKiwgaW50KTsKLSAgICB2aXJ0dWFs
IH5TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKCkgeyB9CisgICAgU3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChUZXh0KiwgaW50IG9mZnNldCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogCkBAIC00NSw0ICs0Myw0IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9fc3BsaXRfdGV4dF9ub2RlX2Nv
bnRhaW5pbmdfZWxlbWVudF9jb21tYW5kX2hfXworI2VuZGlmIC8vIHNwbGl0X3RleHRfbm9kZV9j
b250YWluaW5nX2VsZW1lbnRfY29tbWFuZF9oX18KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNiArNjEsMTUgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKERvYwogICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgCi0gICAgRWRpdENvbW1hbmRQdHIgbGFzdEVk
aXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOworICAgIEVkaXRDb21tYW5kKiBs
YXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKGlzT3Bl
bkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkpIHsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5kZWxldGVLZXlQ
cmVzc2VkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+
KGxhc3RFZGl0Q29tbWFuZCktPmRlbGV0ZUtleVByZXNzZWQoZ3JhbnVsYXJpdHkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFR5cGluZ0NvbW1hbmQgKnR5cGluZ0NvbW1hbmQg
PSBuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgRGVsZXRlS2V5LCAiIiwgZmFsc2UsIGdyYW51
bGFyaXR5KTsKKyAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gdHlwaW5nQ29tbWFuZCA9IG5ldyBU
eXBpbmdDb21tYW5kKGRvY3VtZW50LCBEZWxldGVLZXksICIiLCBmYWxzZSwgZ3JhbnVsYXJpdHkp
OwogICAgIHR5cGluZ0NvbW1hbmQtPnNldFNtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKTsKLSAgICBF
ZGl0Q29tbWFuZFB0ciBjbWQodHlwaW5nQ29tbWFuZCk7Ci0gICAgY21kLmFwcGx5KCk7CisgICAg
dHlwaW5nQ29tbWFuZC0+YXBwbHkoKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCAqZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUsIFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTgwLDE2ICs3OSwxNSBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgRnJhbWUgKmZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICAKLSAgICBFZGl0Q29tbWFuZFB0
ciBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21tYW5kKCk7CisgICAgRWRpdENv
bW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBp
ZiAoaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRDb21tYW5kKSkgewotICAgICAg
ICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kICo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmZvcndhcmREZWxldGVLZXlQcmVzc2Vk
KGdyYW51bGFyaXR5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFR5cGluZ0NvbW1h
bmQgKnR5cGluZ0NvbW1hbmQgPSBuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgRm9yd2FyZERl
bGV0ZUtleSwgIiIsIGZhbHNlLCBncmFudWxhcml0eSk7CisgICAgUmVmUHRyPFR5cGluZ0NvbW1h
bmQ+IHR5cGluZ0NvbW1hbmQgPSBuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgRm9yd2FyZERl
bGV0ZUtleSwgIiIsIGZhbHNlLCBncmFudWxhcml0eSk7CiAgICAgdHlwaW5nQ29tbWFuZC0+c2V0
U21hcnREZWxldGUoc21hcnREZWxldGUpOwotICAgIEVkaXRDb21tYW5kUHRyIGNtZCh0eXBpbmdD
b21tYW5kKTsKLSAgICBjbWQuYXBwbHkoKTsKKyAgICB0eXBpbmdDb21tYW5kLT5hcHBseSgpOwog
fQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQgKmRvY3VtZW50LCBj
b25zdCBTdHJpbmcgJnRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KQpAQCAtMTEzLDE0ICsx
MTEsMTMgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50IAogICAgIGlm
IChuZXdUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEVkaXRDb21t
YW5kUHRyIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1hbmQoKTsKKyAgICBF
ZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOwog
ICAgIGlmIChpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQpKSB7Ci0g
ICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgp
KS0+aW5zZXJ0VGV4dChuZXdUZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOworICAgICAgICBzdGF0
aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKS0+aW5zZXJ0VGV4dChuZXdU
ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
RWRpdENvbW1hbmRQdHIgY21kKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBJbnNlcnRUZXh0
LCBuZXdUZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpKTsKLSAgICBjbWQuYXBwbHkoKTsKKyAgICBh
cHBseUNvbW1hbmQobmV3IFR5cGluZ0NvbW1hbmQoZG9jdW1lbnQsIEluc2VydFRleHQsIG5ld1Rl
eHQsIHNlbGVjdEluc2VydGVkVGV4dCkpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dExpbmVCcmVhayhEb2N1bWVudCAqZG9jdW1lbnQpCkBAIC0xMzAsMTQgKzEyNywxMyBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1CiAgICAgRnJhbWUgKmZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICAKLSAgICBFZGl0Q29t
bWFuZFB0ciBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21tYW5kKCk7CisgICAg
RWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1hbmQoKTsK
ICAgICBpZiAoaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRDb21tYW5kKSkgewot
ICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kICo+KGxhc3RFZGl0Q29tbWFuZC5nZXQo
KSktPmluc2VydExpbmVCcmVhaygpOworICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5k
Kj4obGFzdEVkaXRDb21tYW5kKS0+aW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFR5cGluZ0NvbW1hbmQoZG9jdW1l
bnQsIEluc2VydExpbmVCcmVhaykpOwotICAgIGNtZC5hcHBseSgpOworICAgIGFwcGx5Q29tbWFu
ZChuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgSW5zZXJ0TGluZUJyZWFrKSk7CiB9CiAKIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KERvY3VtZW50ICpkb2N1bWVudCkKQEAgLTE0NywxNCArMTQzLDEzIEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXIKICAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIAotICAgIEVkaXRDb21tYW5kUHRyIGxh
c3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5sYXN0RWRpdENvbW1hbmQoKTsKKyAgICBFZGl0Q29tbWFu
ZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGlmIChp
c09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQpKSB7Ci0gICAgICAgIHN0
YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgpKS0+aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7CisgICAgICAgIHN0YXRpY19jYXN0
PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQpLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVkaXRD
b21tYW5kUHRyIGNtZChuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSk7Ci0gICAgY21kLmFwcGx5KCk7CisgICAgYXBwbHlD
b21tYW5kKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnQpKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQgKmRvY3VtZW50KQpAQCAtMTY0LDI2ICsxNTksMjQgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcgogICAgIEZyYW1lICpmcmFt
ZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgCi0gICAgRWRp
dENvbW1hbmRQdHIgbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOwor
ICAgIEVkaXRDb21tYW5kKiBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+bGFzdEVkaXRDb21tYW5k
KCk7CiAgICAgaWYgKGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkp
IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1hbmQu
Z2V0KCkpLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmluc2VydFBhcmFncmFwaFNlcGFyYXRv
cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRWRpdENvbW1hbmRQdHIgY21kKG5l
dyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpKTsKLSAg
ICBjbWQuYXBwbHkoKTsKKyAgICBhcHBseUNvbW1hbmQobmV3IFR5cGluZ0NvbW1hbmQoZG9jdW1l
bnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvcikpOwogfQogCi1ib29sIFR5cGluZ0NvbW1hbmQ6
OmlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGNvbnN0IEVkaXRDb21tYW5kUHRyICZjbWQpCiti
b29sIFR5cGluZ0NvbW1hbmQ6OmlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGNvbnN0IEVkaXRD
b21tYW5kKiBjbWQpCiB7Ci0gICAgcmV0dXJuIGNtZC5pc1R5cGluZ0NvbW1hbmQoKSAmJgotICAg
ICAgICBzdGF0aWNfY2FzdDxjb25zdCBUeXBpbmdDb21tYW5kICo+KGNtZC5nZXQoKSktPm9wZW5G
b3JNb3JlVHlwaW5nKCk7CisgICAgcmV0dXJuIGNtZCAmJiBjbWQtPmlzVHlwaW5nQ29tbWFuZCgp
ICYmIHN0YXRpY19jYXN0PGNvbnN0IFR5cGluZ0NvbW1hbmQqPihjbWQpLT5pc09wZW5Gb3JNb3Jl
VHlwaW5nKCk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoY29uc3QgRWRp
dENvbW1hbmRQdHIgJmNtZCkKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmcoRWRpdENv
bW1hbmQqIGNtZCkKIHsKICAgICBpZiAoaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQoY21kKSkK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihjbWQuZ2V0KCkpLT5jbG9zZVR5
cGluZygpOworICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4oY21kKS0+Y2xvc2VU
eXBpbmcoKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkb0FwcGx5KCkKQEAgLTI0MywxMCAr
MjM2LDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbQogICAgIC8v
IFRoZSBmcmFtZSB3aWxsIGdldCB0b2xkIGluIHRoZSBzYW1lIHdheSBhcyBhbGwgb3RoZXIgY29t
bWFuZHMuCiAgICAgLy8gQnV0IHNpbmNlIHRoaXMgY29tbWFuZCBzdGF5cyBvcGVuIGFuZCBpcyB1
c2VkIGZvciBhZGRpdGlvbmFsIHR5cGluZywgCiAgICAgLy8gd2UgbmVlZCB0byB0ZWxsIHRoZSBm
cmFtZSBoZXJlIGFzIG90aGVyIGNvbW1hbmRzIGFyZSBhZGRlZC4KLSAgICBpZiAobV9hcHBseUVk
aXRpbmcpIHsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwotICAgICAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5hcHBsaWVkRWRpdGluZyhjbWQpOwotICAgIH0KKyAgICBpZiAobV9h
cHBseUVkaXRpbmcpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmFwcGxpZWRFZGl0aW5n
KHRoaXMpOwogICAgIG1fYXBwbHlFZGl0aW5nID0gdHJ1ZTsKIH0KIApAQCAtMjc3LDQ2ICsyNjgs
MzUgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGNvbnN0IFN0cgogCiB2b2lkIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCkKIHsKLSAgICAvLyBGSVhNRTogSW1wcm92ZSB0
eXBpbmcgc3R5bGUuCi0gICAgLy8gU2VlIHRoaXMgYnVnOiA8cmRhcjovL3Byb2JsZW0vMzc2OTg5
OT4gSW1wbGVtZW50YXRpb24gb2YgdHlwaW5nIHN0eWxlIG5lZWRzIGltcHJvdmVtZW50Ci0gICAg
aWYgKGRvY3VtZW50KCktPmZyYW1lKCktPnR5cGluZ1N0eWxlKCkgfHwgbV9jbWRzLmNvdW50KCkg
PT0gMCkgewotICAgICAgICBJbnNlcnRUZXh0Q29tbWFuZCAqaW1wbCA9IG5ldyBJbnNlcnRUZXh0
Q29tbWFuZChkb2N1bWVudCgpKTsKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKGltcGwpOwot
ICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwotICAgICAgICBpbXBsLT5pbnB1
dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEVkaXRD
b21tYW5kUHRyIGxhc3RDb21tYW5kID0gbV9jbWRzLmxhc3QoKTsKLSAgICAgICAgaWYgKGxhc3RD
b21tYW5kLmlzSW5zZXJ0VGV4dENvbW1hbmQoKSkgewotICAgICAgICAgICAgSW5zZXJ0VGV4dENv
bW1hbmQgKmltcGwgPSBzdGF0aWNfY2FzdDxJbnNlcnRUZXh0Q29tbWFuZCAqPihsYXN0Q29tbWFu
ZC5nZXQoKSk7Ci0gICAgICAgICAgICBpbXBsLT5pbnB1dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRl
eHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW5zZXJ0VGV4dENvbW1hbmQgKmlt
cGwgPSBuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBFZGl0
Q29tbWFuZFB0ciBjbWQoaW1wbCk7Ci0gICAgICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShjbWQpOwotICAgICAgICAgICAgaW1wbC0+aW5wdXQodGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0
KTsKLSAgICAgICAgfQorICAgIFJlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4gY29tbWFuZDsKKyAg
ICBpZiAoIWRvY3VtZW50KCktPmZyYW1lKCktPnR5cGluZ1N0eWxlKCkgJiYgIW1fY29tbWFuZHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIEVkaXRDb21tYW5kKiBsYXN0Q29tbWFuZCA9IG1fY29tbWFu
ZHMubGFzdCgpLmdldCgpOworICAgICAgICBpZiAobGFzdENvbW1hbmQtPmlzSW5zZXJ0VGV4dENv
bW1hbmQoKSkKKyAgICAgICAgICAgIGNvbW1hbmQgPSBzdGF0aWNfY2FzdDxJbnNlcnRUZXh0Q29t
bWFuZCo+KGxhc3RDb21tYW5kKTsKKyAgICB9CisgICAgaWYgKCFjb21tYW5kKSB7CisgICAgICAg
IGNvbW1hbmQgPSBuZXcgSW5zZXJ0VGV4dENvbW1hbmQoZG9jdW1lbnQoKSk7CisgICAgICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOwogICAgIH0KKyAgICBjb21tYW5kLT5pbnB1
dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFu
ZCgpOwogfQogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhaygpCiB7Ci0gICAg
RWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnRMaW5lQnJlYWtDb21tYW5kKGRvY3VtZW50KCkp
KTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOworICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKG5ldyBJbnNlcnRMaW5lQnJlYWtDb21tYW5kKGRvY3VtZW50KCkpKTsKICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoKTsKIH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogewotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVudCgpKSk7Ci0gICAgYXBwbHlDb21t
YW5kVG9Db21wb3NpdGUoY21kKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVudCgpKSk7CiAgICAgdHlwaW5nQWRk
ZWRUb09wZW5Db21tYW5kKCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCkKIHsKLSAgICBFZGl0Q29tbWFuZFB0ciBjbWQo
bmV3IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQoZG9jdW1lbnQoKSkpOwotICAgIGFwcGx5Q29tbWFu
ZFRvQ29tcG9zaXRlKGNtZCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IEJyZWFr
QmxvY2txdW90ZUNvbW1hbmQoZG9jdW1lbnQoKSkpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29t
bWFuZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgJKHJldmlzaW9uIDE1OTkx
KQorKysgV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDIxICs0MSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIEluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudAogICAgIH07CiAKLSAgICBUeXBpbmdD
b21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQsIGNvbnN0IFN0cmluZyAm
dGV4dCA9ICIiLCBib29sIHNlbGVjdEluc2VydGVkVGV4dCA9IGZhbHNlLCBUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgVHlwaW5nQ29tbWFu
ZChEb2N1bWVudCosIEVUeXBpbmdDb21tYW5kLCBjb25zdCBTdHJpbmcmIHRleHQgPSAiIiwgYm9v
bCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSwgVGV4dEdyYW51bGFyaXR5ID0gQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogCi0gICAgc3RhdGljIHZvaWQgZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVu
dCAqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICBzdGF0aWMgdm9pZCBmb3J3YXJkRGVsZXRl
S2V5UHJlc3NlZChEb2N1bWVudCAqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICBzdGF0aWMg
dm9pZCBpbnNlcnRUZXh0KERvY3VtZW50ICosIGNvbnN0IFN0cmluZyAmLCBib29sIHNlbGVjdElu
c2VydGVkVGV4dCA9IGZhbHNlKTsKLSAgICBzdGF0aWMgdm9pZCBpbnNlcnRMaW5lQnJlYWsoRG9j
dW1lbnQgKik7Ci0gICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3Vt
ZW50ICopOwotICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVk
Q29udGVudChEb2N1bWVudCAqKTsKLSAgICBzdGF0aWMgYm9vbCBpc09wZW5Gb3JNb3JlVHlwaW5n
Q29tbWFuZChjb25zdCBFZGl0Q29tbWFuZFB0ciAmKTsKLSAgICBzdGF0aWMgdm9pZCBjbG9zZVR5
cGluZyhjb25zdCBFZGl0Q29tbWFuZFB0ciAmKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVLZXlQ
cmVzc2VkKERvY3VtZW50KiwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBUZXh0R3JhbnVsYXJp
dHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgc3RhdGljIHZvaWQgZm9yd2FyZERlbGV0
ZUtleVByZXNzZWQoRG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFu
dWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRU
ZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBm
YWxzZSk7CisgICAgc3RhdGljIHZvaWQgaW5zZXJ0TGluZUJyZWFrKERvY3VtZW50Kik7CisgICAg
c3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50Kik7CisgICAgc3Rh
dGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50
Kik7CisgICAgc3RhdGljIGJvb2wgaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQoY29uc3QgRWRp
dENvbW1hbmQqKTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZVR5cGluZyhFZGl0Q29tbWFuZCopOwog
ICAgIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCBFZGl0QWN0aW9u
IGVkaXRpbmdBY3Rpb24oKSBjb25zdDsKIAotICAgIGJvb2wgb3BlbkZvck1vcmVUeXBpbmcoKSBj
b25zdCB7IHJldHVybiBtX29wZW5Gb3JNb3JlVHlwaW5nOyB9CisgICAgYm9vbCBpc09wZW5Gb3JN
b3JlVHlwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRm9yTW9yZVR5cGluZzsgfQogICAgIHZv
aWQgY2xvc2VUeXBpbmcoKSB7IG1fb3BlbkZvck1vcmVUeXBpbmcgPSBmYWxzZTsgfQogCiAgICAg
dm9pZCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRl
eHQpOwpAQCAtODcsNCArODcsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBfX3R5cGluZ19jb21tYW5kX2hfXworI2VuZGlmIC8vIHR5cGluZ19jb21t
YW5kX2hfXwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5nL1dy
YXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDgg
KzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XcmFwQ29udGVudHNJbkR1bW15U3Bh
bkNvbW1hbmQ6OldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZChEb2N1bWVudCAqZG9jdW1l
bnQsIEVsZW1lbnQgKmVsZW1lbnQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fZWxl
bWVudChlbGVtZW50KQorV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpXcmFwQ29udGVu
dHNJbkR1bW15U3BhbkNvbW1hbmQoRWxlbWVudCogZWxlbWVudCkKKyAgICA6IEVkaXRDb21tYW5k
KGVsZW1lbnQtPmRvY3VtZW50KCkpLCBtX2VsZW1lbnQoZWxlbWVudCkKIHsKICAgICBBU1NFUlQo
bV9lbGVtZW50KTsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15
U3BhbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvV3JhcENvbnRlbnRz
SW5EdW1teVNwYW5Db21tYW5kLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9lZGl0aW5n
L1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMTggKzIzLDE2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIF9fd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmRfaF9fCi0jZGVmaW5l
IF9fd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1hbmRfaF9fCisjaWZuZGVmIHdyYXBf
Y29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kX2hfXworI2RlZmluZSB3cmFwX2NvbnRlbnRz
X2luX2R1bW15X3NwYW5fY29tbWFuZF9oX18KIAogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21t
YW5kIDogcHVibGljIEVkaXRDb21tYW5kCi17CitjbGFzcyBXcmFwQ29udGVudHNJbkR1bW15U3Bh
bkNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFdyYXBDb250ZW50
c0luRHVtbXlTcGFuQ29tbWFuZChEb2N1bWVudCAqLCBFbGVtZW50ICopOwotICAgIHZpcnR1YWwg
fldyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZCgpIHsgfQorICAgIFdyYXBDb250ZW50c0lu
RHVtbXlTcGFuQ29tbWFuZChFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgp
OwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKQEAgLTQ2LDQgKzQ0LDQgQEAgcHJpdmF0
ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gX193cmFwX2NvbnRlbnRz
X2luX2R1bW15X3NwYW5fY29tbWFuZF9oX18KKyNlbmRpZiAvLyB3cmFwX2NvbnRlbnRzX2luX2R1
bW15X3NwYW5fY29tbWFuZF9oX18KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZpc2lvbiAx
NTk5MSkKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIGNsYXNzIFBvc2l0aW9uOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgVmlz
aWJsZVBvc2l0aW9uOwogCi1jb25zdCB1bnNpZ25lZCBzaG9ydCBOT05fQlJFQUtJTkdfU1BBQ0Ug
PSAweGEwOworY29uc3QgVUNoYXIgTk9OX0JSRUFLSU5HX1NQQUNFID0gMHhhMDsKIAogUG9zaXRp
b24gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGNvbnN0IFBvc2l0aW9uJik7CiBQb3NpdGlvbiBy
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5j
cHAJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIGJvb2wgRnJhbWU6OmRpZE9wZW5VUkwoY29uc3QgS1VS
TCYgdXJsKQogICBjYW5jZWxSZWRpcmVjdGlvbigpOwogICAKICAgLy8gY2xlYXIgbGFzdCBlZGl0
IGNvbW1hbmQKLSAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBFZGl0Q29tbWFuZFB0cigpOworICBk
LT5tX2xhc3RFZGl0Q29tbWFuZCA9IDA7CiAgIAogICBjbG9zZVVSTCgpOwogCkBAIC0xMjY3LDkg
KzEyNjcsNyBAQCB2b2lkIEZyYW1lOjpzZXRGb2N1c05vZGVJZk5lZWRlZCgpCiAgICAgaWYgKCFk
b2N1bWVudCgpIHx8IGQtPm1fc2VsZWN0aW9uLmlzTm9uZSgpIHx8ICFkLT5tX2lzQWN0aXZlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlICpzdGFydE5vZGUgPSBkLT5tX3NlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKTsKLSAgICBOb2RlICp0YXJnZXQgPSBzdGFydE5vZGUgPyBzdGFydE5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7Ci0gICAgCisgICAgTm9kZSogdGFyZ2V0ID0gZC0+
bV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmICh0YXJnZXQpIHsKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRhcmdldC0+cmVuZGVyZXIoKTsKIApAQCAt
MTk1OSw5ICsxOTU3LDcgQEAgdm9pZCBGcmFtZTo6c2VsZWN0QWxsKCkKICAgICBpZiAoIWQtPm1f
ZG9jKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTm9kZSAqc3RhcnROb2RlID0gZC0+bV9z
ZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7Ci0gICAgTm9kZSAqcm9vdCA9IHN0YXJ0Tm9kZSAmJiBz
dGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPyBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IGQtPm1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAKKyAgICBOb2RlKiBy
b290ID0gZC0+bV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSA/IGQtPm1fc2VsZWN0aW9u
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IGQtPm1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKICAg
ICBzZWxlY3RDb250ZW50c09mTm9kZShyb290KTsKICAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBh
cmVudElmRnVsbHlTZWxlY3RlZCgpOwogICAgIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFu
Z2UodHJ1ZSk7CkBAIC0yMDI5LDc2ICsyMDI1LDc3IEBAIHZvaWQgRnJhbWU6OnRleHREaWRDaGFu
Z2VJblRleHRBcmVhKEVsZW0KIHsKIH0KIAotRWRpdENvbW1hbmRQdHIgRnJhbWU6Omxhc3RFZGl0
Q29tbWFuZCgpCitFZGl0Q29tbWFuZCogRnJhbWU6Omxhc3RFZGl0Q29tbWFuZCgpCiB7Ci0gICAg
cmV0dXJuIGQtPm1fbGFzdEVkaXRDb21tYW5kOworICAgIHJldHVybiBkLT5tX2xhc3RFZGl0Q29t
bWFuZC5nZXQoKTsKIH0KIAotdm9pZCBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVu
dChOb2RlKiByb290KQorc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2Vk
RXZlbnRzKGNvbnN0IEVkaXRDb21tYW5kJiBjb21tYW5kKQogewotICAgIGlmICghcm9vdCkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBF
dmVudFRhcmdldE5vZGVDYXN0KHJvb3QpLT5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChraHRtbEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgZWMsIHRydWUpOworICAg
ICBFbGVtZW50KiBzdGFydFJvb3QgPSBjb21tYW5kLnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVu
dCgpOworICAgICBFbGVtZW50KiBlbmRSb290ID0gY29tbWFuZC5lbmRpbmdSb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgIGlmIChzdGFydFJvb3QpCisg
ICAgICAgICBzdGFydFJvb3QtPmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGtodG1sRWRpdGFibGVD
b250ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBlYywgdHJ1ZSk7CisgICAgIGlmIChl
bmRSb290ICYmIGVuZFJvb3QgIT0gc3RhcnRSb290KQorICAgICAgICAgZW5kUm9vdC0+ZGlzcGF0
Y2hFdmVudChuZXcgRXZlbnQoa2h0bWxFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNl
LCBmYWxzZSksIGVjLCB0cnVlKTsKIH0KIAotdm9pZCBGcmFtZTo6YXBwbGllZEVkaXRpbmcoRWRp
dENvbW1hbmRQdHImIGNtZCkKK3ZvaWQgRnJhbWU6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8
RWRpdENvbW1hbmQ+IGNtZCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQuZW5k
aW5nU2VsZWN0aW9uKCkpOworICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50
cygqY21kKTsKKyAKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQtPmVuZGluZ1NlbGVj
dGlvbigpKTsKICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpCiAgICAgICAgIHNl
dFNlbGVjdGlvbihzZWwsIGZhbHNlKTsKICAgICAKLSAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVu
dENoYW5nZWRFdmVudCghc2VsZWN0aW9uKCkuaXNOb25lKCkgPyBzZWxlY3Rpb24oKS5zdGFydCgp
Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogMCk7Ci0KICAgICAvLyBOb3cgc2V0IHRo
ZSB0eXBpbmcgc3R5bGUgZnJvbSB0aGUgY29tbWFuZC4gQ2xlYXIgaXQgd2hlbiBkb25lLgogICAg
IC8vIFRoaXMgaGVscHMgbWFrZSB0aGUgY2FzZSB3b3JrIHdoZXJlIHlvdSBjb21wbGV0ZWx5IGRl
bGV0ZSBhIHBpZWNlCiAgICAgLy8gb2Ygc3R5bGVkIHRleHQgYW5kIHRoZW4gdHlwZSBhIGNoYXJh
Y3RlciBpbW1lZGlhdGVseSBhZnRlci4KICAgICAvLyBUaGF0IG5ldyBjaGFyYWN0ZXIgbmVlZHMg
dG8gdGFrZSBvbiB0aGUgc3R5bGUgb2YgdGhlIGp1c3QtZGVsZXRlZCB0ZXh0LgogICAgIC8vIEZJ
WE1FOiBJbXByb3ZlIHR5cGluZyBzdHlsZS4KICAgICAvLyBTZWUgdGhpcyBidWc6IDxyZGFyOi8v
cHJvYmxlbS8zNzY5ODk5PiBJbXBsZW1lbnRhdGlvbiBvZiB0eXBpbmcgc3R5bGUgbmVlZHMgaW1w
cm92ZW1lbnQKLSAgICBpZiAoY21kLnR5cGluZ1N0eWxlKCkpIHsKLSAgICAgICAgc2V0VHlwaW5n
U3R5bGUoY21kLnR5cGluZ1N0eWxlKCkpOwotICAgICAgICBjbWQuc2V0VHlwaW5nU3R5bGUoMCk7
CisgICAgaWYgKGNtZC0+dHlwaW5nU3R5bGUoKSkgeworICAgICAgICBzZXRUeXBpbmdTdHlsZShj
bWQtPnR5cGluZ1N0eWxlKCkpOworICAgICAgICBjbWQtPnNldFR5cGluZ1N0eWxlKDApOwogICAg
IH0KIAogICAgIC8vIENvbW1hbmQgd2lsbCBiZSBlcXVhbCB0byBsYXN0IGVkaXQgY29tbWFuZCBv
bmx5IGluIHRoZSBjYXNlIG9mIHR5cGluZwotICAgIGlmIChkLT5tX2xhc3RFZGl0Q29tbWFuZCA9
PSBjbWQpIHsKLSAgICAgICAgYXNzZXJ0KGNtZC5pc1R5cGluZ0NvbW1hbmQoKSk7Ci0gICAgfQor
ICAgIGlmIChkLT5tX2xhc3RFZGl0Q29tbWFuZCA9PSBjbWQpCisgICAgICAgIGFzc2VydChjbWQt
PmlzVHlwaW5nQ29tbWFuZCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gT25seSByZWdpc3Rl
ciBhIG5ldyB1bmRvIGNvbW1hbmQgaWYgdGhlIGNvbW1hbmQgcGFzc2VkIGluIGlzCiAgICAgICAg
IC8vIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IGNvbW1hbmQKKyAgICAgICAgZC0+bV9sYXN0RWRp
dENvbW1hbmQgPSBjbWQuZ2V0KCk7CiAgICAgICAgIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oY21k
KTsKLSAgICAgICAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBjbWQ7CiAgICAgfQogICAgIHJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cygpOwogfQogCi12b2lkIEZyYW1lOjp1bmFwcGxpZWRFZGl0aW5n
KEVkaXRDb21tYW5kUHRyJiBjbWQpCit2b2lkIEZyYW1lOjp1bmFwcGxpZWRFZGl0aW5nKFBhc3NS
ZWZQdHI8RWRpdENvbW1hbmQ+IGNtZCkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChj
bWQuc3RhcnRpbmdTZWxlY3Rpb24oKSk7CisgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnRzKCpjbWQpOworCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwoY21kLT5zdGFy
dGluZ1NlbGVjdGlvbigpKTsKICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpCiAg
ICAgICAgIHNldFNlbGVjdGlvbihzZWwsIHRydWUpOwotICAgIAotICAgIGRpc3BhdGNoRWRpdGFi
bGVDb250ZW50Q2hhbmdlZEV2ZW50KCFzZWxlY3Rpb24oKS5pc05vbmUoKSA/IHNlbGVjdGlvbigp
LnN0YXJ0KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwKTsKICAgICAgICAgCisg
ICAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSAwOwogICAgIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8o
Y21kKTsKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKLSAgICBkLT5tX2xhc3RFZGl0
Q29tbWFuZCA9IEVkaXRDb21tYW5kUHRyOjplbXB0eUNvbW1hbmQoKTsKIH0KIAotdm9pZCBGcmFt
ZTo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciYgY21kKQordm9pZCBGcmFtZTo6cmVh
cHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiB7Ci0gICAgU2VsZWN0
aW9uQ29udHJvbGxlciBzZWwoY21kLmVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBkaXNwYXRjaEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoKmNtZCk7CisKKyAgICBTZWxlY3Rpb25Db250cm9s
bGVyIHNlbChjbWQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkpOwogICAgIGlmIChzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oc2VsKSkKICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCwgdHJ1ZSk7Ci0gICAgCi0g
ICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQoIXNlbGVjdGlvbigpLmlzTm9u
ZSgpID8gc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6
IDApOwogICAgICAgICAKKyAgICBkLT5tX2xhc3RFZGl0Q29tbWFuZCA9IDA7CiAgICAgcmVnaXN0
ZXJDb21tYW5kRm9yVW5kbyhjbWQpOwogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwot
ICAgIGQtPm1fbGFzdEVkaXRDb21tYW5kID0gRWRpdENvbW1hbmRQdHI6OmVtcHR5Q29tbWFuZCgp
OwogfQogCiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqRnJhbWU6OnR5cGluZ1N0eWxlKCkg
Y29uc3QKQEAgLTIyMjAsMTAgKzIyMTcsOCBAQCB2b2lkIEZyYW1lOjpjb21wdXRlQW5kU2V0VHlw
aW5nU3R5bGUoQ1NTCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxlcywgc3Vic3RyYWN0aW5nIHRo
ZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IGJsb2NrU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNvcHlCbG9ja1Byb3BlcnRpZXMo
KTsKICAgICBibG9ja1N0eWxlLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgaWYgKGRv
Y3VtZW50KCkgJiYgYmxvY2tTdHlsZS0+bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIEVkaXRDb21t
YW5kUHRyIGNtZChuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQoKSwgYmxvY2tTdHlsZS5n
ZXQoKSwgZWRpdGluZ0FjdGlvbikpOwotICAgICAgICBjbWQuYXBwbHkoKTsKLSAgICB9CisgICAg
aWYgKGRvY3VtZW50KCkgJiYgYmxvY2tTdHlsZS0+bGVuZ3RoKCkgPiAwKQorICAgICAgICBhcHBs
eUNvbW1hbmQobmV3IEFwcGx5U3R5bGVDb21tYW5kKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0
KCksIGVkaXRpbmdBY3Rpb24pKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHls
ZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgogICAgIGQtPm1fdHlwaW5nU3R5bGUgPSBtdXRhYmxlU3R5
bGUucmVsZWFzZSgpOwpAQCAtMjI0MCwxMCArMjIzNSw4IEBAIHZvaWQgRnJhbWU6OmFwcGx5U3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKLSAgICAgICAgICAgIGlmIChkb2N1bWVudCgpICYm
IHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBBcHBseVN0
eWxlQ29tbWFuZChkb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOwotICAgICAgICAg
ICAgICAgIGNtZC5hcHBseSgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvY3Vt
ZW50KCkgJiYgc3R5bGUpCisgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKG5ldyBBcHBseVN0
eWxlQ29tbWFuZChkb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMjI1NiwxMCArMjI0OSw4IEBAIHZvaWQgRnJhbWU6OmFw
cGx5UGFyYWdyYXBoU3R5bGUoQ1NTU3R5bGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFNlbGVjdGlvbjo6Q0FSRVQ6CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKLSAg
ICAgICAgICAgIGlmIChkb2N1bWVudCgpICYmIHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgRWRp
dENvbW1hbmRQdHIgY21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCgpLCBzdHlsZSwg
ZWRpdGluZ0FjdGlvbiwgQXBwbHlTdHlsZUNvbW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKSk7
Ci0gICAgICAgICAgICAgICAgY21kLmFwcGx5KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZG9jdW1lbnQoKSAmJiBzdHlsZSkKKyAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQo
bmV3IEFwcGx5U3R5bGVDb21tYW5kKGRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBB
cHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VCbG9ja1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUvcGFnZS9G
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIERyYXdD
b250ZW50c0V2ZW50OwogY2xhc3MgRE9NV2luZG93OwotY2xhc3MgRWRpdENvbW1hbmRQdHI7Citj
bGFzcyBFZGl0Q29tbWFuZDsKIGNsYXNzIEZyYW1lUHJpdmF0ZTsKIGNsYXNzIEZyYW1lVHJlZTsK
IGNsYXNzIEtKU1Byb3h5OwpAQCAtNDIwLDIyICs0MjAsMjIgQEAgcHVibGljOgogICAvKioKICAg
ICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgZWRpdCBjb21tYW5kIGFwcGxpZWQuCiAgICAqLwot
ICBFZGl0Q29tbWFuZFB0ciBsYXN0RWRpdENvbW1hbmQoKTsKKyAgRWRpdENvbW1hbmQqIGxhc3RF
ZGl0Q29tbWFuZCgpOwogCiAgIC8qKgogICAgKiBDYWxsZWQgd2hlbiBlZGl0aW5nIGhhcyBiZWVu
IGFwcGxpZWQuCiAgICAqLwotICB2b2lkIGFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kUHRyJik7
CisgIHZvaWQgYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogCiAgIC8q
KgogICAgKiBDYWxsZWQgd2hlbiBlZGl0aW5nIGhhcyBiZWVuIHVuYXBwbGllZC4KICAgICovCi0g
IHZvaWQgdW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciYpOworICB2b2lkIHVuYXBwbGll
ZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogCiAgIC8qKgogICAgKiBDYWxsZWQg
d2hlbiBlZGl0aW5nIGhhcyBiZWVuIHJlYXBwbGllZC4KICAgICovCi0gIHZvaWQgcmVhcHBsaWVk
RWRpdGluZyhFZGl0Q29tbWFuZFB0ciYpOworICB2b2lkIHJlYXBwbGllZEVkaXRpbmcoUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZD4pOwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSB0eXBpbmcgc3R5
bGUgZm9yIHRoZSBkb2N1bWVudC4KQEAgLTU1Miw4ICs1NTIsOCBAQCBwdWJsaWM6CiAgIHZpcnR1
YWwgdm9pZCB1bmZvY3VzV2luZG93KCkgPSAwOwogICB2aXJ0dWFsIHZvaWQgY3JlYXRlRW1wdHlE
b2N1bWVudCgpID0gMDsKICAgdmlydHVhbCBSYW5nZSogbWFya2VkVGV4dFJhbmdlKCkgY29uc3Qg
PSAwOwotICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjb25zdCBFZGl0Q29t
bWFuZFB0ciYpID0gMDsKLSAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oY29u
c3QgRWRpdENvbW1hbmRQdHImKSA9IDA7CisgIHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRG
b3JVbmRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KSA9IDA7CisgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KSA9IDA7CiAgIHZpcnR1
YWwgdm9pZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpID0gMDsKICAgdmlydHVhbCB2b2lkIGlz
c3VlVW5kb0NvbW1hbmQoKSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBpc3N1ZVJlZG9Db21tYW5kKCkg
PSAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9iQ2xlYXJlZCA6IDE7CiAgICAgICAgIGJv
b2wgbV9pc0FjdGl2ZSA6IDE7CiAKLSAgICAgICAgRWRpdENvbW1hbmRQdHIgbV9sYXN0RWRpdENv
bW1hbmQ7CisgICAgICAgIFJlZlB0cjxFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENvbW1hbmQ7CiAg
ICAgICAgIGludCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKICAgICAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3R5cGluZ1N0eWxlOwogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZyYW1lR2RrLmgJKHJldmlzaW9uIDE1OTkxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvRnJhbWVHZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRPYmplY3RJbnN0YW5j
ZUZvcldpZGdldChXaWRnZXQqKTsKICAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
KiBnZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckNvbW1hbmRGb3JVbmRvKGNvbnN0IEVkaXRDb21tYW5kUHRyJik7Ci0gICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPEVkaXRD
b21tYW5kPik7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZD4pOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhclVuZG9SZWRvT3BlcmF0
aW9ucygpOwogICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVVuZG9Db21tYW5kKCk7CiAgICAgdmlydHVh
bCB2b2lkIGlzc3VlUmVkb0NvbW1hbmQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMTU5OTEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyAr
MTc4LDcgQEAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRPYgogS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lR2RrOjpnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0KFdp
ZGdldCAqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29sIEZyYW1lR2RrOjpj
YW5SZWRvKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogYm9vbCBGcmFt
ZUdkazo6Y2FuVW5kbygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZv
aWQgRnJhbWVHZGs6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oV2ViQ29yZTo6RWRpdENvbW1hbmRQ
dHIgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgRnJhbWVHZGs6OnJlZ2lzdGVy
Q29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQogYm9vbCBGcmFtZUdkazo6cnVuSmF2YVNjcmlwdFByb21wdChTdHJpbmcg
Y29uc3QmLCBTdHJpbmcgY29uc3QmLCBTdHJpbmcgJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQogYm9vbCBGcmFtZUdkazo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiB2b2lkIEZyYW1lR2RrOjpwcmludCgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgRnJhbWVHZGs6OnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24KIEZyYW1lKiBGcmFtZUdkazo6Y3JlYXRlRnJhbWUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIG93bmVyRWxlbWVudCwg
Y29uc3QgU3RyaW5nJiByZWZlcnJlcikgeyByZXR1cm4gMDsgfQogCiB2b2lkIEZyYW1lR2RrOjpz
YXZlRG9jdW1lbnRTdGF0ZSgpIHsgfQotdm9pZCBGcmFtZUdkazo6cmVnaXN0ZXJDb21tYW5kRm9y
VW5kbyhXZWJDb3JlOjpFZGl0Q29tbWFuZFB0ciBjb25zdCYpIHsgfQordm9pZCBGcmFtZUdkazo6
cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikg
eyB9CiB2b2lkIEZyYW1lR2RrOjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyh2b2lkKSB7IH0KIFN0
cmluZyBGcmFtZUdkazo6aW5jb21pbmdSZWZlcnJlcigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygp
OyB9CiB2b2lkIEZyYW1lR2RrOjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbiBjb25zdCYpIHsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93
aW4vVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAxNTk5MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vd2luL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
Niw3ICsxNzYsNyBAQCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWVXaW46OmdldE9iCiBL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWVXaW46OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRn
ZXQoV2lkZ2V0ICopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIGJvb2wgRnJhbWVX
aW46OmNhblJlZG8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29s
IEZyYW1lV2luOjpjYW5VbmRvKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsg
fQotdm9pZCBGcmFtZVdpbjo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhXZWJDb3JlOjpFZGl0Q29t
bWFuZFB0ciBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBGcmFtZVdpbjo6cmVn
aXN0ZXJDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPikgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9CiBib29sIEZyYW1lV2luOjpydW5KYXZhU2NyaXB0UHJvbXB0KFN0
cmluZyBjb25zdCYsU3RyaW5nIGNvbnN0JixTdHJpbmcgJikgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQogYm9vbCBGcmFtZVdpbjo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiBib29sIEZyYW1lV2luOjpvcGVuVVJM
KEtVUkwgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CkBAIC0yNTYsNyAr
MjU2LDcgQEAgdm9pZCBGcmFtZVdpbjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbgogc3RhdGlj
IGludCBmcmFtZU51bWJlciA9IDA7CiBGcmFtZSogRnJhbWVXaW46OmNyZWF0ZUZyYW1lKEtVUkwg
Y29uc3QmLFN0cmluZyBjb25zdCYsRWxlbWVudCosU3RyaW5nIGNvbnN0JikgeyByZXR1cm4gMDsg
fQogdm9pZCBGcmFtZVdpbjo6c2F2ZURvY3VtZW50U3RhdGUoKSB7IH0KLXZvaWQgRnJhbWVXaW46
OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oV2ViQ29yZTo6RWRpdENvbW1hbmRQdHIgY29uc3QmKSB7
IH0KK3ZvaWQgRnJhbWVXaW46OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxXZWJD
b3JlOjpFZGl0Q29tbWFuZD4pIHsgfQogdm9pZCBGcmFtZVdpbjo6Y2xlYXJVbmRvUmVkb09wZXJh
dGlvbnModm9pZCkgeyB9CiBTdHJpbmcgRnJhbWVXaW46OmluY29taW5nUmVmZXJyZXIoKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKTsgfQogdm9pZCBGcmFtZVdpbjo6bWFya01pc3NwZWxsaW5nc0lu
QWRqYWNlbnRXb3JkcyhXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24gY29uc3QmKSB7IH0K
</data>
<flag name="review"
          id="3193"
          type_id="1"
          status="+"
          setter="justin.garcia"
    />
          </attachment>
      

    </bug>

</bugzilla>