<?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>14111</bug_id>
          
          <creation_ts>2007-06-12 22:50:02 -0700</creation_ts>
          <short_desc>Autogenerate Event JS binding</short_desc>
          <delta_ts>2007-06-27 20:35:56 -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>DOM</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>13779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>7720</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-12 22:50:02 -0700</bug_when>
    <thetext>Patch in a minute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7721</commentid>
    <comment_count>1</comment_count>
      <attachid>14991</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-12 23:15:42 -0700</bug_when>
    <thetext>Created attachment 14991
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7483</commentid>
    <comment_count>2</comment_count>
      <attachid>14991</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-06-14 20:53:09 -0700</bug_when>
    <thetext>Comment on attachment 14991
patch

Is there no way to avoid special-casing clipboardData and dataTransfer? Can&apos;t we just move those to the appropriate event classes?

+    // FIXME: Is this lock necessary?
+    KJS::JSLock lock;

Seems clear that it is.

+            if (WebCore::JSUnprotectedEventListener* listener = static_cast&lt;WebCore::JSUnprotectedEventListener*&gt;(m_impl-&gt;onReadyStateChangeListener()))
Why is the WebCore prefix needed?

-        [OldStyleObjC] void initEvent(in DOMString eventTypeArg, 
+        [OldStyleObjC] void initEvent(in AtomicString eventTypeArg, 

This seems wrong. The API should be DOMString even though the implementation is AtomicString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7472</commentid>
    <comment_count>3</comment_count>
      <attachid>15042</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-14 23:38:31 -0700</bug_when>
    <thetext>Created attachment 15042
Update patch

&gt;Is there no way to avoid special-casing clipboardData and dataTransfer? Can&apos;t
&gt;we just move those to the appropriate event classes?

I have moved dataTransfer into MouseEvent (though perhaps it should be in a DragEvent class that we don&apos;t have) but have to special-case clipboardData for now as we have no JSClipboardEvent event class to push it into yet.  If you think it is appropriate, I can create one and put the method there.

&gt;+    // FIXME: Is this lock necessary?
&gt;+    KJS::JSLock lock;
&gt;
&gt; Seems clear that it is.

Oops, didn&apos;t mean to leave that in,  Removed.

&gt;+            if (WebCore::JSUnprotectedEventListener* listener =
&gt;static_cast&lt;WebCore::JSUnprotectedEventListener*&gt;(m_impl-&gt;onReadyStateChangeListener()))
&gt;Why is the WebCore prefix needed?

Fixed.

&gt;-        [OldStyleObjC] void initEvent(in DOMString eventTypeArg, 
&gt;+        [OldStyleObjC] void initEvent(in AtomicString eventTypeArg, 
&gt;
&gt;This seems wrong. The API should be DOMString even though the implementation is
&gt;AtomicString.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6251</commentid>
    <comment_count>4</comment_count>
      <attachid>15042</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-06-26 00:33:45 -0700</bug_when>
    <thetext>Comment on attachment 15042
Update patch

I think it would be good to split the actual bindings change from the various style cleanups in other nearby code (I think those are worth doing too though).

Please split.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6198</commentid>
    <comment_count>5</comment_count>
      <attachid>15250</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-26 10:28:14 -0700</bug_when>
    <thetext>Created attachment 15250
just the event autogeneration

First part of the split.  This patch is just the autogeneration of JSEvent and the associated changes needed to get it to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6185</commentid>
    <comment_count>6</comment_count>
      <attachid>15250</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-06-26 12:32:50 -0700</bug_when>
    <thetext>Comment on attachment 15250
just the event autogeneration

Looks good to me, unless other reviewers object.

+    if (!event)
+        return KJS::jsNull();
+
+    KJS::ScriptInterpreter* interp = static_cast&lt;KJS::ScriptInterpreter*&gt;(exec-&gt;dynamicInterpreter());
+
+    KJS::JSLock lock;

The lock here needs to go at the top of the function. jsNull() used to perform a GC allocation. There&apos;s no guarantee it won&apos;t again at some time in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6180</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-06-26 12:43:35 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; The lock here needs to go at the top of the function. jsNull() used to perform
&gt; a GC allocation. There&apos;s no guarantee it won&apos;t again at some time in the
&gt; future.

Geoff, that sounds like a reasonable rule. But if we want clients to consistently follow that rule, then I think the jsNull() function&apos;s implementation should ASSERT(JSLock::currentThreadIsHoldingLock()) with a comment like your remark above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6173</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-26 12:56:13 -0700</bug_when>
    <thetext>Landed in r23795.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6174</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-26 12:56:54 -0700</bug_when>
    <thetext>Reopening bug to deal with second half of the split.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6148</commentid>
    <comment_count>10</comment_count>
      <attachid>15261</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-26 16:38:42 -0700</bug_when>
    <thetext>Created attachment 15261
cleanup portion of the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6135</commentid>
    <comment_count>11</comment_count>
      <attachid>15261</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-06-26 21:36:33 -0700</bug_when>
    <thetext>Comment on attachment 15261
cleanup portion of the patch

r=me with some trepidation, since we shouldn&apos;t really be making cleanup-only changes right now. But I did tell you to split it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6037</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-06-27 20:35:56 -0700</bug_when>
    <thetext>Landed 2nd patch in r23841.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14991</attachid>
            <date>2007-06-12 23:15:42 -0700</date>
            <delta_ts>2007-06-14 23:38:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>autoEvent.diff</filename>
            <type>text/plain</type>
            <size>48482</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzQ4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMDctMDYtMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTEKKyAgICAgICAg
QXV0b2dlbmVyYXRlIEV2ZW50IEpTIGJpbmRpbmcKKworICAgICAgICAtIEFsc28gYnJpbmdzIEpT
RXZlbnRMaXN0ZW5lcnMgYW5kIEpTQ2xpcGJvYXJkIGludG8gdGhlIFdlYkNvcmUgbmFtZXNwYWNl
IAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnQ6OmNsaXBib2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudDo6
ZGF0YVRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNYTUxIdHRwUmVxdWVzdDo6Z2V0VmFs
dWVQcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6SlNBYnN0cmFjdEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjppc0hU
TUxFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6fkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpsaXN0ZW5lck9i
aik6CisgICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6d2luZG93
T2JqKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpjbGVh
cldpbmRvd09iaik6CisgICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cjo6bWFyayk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpsaXN0ZW5lck9iaik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OndpbmRvd09iaik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmNsZWFyV2luZG93T2JqKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmopOgorICAgICAgICAoV2Vi
Q29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldE5vZGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjpK
U0NsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6Z2V0VmFsdWVQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6cHV0VmFsdWVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZFByb3RvdHlwZUZ1bmN0aW9uOjpjYWxsQXNG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
Q2xpcGJvYXJkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfZXZlbnRzLmg6CisgICAgICAg
IChXZWJDb3JlOjpKU0NsaXBib2FyZDo6Y2xhc3NJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q2xpcGJvYXJkOjppbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfd2luZG93Lmg6Cisg
ICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1tOgorICAgICAgICAoS0pTOjpjcmVh
dGVET01XcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbToKKyAgICAgICAgKiBkb20vRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Ojpy
ZXR1cm5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6c2V0UmV0dXJuVmFsdWUpOgor
ICAgICAgICAqIGRvbS9FdmVudC5pZGw6CisgICAgICAgICoga3N2ZzIvZXZlbnRzL0pTU1ZHTGF6
eUV2ZW50TGlzdGVuZXIuaDoKKwogMjAwNy0wNi0xMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzQ4MykKKysrIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzU5
LDYgKzI3NTksNyBAQAogCQlCQzMwNUM3OTBDMDc2QkIzMDBDRDIwRjAgLyogSlNIVE1MT2JqZWN0
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzMwNUM3NzBDMDc2QkIzMDBDRDIwRjAgLyogSlNIVE1MT2JqZWN0RWxlbWVudC5jcHAgKi87
IH07CiAJCUJDMzA1QzdBMEMwNzZCQjMwMENEMjBGMCAvKiBKU0hUTUxPYmplY3RFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNUM3ODBD
MDc2QkIzMDBDRDIwRjAgLyogSlNIVE1MT2JqZWN0RWxlbWVudC5oICovOyB9OwogCQlCQzMwNUNB
NDBDMDc4MUJCMDBDRDIwRjAgLyogSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNUNBMzBDMDc4MUJC
MDBDRDIwRjAgLyogSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAgKi87IH07CisJCUJDMzRC
OERCMEMxRjlGRDEwMDUxODlFMiAvKiBKU0V2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzRCOERBMEMxRjlGRDEwMDUxODlFMiAv
KiBKU0V2ZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMzQzM5QjYwQzBEM0Q4RDAwNUY0RDdBIC8q
IEpTTWVkaWFMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDM0MzOUI0MEMwRDNEOEQwMDVGNEQ3QSAvKiBKU01lZGlhTGlzdC5jcHAgKi87IH07
CiAJCUJDM0MzOUI3MEMwRDNEOEQwMDVGNEQ3QSAvKiBKU01lZGlhTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQzM5QjUwQzBEM0Q4RDAwNUY0
RDdBIC8qIEpTTWVkaWFMaXN0LmggKi87IH07CiAJCUJDM0ZDQUE5MEFDM0RCNTgwMEJBNTRBRCAv
KiBQbGF0Zm9ybVNjcm9sbEJhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMzRkNBQTgwQUMzREI1ODAwQkE1NEFEIC8qIFBsYXRmb3JtU2Nyb2xsQmFy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKQEAgLTYwNTAsNiArNjA1
MSw3IEBACiAJCUJDMzA1Qzc3MEMwNzZCQjMwMENEMjBGMCAvKiBKU0hUTUxPYmplY3RFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPYmplY3RF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzMDVDNzgwQzA3NkJC
MzAwQ0QyMEYwIC8qIEpTSFRNTE9iamVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTSFRNTE9iamVjdEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMzMDVDQTMwQzA3ODFCQjAwQ0QyMEYwIC8qIEpTSFRNTE9iamVjdEVsZW1lbnRD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MT2Jq
ZWN0RWxlbWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMzRC
OERBMEMxRjlGRDEwMDUxODlFMiAvKiBKU0V2ZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzNCMzY0NzA1QzlENUUyMDBFNDI5MDIgLyogQXRvbWljU3RyaW5nTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
dG9taWNTdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQlCQzNDMzlCNDBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFMaXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzQzM5QjUwQzBEM0Q4RDAwNUY0
RDdBIC8qIEpTTWVkaWFMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U01lZGlhTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ2Niw4ICs2NDY4
LDYgQEAKIAkJMTRERkIzM0YwQTdERjc2MzAwMThGNzY5IC8qIERlcml2ZWQgU291cmNlcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkNDQkFEM0UwQzE4
QzE0MjAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb24uY3BwICovLAotCQkJCUJDQ0JBRDNGMEMx
OEMxNDIwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmggKi8sCiAJCQkJNjVERjMxRDgwOUQx
QzEyMjAwMEJFMzI1IC8qIEpTQXR0ci5jcHAgKi8sCiAJCQkJNjVERjMxRDkwOUQxQzEyMzAwMEJF
MzI1IC8qIEpTQXR0ci5oICovLAogCQkJCTY1REYzMjMzMDlEMURFNjUwMDBCRTMyNSAvKiBKU0Nh
bnZhc0dyYWRpZW50LmNwcCAqLywKQEAgLTY1NTAsNiArNjU1MCw4IEBACiAJCQkJQTgwRTdFOTUw
QTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTEJ1dHRvbkVsZW1lbnQuaCAqLywKIAkJCQk5MzhFNjY1
RjA5RjA5QjgxMDA4QTQ4RUMgLyogSlNIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8sCiAJCQkJOTM4
RTY2NjEwOUYwOUI4NzAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1lbnQuaCAqLywKKwkJCQlC
Q0NCQUQzRTBDMThDMTQyMDBDRTg5MEYgLyogSlNIVE1MQ29sbGVjdGlvbi5jcHAgKi8sCisJCQkJ
QkNDQkFEM0YwQzE4QzE0MjAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb24uaCAqLywKIAkJCQkx
QTg1QjFFMDBBMUIyNDA1MDBEOEM4N0MgLyogSlNIVE1MRGlyZWN0b3J5RWxlbWVudC5jcHAgKi8s
CiAJCQkJMUE4NUIxRTEwQTFCMjQwNTAwRDhDODdDIC8qIEpTSFRNTERpcmVjdG9yeUVsZW1lbnQu
aCAqLywKIAkJCQkxQTg1QjJCNDBBMUIyQUM3MDBEOEM4N0MgLyogSlNIVE1MRGl2RWxlbWVudC5j
cHAgKi8sCkBAIC05MjkyLDYgKzkyOTQsNyBAQAogCQkJCUJDMjBGQjdFMEMwRThFNkMwMEQxNDQ3
RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKIAkJCQk5MjkyNjQ3NjBCNjFGQzcyMDBCNDFE
MzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNEOUMyNUUwQzE3QUE2NzAwNUM5
MEEyIC8qIEpTRE9NV2luZG93Q3VzdG9tLmNwcCAqLywKKwkJCQlCQzM0QjhEQTBDMUY5RkQxMDA1
MTg5RTIgLyogSlNFdmVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkM0RURFRjMwQzA4RjNGQjAwN0VE
RDQ5IC8qIEpTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCUJDQ0JBRDNBMEMx
OEJGRjgwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzUx
NTgwQTBDMDNENDA0MDA4QkIwRUUgLyogSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwICovLApAQCAt
MTI5NzUsNiArMTI5NzgsNyBAQAogCQkJCUJDRDlDMkMyMEMxN0I2OUUwMDVDOTBBMiAvKiBKU05v
ZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0JBRDNCMEMxOEJGRjgwMENFODkwRiAv
KiBKU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0JBRDQw
MEMxOEMxNDIwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUJDMzRCOERCMEMxRjlGRDEwMDUxODlFMiAvKiBKU0V2ZW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0V2ZW50LmgiCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJFdmVu
dC5oIgorI2luY2x1ZGUgIkpTS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkpTTW91c2VFdmVu
dC5oIgorI2luY2x1ZGUgIkpTTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIkpTT3ZlcmZsb3dF
dmVudC5oIgorI2luY2x1ZGUgIkpTVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiSlNVSUV2ZW50Lmgi
CisjaW5jbHVkZSAiSlNXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgor
I2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCisjaW5j
bHVkZSAiT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUg
IlVJRXZlbnQuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAia2pzX2V2ZW50
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0tKUzo6SlNWYWx1ZSogSlNFdmVudDo6Y2xp
cGJvYXJkRGF0YShLSlM6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4gaW1w
bCgpLT5pc0NsaXBib2FyZEV2ZW50KCkgPyB0b0pTKGV4ZWMsIGltcGwoKS0+Y2xpcGJvYXJkRGF0
YSgpKSA6IEtKUzo6anNVbmRlZmluZWQoKTsKK30KKworS0pTOjpKU1ZhbHVlKiBKU0V2ZW50Ojpk
YXRhVHJhbnNmZXIoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlt
cGwoKS0+aXNEcmFnRXZlbnQoKSA/IHRvSlMoZXhlYywgaW1wbCgpLT5kYXRhVHJhbnNmZXIoKSkg
OiBLSlM6OmpzVW5kZWZpbmVkKCk7Cit9CisKK0tKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNT
dGF0ZSogZXhlYywgRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQpCisgICAgICAgIHJl
dHVybiBLSlM6OmpzTnVsbCgpOworCisgICAgS0pTOjpTY3JpcHRJbnRlcnByZXRlciogaW50ZXJw
ID0gc3RhdGljX2Nhc3Q8S0pTOjpTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRl
cnByZXRlcigpKTsKKworICAgIC8vIEZJWE1FOiBJcyB0aGlzIGxvY2sgbmVjZXNzYXJ5PworICAg
IEtKUzo6SlNMb2NrIGxvY2s7CisKKyAgICBLSlM6OkRPTU9iamVjdCogcmV0ID0gaW50ZXJwLT5n
ZXRET01PYmplY3QoZXZlbnQpOworICAgIGlmIChyZXQpCisgICAgICAgIHJldHVybiByZXQ7CisK
KyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICByZXQgPSBuZXcgSlNL
ZXlib2FyZEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwor
ICAgIGVsc2UgaWYgKGV2ZW50LT5pc1RleHRFdmVudCgpKQorICAgICAgICByZXQgPSBuZXcgSlNU
ZXh0RXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNl
IGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHJldCA9IG5ldyBKU01vdXNlRXZl
bnQoZXhlYywgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAo
ZXZlbnQtPmlzV2hlZWxFdmVudCgpKQorICAgICAgICByZXQgPSBuZXcgSlNXaGVlbEV2ZW50KGV4
ZWMsIHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50
LT5pc1VJRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gbmV3IEpTVUlFdmVudChleGVjLCBzdGF0aWNf
Y2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNNdXRhdGlvbkV2
ZW50KCkpCisgICAgICAgIHJldCA9IG5ldyBKU011dGF0aW9uRXZlbnQoZXhlYywgc3RhdGljX2Nh
c3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzT3ZlcmZs
b3dFdmVudCgpKQorICAgICAgICByZXQgPSBuZXcgSlNPdmVyZmxvd0V2ZW50KGV4ZWMsIHN0YXRp
Y19jYXN0PE92ZXJmbG93RXZlbnQqPihldmVudCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0g
bmV3IEpTRXZlbnQoZXhlYywgZXZlbnQpOworCisgICAgaW50ZXJwLT5wdXRET01PYmplY3QoZXZl
bnQsIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9u
IDIzNDgzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Tm9kZS5oIgor
I2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAia2pzX2V2
ZW50cy5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjM0ODMpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYs
MTcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVk
ZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRlICJ4bWxo
dHRwcmVxdWVzdC5oIgogCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdC5sdXQuaCIKIAotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIG5hbWVzcGFjZSBLSlMgewogCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBKU1hNTEh0dHBSZXF1ZXN0IE9i
amVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogLyogU291cmNlIGZvciBKU1hNTEh0dHBS
ZXF1ZXN0UHJvdG90eXBlVGFibGUuCkBAIC0xMTgsMTIgKzExOSwxMiBAQCBKU1ZhbHVlKiBKU1hN
TEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgICAgICAgICAg
aWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5vblJlYWR5U3RhdGVDaGFuZ2VMaXN0
ZW5lcigpKSkKKyAgICAgICAgICAgIGlmIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcio+KG1faW1wbC0+b25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKSkpCiAgICAgICAg
ICAgICAgICAgaWYgKEpTT2JqZWN0KiBsaXN0ZW5lck9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9i
aigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJPYmo7CiAgICAgICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgIGNhc2UgT25sb2FkOgotICAgICAgICAgICAgaWYg
KEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5vbkxvYWRMaXN0ZW5lcigpKSkKKyAgICAg
ICAgICAgIGlmIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1w
bC0+b25Mb2FkTGlzdGVuZXIoKSkpCiAgICAgICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBsaXN0
ZW5lck9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iaigpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbGlzdGVuZXJPYmo7CiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAJKHJldmlzaW9uIDIzNDgzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzQgKzM0LDIx
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1
ZGUgIkpTRXZlbnRUYXJnZXROb2RlLmgiCi0jaW5jbHVkZSAiSlNLZXlib2FyZEV2ZW50LmgiCi0j
aW5jbHVkZSAiSlNNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiSlNNdXRhdGlvbkV2ZW50LmgiCi0j
aW5jbHVkZSAiSlNPdmVyZmxvd0V2ZW50LmgiCi0jaW5jbHVkZSAiSlNUZXh0RXZlbnQuaCIKLSNp
bmNsdWRlICJKU1doZWVsRXZlbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiS2V5
Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJNdXRhdGlv
bkV2ZW50LmgiCi0jaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
LSNpbmNsdWRlICJUZXh0RXZlbnQuaCIKLSNpbmNsdWRlICJVSUV2ZW50LmgiCi0jaW5jbHVkZSAi
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgImtqc193aW5k
b3cuaCIKIAogI2luY2x1ZGUgImtqc19ldmVudHMubHV0LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOwogdXNp
bmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1u
YW1lc3BhY2UgS0pTIHsKLQotSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OkpTQWJzdHJhY3RFdmVu
dExpc3RlbmVyKGJvb2wgX2h0bWwpCi0gICAgOiBodG1sKF9odG1sKQorSlNBYnN0cmFjdEV2ZW50
TGlzdGVuZXI6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGJvb2wgaHRtbCkKKyAgICA6IG1faHRt
bChodG1sKQogewogfQogCkBAIC03Miw3ICs1OSw3IEBAIHZvaWQgSlNBYnN0cmFjdEV2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW4KICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBFdmVudCAq
ZXZlbnQgPSBlbGU7CisgICAgRXZlbnQqIGV2ZW50ID0gZWxlOwogCiAgICAgSlNPYmplY3QqIGxp
c3RlbmVyID0gbGlzdGVuZXJPYmooKTsKICAgICBpZiAoIWxpc3RlbmVyKQpAQCAtMTQ1LDcgKzEz
Miw3IEBAIHZvaWQgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGlmICghcmV0dmFsLT5pc1VuZGVmaW5lZE9yTnVsbCgpICYm
IGV2ZW50LT5zdG9yZXNSZXN1bHRBc1N0cmluZygpKQogICAgICAgICAgICAgICAgIGV2ZW50LT5z
dG9yZVJlc3VsdChyZXR2YWwtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIGlmIChodG1s
KSB7CisgICAgICAgICAgICBpZiAobV9odG1sKSB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXR2
YWxib29sOwogICAgICAgICAgICAgICAgIGlmIChyZXR2YWwtPmdldEJvb2xlYW4ocmV0dmFsYm9v
bCkgJiYgIXJldHZhbGJvb2wpCiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVm
YXVsdCgpOwpAQCAtMTU5LDUxICsxNDYsNTEgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbgogCiBib29sIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjppc0hUTUxFdmVu
dExpc3RlbmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaHRtbDsKKyAgICByZXR1cm4gbV9odG1s
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
OjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU09iamVjdCogX2xpc3RlbmVyLCBXaW5kb3cq
IF93aW4sIGJvb2wgX2h0bWwpCi0gIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoX2h0bWwpCi0g
ICwgbGlzdGVuZXIoX2xpc3RlbmVyKQotICAsIHdpbihfd2luKQotewotICAgIGlmIChfbGlzdGVu
ZXIpIHsKLSAgICAgICAgV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJz
ID0gX2h0bWwgCi0gICAgICAgICAgICA/IF93aW4tPmpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0
ZW5lcnMoKSA6IF93aW4tPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycygpOwotICAgICAgICBs
aXN0ZW5lcnMuc2V0KF9saXN0ZW5lciwgdGhpcyk7CitKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGxpc3RlbmVyLCBXaW5kb3cq
IHdpbiwgYm9vbCBodG1sKQorICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGh0bWwpCisgICwg
bV9saXN0ZW5lcihsaXN0ZW5lcikKKyAgLCBtX3dpbih3aW4pCit7CisgICAgaWYgKG1fbGlzdGVu
ZXIpIHsKKyAgICAgICAgV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJz
ID0gaHRtbCAKKyAgICAgICAgICAgID8gbV93aW4tPmpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0
ZW5lcnMoKSA6IG1fd2luLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAg
bGlzdGVuZXJzLnNldChtX2xpc3RlbmVyLCB0aGlzKTsKICAgICB9CiB9CiAKIEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyOjp+SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoKQogewotICAgIGlm
IChsaXN0ZW5lciAmJiB3aW4pIHsKKyAgICBpZiAobV9saXN0ZW5lciAmJiBtX3dpbikgewogICAg
ICAgICBXaW5kb3c6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0hUTUxF
dmVudExpc3RlbmVyKCkKLSAgICAgICAgICAgID8gd2luLT5qc1VucHJvdGVjdGVkSFRNTEV2ZW50
TGlzdGVuZXJzKCkgOiB3aW4tPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycygpOwotICAgICAg
ICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKyAgICAgICAgICAgID8gbV93aW4tPmpzVW5w
cm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luLT5qc1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcnMoKTsKKyAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShtX2xpc3RlbmVyKTsKICAgICB9
CiB9CiAKIEpTT2JqZWN0KiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmoo
KSBjb25zdAogeyAKLSAgICByZXR1cm4gbGlzdGVuZXI7IAorICAgIHJldHVybiBtX2xpc3RlbmVy
OyAKIH0KIAogV2luZG93KiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6d2luZG93T2JqKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gd2luOworICAgIHJldHVybiBtX3dpbjsKIH0KIAogdm9pZCBK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y2xlYXJXaW5kb3dPYmooKQogewotICAgIHdpbiA9
IDA7CisgICAgbV93aW4gPSAwOwogfQogCiB2b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
OjptYXJrKCkKIHsKLSAgICBpZiAobGlzdGVuZXIgJiYgIWxpc3RlbmVyLT5tYXJrZWQoKSkKLSAg
ICAgICAgbGlzdGVuZXItPm1hcmsoKTsKKyAgICBpZiAobV9saXN0ZW5lciAmJiAhbV9saXN0ZW5l
ci0+bWFya2VkKCkpCisgICAgICAgIG1fbGlzdGVuZXItPm1hcmsoKTsKIH0KIAogI2lmbmRlZiBO
REVCVUcKQEAgLTIyNiwxNSArMjEzLDE1IEBAIHN0YXRpYyBFdmVudExpc3RlbmVyQ291bnRlciBl
dmVudExpc3RlbmUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU0V2ZW50TGlzdGVuZXI6OkpT
RXZlbnRMaXN0ZW5lcihKU09iamVjdCogX2xpc3RlbmVyLCBXaW5kb3cqIF93aW4sIGJvb2wgX2h0
bWwpCi0gICAgOiBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcihfaHRtbCkKLSAgICAsIGxpc3RlbmVy
KF9saXN0ZW5lcikKLSAgICAsIHdpbihfd2luKQotewotICAgIGlmIChfbGlzdGVuZXIpIHsKLSAg
ICAgICAgV2luZG93OjpMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IF9odG1sCi0gICAgICAgICAg
ICA/IF93aW4tPmpzSFRNTEV2ZW50TGlzdGVuZXJzKCkgOiBfd2luLT5qc0V2ZW50TGlzdGVuZXJz
KCk7Ci0gICAgICAgIGxpc3RlbmVycy5zZXQoX2xpc3RlbmVyLCB0aGlzKTsKK0pTRXZlbnRMaXN0
ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBsaXN0ZW5lciwgV2luZG93KiB3aW4sIGJv
b2wgaHRtbCkKKyAgICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGh0bWwpCisgICAgLCBtX2xp
c3RlbmVyKGxpc3RlbmVyKQorICAgICwgbV93aW4od2luKQoreworICAgIGlmIChtX2xpc3RlbmVy
KSB7CisgICAgICAgIFdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBodG1sCisgICAg
ICAgICAgICA/IG1fd2luLT5qc0hUTUxFdmVudExpc3RlbmVycygpIDogbV93aW4tPmpzRXZlbnRM
aXN0ZW5lcnMoKTsKKyAgICAgICAgbGlzdGVuZXJzLnNldChtX2xpc3RlbmVyLCB0aGlzKTsKICAg
ICB9CiAjaWZuZGVmIE5ERUJVRwogICAgICsrZXZlbnRMaXN0ZW5lckNvdW50ZXIuY291bnQ7CkBA
IC0yNDMsMTAgKzIzMCwxMCBAQCBKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lcihKU09i
amVjCiAKIEpTRXZlbnRMaXN0ZW5lcjo6fkpTRXZlbnRMaXN0ZW5lcigpCiB7Ci0gICAgaWYgKGxp
c3RlbmVyICYmIHdpbikgeworICAgIGlmIChtX2xpc3RlbmVyICYmIG1fd2luKSB7CiAgICAgICAg
IFdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0hUTUxFdmVudExpc3RlbmVyKCkK
LSAgICAgICAgICAgID8gd2luLT5qc0hUTUxFdmVudExpc3RlbmVycygpIDogd2luLT5qc0V2ZW50
TGlzdGVuZXJzKCk7Ci0gICAgICAgIGxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgICAg
ICAgICAgPyBtX3dpbi0+anNIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luLT5qc0V2ZW50TGlz
dGVuZXJzKCk7CisgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobV9saXN0ZW5lcik7CiAgICAgfQog
I2lmbmRlZiBOREVCVUcKICAgICAtLWV2ZW50TGlzdGVuZXJDb3VudGVyLmNvdW50OwpAQCAtMjU1
LDI4ICsyNDIsMjggQEAgSlNFdmVudExpc3RlbmVyOjp+SlNFdmVudExpc3RlbmVyKCkKIAogSlNP
YmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmooKSBjb25zdAogeyAKLSAgICByZXR1
cm4gbGlzdGVuZXI7IAorICAgIHJldHVybiBtX2xpc3RlbmVyOyAKIH0KIAogV2luZG93KiBKU0V2
ZW50TGlzdGVuZXI6OndpbmRvd09iaigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHdpbjsKKyAgICBy
ZXR1cm4gbV93aW47CiB9CiAKIHZvaWQgSlNFdmVudExpc3RlbmVyOjpjbGVhcldpbmRvd09iaigp
CiB7Ci0gICAgd2luID0gMDsKKyAgICBtX3dpbiA9IDA7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBXaW5kb3cqIHdpbiwgTm9kZSog
bm9kZSwgaW50IGxpbmVubykKK0pTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVu
ZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgV2luZG93
KiB3aW4sIE5vZGUqIG5vZGUsIGludCBsaW5lTnVtYmVyKQogICA6IEpTRXZlbnRMaXN0ZW5lcigw
LCB3aW4sIHRydWUpCiAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQotICAsIGNvZGUo
Y29kZSkKLSAgLCBwYXJzZWQoZmFsc2UpCi0gICwgbGluZU51bWJlcihsaW5lbm8pCi0gICwgb3Jp
Z2luYWxOb2RlKG5vZGUpCisgICwgbV9jb2RlKGNvZGUpCisgICwgbV9wYXJzZWQoZmFsc2UpCisg
ICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCisgICwgbV9vcmlnaW5hbE5vZGUobm9kZSkKIHsK
ICAgICAvLyBXZSBkb24ndCByZXRhaW4gdGhlIG9yaWdpbmFsIG5vZGUgYmVjYXVzZSB3ZSBhc3N1
bWUgaXQKICAgICAvLyB3aWxsIHN0YXkgYWxpdmUgYXMgbG9uZyBhcyB0aGlzIGhhbmRsZXIgb2Jq
ZWN0IGlzIGFyb3VuZApAQCAtMjg4LDcgKzI3NSw3IEBAIEpTTGF6eUV2ZW50TGlzdGVuZXI6OkpT
TGF6eUV2ZW50TGlzdGVuZXIKIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjpsaXN0ZW5l
ck9iaigpIGNvbnN0CiB7CiAgICAgcGFyc2VDb2RlKCk7Ci0gICAgcmV0dXJuIGxpc3RlbmVyOwor
ICAgIHJldHVybiBtX2xpc3RlbmVyOwogfQogCiBKU1ZhbHVlKiBKU0xhenlFdmVudExpc3RlbmVy
OjpldmVudFBhcmFtZXRlck5hbWUoKSBjb25zdApAQCAtMjk5LDEyICsyODYsMTIgQEAgSlNWYWx1
ZSogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6ZXZlbnRQYXJhbQogCiB2b2lkIEpTTGF6eUV2ZW50TGlz
dGVuZXI6OnBhcnNlQ29kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhcnNlZCkKKyAgICBpZiAobV9w
YXJzZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBwYXJzZWQgPSB0cnVlOworICAgIG1fcGFyc2Vk
ID0gdHJ1ZTsKIAotICAgIEZyYW1lICpmcmFtZSA9IHdpbmRvd09iaigpLT5mcmFtZSgpOwotICAg
IEtKU1Byb3h5ICpwcm94eSA9IDA7CisgICAgRnJhbWUqIGZyYW1lID0gd2luZG93T2JqKCktPmZy
YW1lKCk7CisgICAgS0pTUHJveHkqIHByb3h5ID0gMDsKICAgICBpZiAoZnJhbWUpCiAgICAgICAg
IHByb3h5ID0gZnJhbWUtPnNjcmlwdFByb3h5KCk7CiAKQEAgLTMxOCwyMiArMzA1LDIyIEBAIHZv
aWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY28KIAogICAgICAgICBVU3RyaW5n
IHNvdXJjZVVSTChmcmFtZS0+bG9hZGVyKCktPnVybCgpLnVybCgpKTsKICAgICAgICAgYXJncy5h
cHBlbmQoZXZlbnRQYXJhbWV0ZXJOYW1lKCkpOwotICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmlu
Zyhjb2RlKSk7Ci0gICAgICAgIGxpc3RlbmVyID0gY29uc3RyLT5jb25zdHJ1Y3QoZXhlYywgYXJn
cywgbV9mdW5jdGlvbk5hbWUsIHNvdXJjZVVSTCwgbGluZU51bWJlcik7IC8vICMjIyBpcyBnbG9i
YWxFeGVjIG9rID8KKyAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcobV9jb2RlKSk7CisgICAg
ICAgIG1fbGlzdGVuZXIgPSBjb25zdHItPmNvbnN0cnVjdChleGVjLCBhcmdzLCBtX2Z1bmN0aW9u
TmFtZSwgc291cmNlVVJMLCBtX2xpbmVOdW1iZXIpOyAvLyBGSVhNRTogaXMgZ2xvYmFsRXhlYyBv
ayA/CiAKLSAgICAgICAgRnVuY3Rpb25JbXAqIGxpc3RlbmVyQXNGdW5jdGlvbiA9IHN0YXRpY19j
YXN0PEZ1bmN0aW9uSW1wKj4obGlzdGVuZXIuZ2V0KCkpOworICAgICAgICBGdW5jdGlvbkltcCog
bGlzdGVuZXJBc0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25JbXAqPihtX2xpc3RlbmVy
LmdldCgpKTsKIAogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgICAgIC8vIGZhaWxlZCB0byBw
YXJzZSwgc28gbGV0J3MganVzdCBtYWtlIHRoaXMgbGlzdGVuZXIgYSBuby1vcAotICAgICAgICAg
ICAgbGlzdGVuZXIgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsTm9kZSkgeworICAg
ICAgICAgICAgbV9saXN0ZW5lciA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAobV9vcmlnaW5hbE5v
ZGUpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQncyBob21lIGVsZW1lbnQgdG8gdGhl
IHNjb3BlCiAgICAgICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0g
c2VlIEpTSFRNTEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQogICAgICAgICAgICAgU2NvcGVD
aGFpbiBzY29wZSA9IGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUoKTsKIAotICAgICAgICAgICAg
SlNWYWx1ZSogdGhpc09iaiA9IHRvSlMoZXhlYywgb3JpZ2luYWxOb2RlKTsKKyAgICAgICAgICAg
IEpTVmFsdWUqIHRoaXNPYmogPSB0b0pTKGV4ZWMsIG1fb3JpZ2luYWxOb2RlKTsKICAgICAgICAg
ICAgIGlmICh0aGlzT2JqLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8SlNFdmVudFRhcmdldE5vZGUqPih0aGlzT2JqKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4
ZWMsIHNjb3BlKTsKICAgICAgICAgICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3Bl
KHNjb3BlKTsKQEAgLTM0MywxODIgKzMzMCwyMiBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6
OnBhcnNlQ29kZSgpIGNvCiAKICAgICAvLyBubyBtb3JlIG5lZWQgdG8ga2VlcCB0aGUgdW5wYXJz
ZWQgY29kZSBhcm91bmQKICAgICBtX2Z1bmN0aW9uTmFtZSA9IFN0cmluZygpOwotICAgIGNvZGUg
PSBTdHJpbmcoKTsKKyAgICBtX2NvZGUgPSBTdHJpbmcoKTsKIAotICAgIGlmIChsaXN0ZW5lcikg
eworICAgIGlmIChtX2xpc3RlbmVyKSB7CiAgICAgICAgIFdpbmRvdzo6TGlzdGVuZXJzTWFwJiBs
aXN0ZW5lcnMgPSBpc0hUTUxFdmVudExpc3RlbmVyKCkKICAgICAgICAgICAgID8gd2luZG93T2Jq
KCktPmpzSFRNTEV2ZW50TGlzdGVuZXJzKCkgOiB3aW5kb3dPYmooKS0+anNFdmVudExpc3RlbmVy
cygpOwotICAgICAgICBsaXN0ZW5lcnMuc2V0KGxpc3RlbmVyLCBjb25zdF9jYXN0PEpTTGF6eUV2
ZW50TGlzdGVuZXIqPih0aGlzKSk7CisgICAgICAgIGxpc3RlbmVycy5zZXQobV9saXN0ZW5lciwg
Y29uc3RfY2FzdDxKU0xhenlFdmVudExpc3RlbmVyKj4odGhpcykpOwogICAgIH0KIH0KIAogSlNW
YWx1ZSogZ2V0Tm9kZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXROb2RlKiBuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkKIHsKLSAgICBpZiAoSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihuLT5nZXRI
VE1MRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpKSkKKyAgICBpZiAoSlNBYnN0cmFjdEV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihu
LT5nZXRIVE1MRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpKSkgewogICAgICAgICBpZiAoSlNWYWx1
ZSogb2JqID0gbGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpCiAgICAgICAgICAgICByZXR1cm4gb2Jq
OwotICAgIHJldHVybiBqc051bGwoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jb25z
dCBDbGFzc0luZm8gRE9NRXZlbnQ6OmluZm8gPSB7ICJFdmVudCIsIDAsICZET01FdmVudFRhYmxl
LCAwIH07Ci0vKgotQGJlZ2luIERPTUV2ZW50VGFibGUgMTIKLSAgdHlwZSAgICAgICAgICBET01F
dmVudDo6VHlwZSAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHRhcmdldCAgICAgICAg
RE9NRXZlbnQ6OlRhcmdldCAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBjdXJyZW50VGFy
Z2V0IERPTUV2ZW50OjpDdXJyZW50VGFyZ2V0IERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3JjRWxl
bWVudCAgICBET01FdmVudDo6U3JjRWxlbWVudCAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGV2
ZW50UGhhc2UgICAgRE9NRXZlbnQ6OkV2ZW50UGhhc2UgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICBidWJibGVzICAgICAgIERPTUV2ZW50OjpCdWJibGVzICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgY2FuY2VsYWJsZSAgICBET01FdmVudDo6Q2FuY2VsYWJsZSAgICBEb250RGVsZXRlfFJl
YWRPbmx5Ci0gIHRpbWVTdGFtcCAgICAgRE9NRXZlbnQ6OlRpbWVTdGFtcCAgICAgRG9udERlbGV0
ZXxSZWFkT25seQotICByZXR1cm5WYWx1ZSAgIERPTUV2ZW50OjpSZXR1cm5WYWx1ZSAgIERvbnRE
ZWxldGUKLSAgY2FuY2VsQnViYmxlICBET01FdmVudDo6Q2FuY2VsQnViYmxlICBEb250RGVsZXRl
Ci0gIGRhdGFUcmFuc2ZlciAgRE9NRXZlbnQ6OkRhdGFUcmFuc2ZlciAgRG9udERlbGV0ZXxSZWFk
T25seQotICBjbGlwYm9hcmREYXRhICBET01FdmVudDo6Q2xpcGJvYXJkRGF0YSAgRG9udERlbGV0
ZXxSZWFkT25seQotQGVuZAotQGJlZ2luIERPTUV2ZW50UHJvdG90eXBlVGFibGUgMwotICBzdG9w
UHJvcGFnYXRpb24gICAgICAgRE9NRXZlbnQ6OlN0b3BQcm9wYWdhdGlvbiAgICAgICBEb250RGVs
ZXRlfEZ1bmN0aW9uIDAKLSAgcHJldmVudERlZmF1bHQgICAgICAgIERPTUV2ZW50OjpQcmV2ZW50
RGVmYXVsdCAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi0gIGluaXRFdmVudCAgICAgICAg
ICAgICBET01FdmVudDo6SW5pdEV2ZW50ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24g
MwotQGVuZAotKi8KLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OKERPTUV2ZW50UHJv
dG90eXBlRnVuY3Rpb24pCi1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRSgiRE9NRXZlbnQiLCBET01F
dmVudFByb3RvdHlwZSwgRE9NRXZlbnRQcm90b3R5cGVGdW5jdGlvbikKLQotRE9NRXZlbnQ6OkRP
TUV2ZW50KEV4ZWNTdGF0ZSogZXhlYywgRXZlbnQqIGV2ZW50KQotICAgIDogbV9pbXBsKGV2ZW50
KQotewotICAgIHNldFByb3RvdHlwZShET01FdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSk7Ci19
Ci0KLURPTUV2ZW50Ojp+RE9NRXZlbnQoKQotewotICAgIFNjcmlwdEludGVycHJldGVyOjpmb3Jn
ZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKLX0KLQotYm9vbCBET01FdmVudDo6Z2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxE
T01FdmVudCwgRE9NT2JqZWN0PihleGVjLCAmRE9NRXZlbnRUYWJsZSwgdGhpcywgcHJvcGVydHlO
YW1lLCBzbG90KTsKLX0KLQotSlNWYWx1ZSogRE9NRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgRXZlbnQqIGV2ZW50ID0gaW1w
bCgpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBUeXBlOgotICAgICAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV2ZW50LT50eXBlKCkpOwotICAgICAgICBjYXNlIFRhcmdldDoK
LSAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgICAg
IGNhc2UgU3JjRWxlbWVudDoKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LT5z
cmNFbGVtZW50KCkpOwotICAgICAgICBjYXNlIEN1cnJlbnRUYXJnZXQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBldmVudC0+Y3VycmVudFRhcmdldCgpKTsKLSAgICAgICAgY2FzZSBF
dmVudFBoYXNlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV2ZW50LT5ldmVudFBoYXNl
KCkpOwotICAgICAgICBjYXNlIEJ1YmJsZXM6Ci0gICAgICAgICAgICByZXR1cm4ganNCb29sZWFu
KGV2ZW50LT5idWJibGVzKCkpOwotICAgICAgICBjYXNlIENhbmNlbEJ1YmJsZToKLSAgICAgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKTsKLSAgICAgICAgY2Fz
ZSBSZXR1cm5WYWx1ZToKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZXZlbnQtPnJldHVy
blZhbHVlKCkpOwotICAgICAgICBjYXNlIENhbmNlbGFibGU6Ci0gICAgICAgICAgICByZXR1cm4g
anNCb29sZWFuKGV2ZW50LT5jYW5jZWxhYmxlKCkpOwotICAgICAgICBjYXNlIFRpbWVTdGFtcDoK
LSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihldmVudC0+dGltZVN0YW1wKCkpOwotICAgICAg
ICBjYXNlIENsaXBib2FyZERhdGE6Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPmlzQ2xpcGJvYXJk
RXZlbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBldmVudC0+Y2xpcGJv
YXJkRGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBj
YXNlIERhdGFUcmFuc2ZlcjoKLSAgICAgICAgICAgIGlmIChldmVudC0+aXNEcmFnRXZlbnQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBldmVudC0+ZGF0YVRyYW5zZmVyKCkp
OwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci19Ci0KLXZvaWQgRE9NRXZlbnQ6OnB1dChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIGludCBhdHRyKQotewotICAgIGxvb2t1cFB1dDxET01FdmVudCwgRE9NT2JqZWN0PihleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmRE9NRXZlbnRUYWJsZSwgdGhpcyk7Ci19Ci0K
LXZvaWQgRE9NRXZlbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4sIEpTVmFsdWUqIHZhbHVlLCBpbnQpCi17Ci0gICAgRXZlbnQqIGV2ZW50ID0gbV9pbXBsLmdl
dCgpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBSZXR1cm5WYWx1ZToKLSAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0UHJldmVudGVkKCF2YWx1ZS0+dG9Cb29sZWFuKGV4
ZWMpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENhbmNlbEJ1YmJsZToKLSAg
ICAgICAgICAgIGV2ZW50LT5zZXRDYW5jZWxCdWJibGUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotSlNWYWx1ZSogRE9NRXZlbnRQcm90b3R5cGVGdW5jdGlvbjo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqIHRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NRXZlbnQ6OmluZm8pKQot
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgRXZlbnQq
IGV2ZW50ID0gc3RhdGljX2Nhc3Q8RE9NRXZlbnQqPih0aGlzT2JqKS0+aW1wbCgpOwotICAgIHN3
aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSBET01FdmVudDo6U3RvcFByb3BhZ2F0aW9uOgotICAg
ICAgICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgRE9NRXZlbnQ6OlByZXZlbnREZWZhdWx0OgotICAg
ICAgICAgICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBET01FdmVudDo6SW5pdEV2ZW50OgotICAgICAgICAg
ICAgZXZlbnQtPmluaXRFdmVudChBdG9taWNTdHJpbmcoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykp
LCBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyksIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7Ci0g
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfTsKLSAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci19Ci0KLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXZlbnQp
Ci17Ci0gICAgaWYgKCFldmVudCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgU2Ny
aXB0SW50ZXJwcmV0ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyKj4o
ZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpOwotCi0gICAgSlNMb2NrIGxvY2s7Ci0KLSAgICBE
T01PYmplY3QqIHJldCA9IGludGVycC0+Z2V0RE9NT2JqZWN0KGV2ZW50KTsKLSAgICBpZiAocmV0
KQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQo
KSkKLSAgICAgICAgcmV0ID0gbmV3IEpTS2V5Ym9hcmRFdmVudChleGVjLCBzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKLSAgICBlbHNlIGlmIChldmVudC0+aXNUZXh0RXZlbnQo
KSkKLSAgICAgICAgcmV0ID0gbmV3IEpTVGV4dEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFRleHRF
dmVudCo+KGV2ZW50KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQotICAg
ICAgICByZXQgPSBuZXcgSlNNb3VzZUV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQq
PihldmVudCkpOwotICAgIGVsc2UgaWYgKGV2ZW50LT5pc1doZWVsRXZlbnQoKSkKLSAgICAgICAg
cmV0ID0gbmV3IEpTV2hlZWxFdmVudChleGVjLCBzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZl
bnQpKTsKLSAgICBlbHNlIGlmIChldmVudC0+aXNVSUV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5l
dyBKU1VJRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8VUlFdmVudCo+KGV2ZW50KSk7Ci0gICAgZWxz
ZSBpZiAoZXZlbnQtPmlzTXV0YXRpb25FdmVudCgpKQotICAgICAgICByZXQgPSBuZXcgSlNNdXRh
dGlvbkV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnQqPihldmVudCkpOwotICAg
IGVsc2UgaWYgKGV2ZW50LT5pc092ZXJmbG93RXZlbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpT
T3ZlcmZsb3dFdmVudChleGVjLCBzdGF0aWNfY2FzdDxPdmVyZmxvd0V2ZW50Kj4oZXZlbnQpKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldCA9IG5ldyBKU0V2ZW50KGV4ZWMsIGV2ZW50KTsKLQotICAg
IGludGVycC0+cHV0RE9NT2JqZWN0KGV2ZW50LCByZXQpOwotICAgIHJldHVybiByZXQ7Ci19Ci0K
LUV2ZW50KiB0b0V2ZW50KEpTVmFsdWUqIHZhbCkKLXsKLSAgICBpZiAoIXZhbCB8fCAhdmFsLT5p
c09iamVjdCgmRE9NRXZlbnQ6OmluZm8pKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RE9NRXZlbnQqPih2YWwpLT5pbXBsKCk7CisgICAgcmV0dXJuIGpzTnVsbCgp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MjcsMTUgKzM1NCwxNSBAQCBjb25zdCBD
bGFzc0luZm8gSlNDbGlwYm9hcmQ6OmluZm8gPSB7ICJDCiAKIC8qIFNvdXJjZSBmb3IgSlNDbGlw
Ym9hcmRUYWJsZS4gVXNlICJtYWtlIGhhc2h0YWJsZXMiIHRvIHJlZ2VuZXJhdGUuCiBAYmVnaW4g
SlNDbGlwYm9hcmRUYWJsZSAzCi0gIGRyb3BFZmZlY3QgICAgSlNDbGlwYm9hcmQ6OkRyb3BFZmZl
Y3QgICBEb250RGVsZXRlCi0gIGVmZmVjdEFsbG93ZWQgSlNDbGlwYm9hcmQ6OkVmZmVjdEFsbG93
ZWQgICAgICAgIERvbnREZWxldGUKLSAgdHlwZXMgICAgICAgICBKU0NsaXBib2FyZDo6VHlwZXMg
ICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKKyAgZHJvcEVmZmVjdCAgICBXZWJDb3JlOjpKU0Ns
aXBib2FyZDo6RHJvcEVmZmVjdCAgIERvbnREZWxldGUKKyAgZWZmZWN0QWxsb3dlZCBXZWJDb3Jl
OjpKU0NsaXBib2FyZDo6RWZmZWN0QWxsb3dlZCAgICAgICAgRG9udERlbGV0ZQorICB0eXBlcyAg
ICAgICAgIFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjpUeXBlcyAgICAgICAgRG9udERlbGV0ZXxSZWFk
T25seQogQGVuZAogQGJlZ2luIEpTQ2xpcGJvYXJkUHJvdG90eXBlVGFibGUgNAotICBjbGVhckRh
dGEgICAgIEpTQ2xpcGJvYXJkOjpDbGVhckRhdGEgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi0g
IGdldERhdGEgICAgICAgSlNDbGlwYm9hcmQ6OkdldERhdGEgICAgICBEb250RGVsZXRlfEZ1bmN0
aW9uIDEKLSAgc2V0RGF0YSAgICAgICBKU0NsaXBib2FyZDo6U2V0RGF0YSAgICAgIERvbnREZWxl
dGV8RnVuY3Rpb24gMgotICBzZXREcmFnSW1hZ2UgIEpTQ2xpcGJvYXJkOjpTZXREcmFnSW1hZ2Ug
RG9udERlbGV0ZXxGdW5jdGlvbiAzCisgIGNsZWFyRGF0YSAgICAgV2ViQ29yZTo6SlNDbGlwYm9h
cmQ6OkNsZWFyRGF0YSAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKKyAgZ2V0RGF0YSAgICAgICBX
ZWJDb3JlOjpKU0NsaXBib2FyZDo6R2V0RGF0YSAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQor
ICBzZXREYXRhICAgICAgIFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjpTZXREYXRhICAgICAgRG9udERl
bGV0ZXxGdW5jdGlvbiAyCisgIHNldERyYWdJbWFnZSAgV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OlNl
dERyYWdJbWFnZSBEb250RGVsZXRlfEZ1bmN0aW9uIDMKIEBlbmQKICovCiAKQEAgLTU0Myw4ICsz
NzAsOCBAQCBLSlNfREVGSU5FX1BST1RPVFlQRShKU0NsaXBib2FyZFByb3RvdHlwCiBLSlNfSU1Q
TEVNRU5UX1BST1RPVFlQRV9GVU5DVElPTihKU0NsaXBib2FyZFByb3RvdHlwZUZ1bmN0aW9uKQog
S0pTX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNsaXBib2FyZCIsIEpTQ2xpcGJvYXJkUHJvdG90eXBl
LCBKU0NsaXBib2FyZFByb3RvdHlwZUZ1bmN0aW9uKQogCi1KU0NsaXBib2FyZDo6SlNDbGlwYm9h
cmQoRXhlY1N0YXRlKiBleGVjLCBXZWJDb3JlOjpDbGlwYm9hcmQqIGNiKQotICAgIDogbV9pbXBs
KGNiKQorSlNDbGlwYm9hcmQ6OkpTQ2xpcGJvYXJkKEV4ZWNTdGF0ZSogZXhlYywgQ2xpcGJvYXJk
KiBjbGlwYm9hcmQpCisgICAgOiBtX2ltcGwoY2xpcGJvYXJkKQogewogICAgIHNldFByb3RvdHlw
ZShKU0NsaXBib2FyZFByb3RvdHlwZTo6c2VsZihleGVjKSk7CiB9CkBAIC01NjEsNyArMzg4LDcg
QEAgYm9vbCBKU0NsaXBib2FyZDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZQogCiBKU1ZhbHVlKiBK
U0NsaXBib2FyZDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKLSAgICBXZWJDb3JlOjpDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKKyAg
ICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAg
ICAgICAgIGNhc2UgRHJvcEVmZmVjdDoKICAgICAgICAgICAgIEFTU0VSVChjbGlwYm9hcmQtPmlz
Rm9yRHJhZ2dpbmcoKSB8fCBjbGlwYm9hcmQtPmRyb3BFZmZlY3QoKS5pc051bGwoKSk7CkBAIC01
OTQsNyArNDIxLDcgQEAgdm9pZCBKU0NsaXBib2FyZDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgYwog
CiB2b2lkIEpTQ2xpcGJvYXJkOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IC8qYXR0ciovKQogewotICAgIFdlYkNvcmU6OkNs
aXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOworICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0g
aW1wbCgpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBEcm9wRWZmZWN0Ogog
ICAgICAgICAgICAgLy8gY2FuIG5ldmVyIHNldCB0aGlzIHdoZW4gbm90IGZvciBkcmFnZ2luZywg
dGh1cyBnZXR0aW5nIGFsd2F5cyByZXR1cm5zIE5VTEwgc3RyaW5nCkBAIC02MTQsNyArNDQxLDcg
QEAgSlNWYWx1ZSogSlNDbGlwYm9hcmRQcm90b3R5cGVGdW5jdGlvbjo6YwogICAgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJkpTQ2xpcGJvYXJkOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIFdlYkNvcmU6OkNsaXBib2FyZCogY2xpcGJv
YXJkID0gc3RhdGljX2Nhc3Q8SlNDbGlwYm9hcmQqPih0aGlzT2JqKS0+aW1wbCgpOworICAgIENs
aXBib2FyZCogY2xpcGJvYXJkID0gc3RhdGljX2Nhc3Q8SlNDbGlwYm9hcmQqPih0aGlzT2JqKS0+
aW1wbCgpOwogICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBKU0NsaXBib2FyZDo6Q2xl
YXJEYXRhOgogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApIHsKQEAgLTY3MSwxNCAr
NDk4LDE0IEBAIEpTVmFsdWUqIEpTQ2xpcGJvYXJkUHJvdG90eXBlRnVuY3Rpb246OmMKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IFdlYkNvcmU6OkNsaXBib2FyZCogb2JqKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IENsaXBib2FyZCogb2JqKQogewotICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxXZWJDb3JlOjpD
bGlwYm9hcmQsIEpTQ2xpcGJvYXJkPihleGVjLCBvYmopOworICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxDbGlwYm9hcmQsIEpTQ2xpcGJvYXJkPihleGVjLCBvYmopOwogfQogCi1XZWJDb3JlOjpD
bGlwYm9hcmQqIHRvQ2xpcGJvYXJkKEpTVmFsdWUqIHZhbCkKK0NsaXBib2FyZCogdG9DbGlwYm9h
cmQoSlNWYWx1ZSogdmFsKQogewogICAgIHJldHVybiB2YWwtPmlzT2JqZWN0KCZKU0NsaXBib2Fy
ZDo6aW5mbykgPyBzdGF0aWNfY2FzdDxKU0NsaXBib2FyZCo+KHZhbCktPmltcGwoKSA6IDA7CiB9
CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2V2ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50
cy5oCShyZXZpc2lvbiAyMzQ4MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMzIgKzI2LDEwMiBAQAogI2luY2x1ZGUgImtqc19kb20u
aCIKICNpbmNsdWRlICJranNfaHRtbC5oIgogCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBX
aW5kb3c7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogICAgIGNsYXNzIENsaXBib2FyZDsK
ICAgICBjbGFzcyBFdmVudDsKLSAgICBjbGFzcyBLZXlib2FyZEV2ZW50OwotICAgIGNsYXNzIE1v
dXNlRXZlbnQ7Ci0gICAgY2xhc3MgTXV0YXRpb25FdmVudDsKLSAgICBjbGFzcyBVSUV2ZW50Owot
fQotCi1uYW1lc3BhY2UgS0pTIHsKIAotICAgIGNsYXNzIFdpbmRvdzsKLSAgICBjbGFzcyBKU0Ns
aXBib2FyZDsKLSAgICAKLSAgICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1Ymxp
YyBXZWJDb3JlOjpFdmVudExpc3RlbmVyIHsKKyAgICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQWJz
dHJhY3RFdmVudExpc3RlbmVyKGJvb2wgSFRNTCA9IGZhbHNlKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OkV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKKyAg
ICAgICAgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoYm9vbCBodG1sID0gZmFsc2UpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVudCk7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFdmVudExpc3RlbmVyKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3QgPSAwOwotICAgICAgICB2
aXJ0dWFsIFdpbmRvdyogd2luZG93T2JqKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtK
Uzo6SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtK
Uzo6V2luZG93KiB3aW5kb3dPYmooKSBjb25zdCA9IDA7CisKICAgICBwcml2YXRlOgotICAgICAg
ICBib29sIGh0bWw7CisgICAgICAgIGJvb2wgbV9odG1sOwogICAgIH07CiAKICAgICBjbGFzcyBK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5l
ciB7CiAgICAgcHVibGljOgotICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU09i
amVjdCogbGlzdGVuZXIsIFdpbmRvdyosIGJvb2wgSFRNTCA9IGZhbHNlKTsKKyAgICAgICAgSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoS0pTOjpKU09iamVjdCogbGlzdGVuZXIsIEtKUzo6V2lu
ZG93KiwgYm9vbCBodG1sID0gZmFsc2UpOwogICAgICAgICB2aXJ0dWFsIH5KU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcigpOwotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBsaXN0ZW5lck9iaigp
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFdpbmRvdyogd2luZG93T2JqKCkgY29uc3Q7CisKKyAg
ICAgICAgdmlydHVhbCBLSlM6OkpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIEtKUzo6V2luZG93KiB3aW5kb3dPYmooKSBjb25zdDsKICAgICAgICAgdm9pZCBj
bGVhcldpbmRvd09iaigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgSlNPYmplY3QqIGxpc3RlbmVyOwotICAgICAgICBXaW5kb3cqIHdpbjsK
KyAgICAgICAgS0pTOjpKU09iamVjdCogbV9saXN0ZW5lcjsKKyAgICAgICAgS0pTOjpXaW5kb3cq
IG1fd2luOwogICAgIH07CiAKICAgICBjbGFzcyBKU0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNB
YnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNFdmVudExpc3Rl
bmVyKEpTT2JqZWN0KiBsaXN0ZW5lciwgV2luZG93KiwgYm9vbCBIVE1MID0gZmFsc2UpOworICAg
ICAgICBKU0V2ZW50TGlzdGVuZXIoS0pTOjpKU09iamVjdCogbGlzdGVuZXIsIEtKUzo6V2luZG93
KiwgYm9vbCBodG1sID0gZmFsc2UpOwogICAgICAgICB2aXJ0dWFsIH5KU0V2ZW50TGlzdGVuZXIo
KTsKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogbGlzdGVuZXJPYmooKSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCBXaW5kb3cqIHdpbmRvd09iaigpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwg
S0pTOjpKU09iamVjdCogbGlzdGVuZXJPYmooKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBLSlM6
OldpbmRvdyogd2luZG93T2JqKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2xlYXJXaW5kb3dPYmoo
KTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgbXV0YWJsZSBQcm90ZWN0ZWRQdHI8SlNPYmpl
Y3Q+IGxpc3RlbmVyOwotICAgIHByaXZhdGU6Ci0gICAgICAgIFByb3RlY3RlZFB0cjxXaW5kb3c+
IHdpbjsKLSAgICB9OworICAgICAgICBtdXRhYmxlIEtKUzo6UHJvdGVjdGVkUHRyPEtKUzo6SlNP
YmplY3Q+IG1fbGlzdGVuZXI7CiAKLSAgICBjbGFzcyBKU0xhenlFdmVudExpc3RlbmVyIDogcHVi
bGljIEpTRXZlbnRMaXN0ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBKU0xhenlFdmVudExp
c3RlbmVyKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIGNvZGUsIFdpbmRvdyosIFdlYkNvcmU6Ok5vZGUqLCBpbnQgbGluZW5vID0gMCk7
Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3Q7CiAgICAgcHJp
dmF0ZToKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmVudFBhcmFtZXRlck5hbWUoKSBjb25z
dDsKLSAgICAgICAgdm9pZCBwYXJzZUNvZGUoKSBjb25zdDsKLQotICAgICAgICBtdXRhYmxlIFdl
YkNvcmU6OlN0cmluZyBtX2Z1bmN0aW9uTmFtZTsKLSAgICAgICAgbXV0YWJsZSBXZWJDb3JlOjpT
dHJpbmcgY29kZTsKLSAgICAgICAgbXV0YWJsZSBib29sIHBhcnNlZDsKLSAgICAgICAgaW50IGxp
bmVOdW1iZXI7Ci0gICAgICAgIFdlYkNvcmU6Ok5vZGUqIG9yaWdpbmFsTm9kZTsKKyAgICAgICAg
S0pTOjpQcm90ZWN0ZWRQdHI8S0pTOjpXaW5kb3c+IG1fd2luOwogICAgIH07CiAKLSAgICBKU1Zh
bHVlKiBnZXROb2RlRXZlbnRMaXN0ZW5lcihXZWJDb3JlOjpOb2RlKiBuLCBjb25zdCBXZWJDb3Jl
OjpBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7Ci0KLSAgICBjbGFzcyBET01FdmVudCA6IHB1Ymxp
YyBET01PYmplY3QgeworICAgIGNsYXNzIEpTTGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNF
dmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERPTUV2ZW50KEV4ZWNTdGF0ZSos
IFdlYkNvcmU6OkV2ZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgfkRPTUV2ZW50KCk7CisgICAgICAg
IEpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0
cmluZyYgY29kZSwgS0pTOjpXaW5kb3cqLCBOb2RlKiwgaW50IGxpbmVOdW1iZXIgPSAwKTsKIAot
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgaW50IGF0dHIg
PSBOb25lKTsKLSAgICAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0
b2tlbiwgSlNWYWx1ZSosIGludCBhdHRyKTsKLQotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwotCi0gICAgICAgIGVudW0geyAKLSAgICAgICAgICAgIFR5
cGUsIFRhcmdldCwgQ3VycmVudFRhcmdldCwgRXZlbnRQaGFzZSwKLSAgICAgICAgICAgIEJ1YmJs
ZXMsIENhbmNlbGFibGUsIFRpbWVTdGFtcCwgU3RvcFByb3BhZ2F0aW9uLAotICAgICAgICAgICAg
UHJldmVudERlZmF1bHQsIEluaXRFdmVudCwKLQotICAgICAgICAgICAgLy8gTVMgSUUgZXF1aXZh
bGVudHMKLSAgICAgICAgICAgIFNyY0VsZW1lbnQsIFJldHVyblZhbHVlLCBDYW5jZWxCdWJibGUs
IENsaXBib2FyZERhdGEsCi0gICAgICAgICAgICBEYXRhVHJhbnNmZXIKLSAgICAgICAgfTsKKyAg
ICAgICAgdmlydHVhbCBLSlM6OkpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwogCi0gICAg
ICAgIFdlYkNvcmU6OkV2ZW50KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIGV2ZW50UGFyYW1l
dGVyTmFtZSgpIGNvbnN0OworICAgICAgICB2b2lkIHBhcnNlQ29kZSgpIGNvbnN0OwogCi0gICAg
cHJvdGVjdGVkOgotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnQ+IG1faW1wbDsKKyAgICAg
ICAgbXV0YWJsZSBTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CisgICAgICAgIG11dGFibGUgU3RyaW5n
IG1fY29kZTsKKyAgICAgICAgbXV0YWJsZSBib29sIG1fcGFyc2VkOworICAgICAgICBpbnQgbV9s
aW5lTnVtYmVyOworICAgICAgICBOb2RlKiBtX29yaWdpbmFsTm9kZTsKICAgICB9OwogCi0gICAg
SlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpFdmVudCopOwotICAgIFdlYkNvcmU6
OkV2ZW50KiB0b0V2ZW50KEpTVmFsdWUqKTsgLy8gcmV0dXJucyAwIGlmIHZhbHVlIGlzIG5vdCBh
IERPTUV2ZW50IG9iamVjdAotCi0gICAgS0pTX0RFRklORV9QUk9UT1RZUEUoRE9NRXZlbnRQcm90
b3R5cGUpCisgICAgS0pTOjpKU1ZhbHVlKiBnZXROb2RlRXZlbnRMaXN0ZW5lcihOb2RlKiwgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwogCi0gICAgY2xhc3MgSlNDbGlwYm9hcmQgOiBw
dWJsaWMgRE9NT2JqZWN0IHsKKyAgICBjbGFzcyBKU0NsaXBib2FyZCA6IHB1YmxpYyBLSlM6OkRP
TU9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0NsaXBib2FyZFByb3RvdHlwZUZ1bmN0
aW9uOwogICAgIHB1YmxpYzoKLSAgICAgICAgSlNDbGlwYm9hcmQoRXhlY1N0YXRlKiwgV2ViQ29y
ZTo6Q2xpcGJvYXJkKiBkcyk7CisgICAgICAgIEpTQ2xpcGJvYXJkKEtKUzo6RXhlY1N0YXRlKiwg
Q2xpcGJvYXJkKik7CiAgICAgICAgIHZpcnR1YWwgfkpTQ2xpcGJvYXJkKCk7CiAKLSAgICAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIGludCBhdHRyID0gTm9uZSk7
Ci0gICAgICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpT
VmFsdWUqLCBpbnQgYXR0cik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5
U2xvdCYpOworICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
KiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChLSlM6OkV4ZWNT
dGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6SlNWYWx1ZSosIGludCBhdHRyID0g
S0pTOjpOb25lKTsKKyAgICAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
KiwgaW50IHRva2VuLCBLSlM6OkpTVmFsdWUqLCBpbnQgYXR0cik7CiAKLSAgICAgICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKyAgICAgICAgdmlydHVhbCBjb25z
dCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAg
ICAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87CiAKICAgICAgICAgZW51bSB7
IENsZWFyRGF0YSwgR2V0RGF0YSwgU2V0RGF0YSwgVHlwZXMsIFNldERyYWdJbWFnZSwgRHJvcEVm
ZmVjdCwgRWZmZWN0QWxsb3dlZCB9OwogCi0gICAgICAgIFdlYkNvcmU6OkNsaXBib2FyZCogaW1w
bCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorICAgICAgICBDbGlwYm9hcmQqIGlt
cGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZlB0cjxXZWJDb3JlOjpDbGlwYm9hcmQ+IG1faW1wbDsKKyAgICAgICAgUmVmUHRyPENs
aXBib2FyZD4gbV9pbXBsOwogICAgIH07CiAKLSAgICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSos
IFdlYkNvcmU6OkNsaXBib2FyZCopOwotICAgIFdlYkNvcmU6OkNsaXBib2FyZCogdG9DbGlwYm9h
cmQoSlNWYWx1ZSopOworICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIENs
aXBib2FyZCopOworICAgIENsaXBib2FyZCogdG9DbGlwYm9hcmQoS0pTOjpKU1ZhbHVlKik7CiAK
IH0gLy8gbmFtZXNwYWNlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCShyZXZpc2lv
biAyMzQ4MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFt
ZTsKICAgICBjbGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSlNET01XaW5kb3c7CisgICAgY2xh
c3MgSlNFdmVudExpc3RlbmVyOworICAgIGNsYXNzIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
OwogICAgIGNsYXNzIE5vZGU7CiB9CiAKQEAgLTM5LDkgKzQxLDYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgY2xhc3MgQmFySW5mbzsKICAgICBjbGFzcyBGcmFtZUFycmF5OwogICAgIGNsYXNzIEhp
c3Rvcnk7Ci0gICAgY2xhc3MgSlNFdmVudExpc3RlbmVyOwotICAgIGNsYXNzIEpTTGF6eUV2ZW50
TGlzdGVuZXI7Ci0gICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI7CiAgICAgY2xh
c3MgTG9jYXRpb247CiAgICAgY2xhc3MgUGF1c2VkVGltZW91dDsKICAgICBjbGFzcyBTY2hlZHVs
ZWRBY3Rpb247CkBAIC0xNDEsMTYgKzE0MCwxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBCYXJJ
bmZvICp0b29sYmFyKEV4ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgLy8gRmluZHMgYSB3cmFwcGVy
IG9mIGEgSlMgRXZlbnRMaXN0ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KLSAg
ICBKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRt
bCA9IGZhbHNlKTsKKyAgICBXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlz
dGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKIAogICAgIC8vIEZpbmRzIG9yIGNy
ZWF0ZXMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBv
YmplY3QgaXMgR0MtcHJvdGVjdGVkLgotICAgIEpTRXZlbnRMaXN0ZW5lciAqZmluZE9yQ3JlYXRl
SlNFdmVudExpc3RlbmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CisgICAgV2ViQ29y
ZTo6SlNFdmVudExpc3RlbmVyICpmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSos
IGJvb2wgaHRtbCA9IGZhbHNlKTsKIAogICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEdDLXVu
cHJvdGVjdGVkIEpTIEV2ZW50TGlzdGVuZXIsIHJldHVybnMgMCBpZiBubyBleGlzdGluZyBvbmUu
Ci0gICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGZpbmRKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcihKU1ZhbHVlKiwgYm9vbCBodG1sID0gZmFsc2UpOworICAgIFdlYkNvcmU6OkpTVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVyKiBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNW
YWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKIAogICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3
cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMg
Kk5PVCogR0MtcHJvdGVjdGVkLgotICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyICpmaW5k
T3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiwgYm9vbCBodG1sID0g
ZmFsc2UpOworICAgIFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyICpmaW5kT3JD
cmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiwgYm9vbCBodG1sID0gZmFs
c2UpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC0xNjAsOCArMTU5LDggQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgLy8gU2V0IGEgcGxhY2UgdG8gcHV0IGEgZGlhbG9nIHJldHVybiB2YWx1ZSB3
aGVuIHRoZSB3aW5kb3cgaXMgY2xlYXJlZC4KICAgICB2b2lkIHNldFJldHVyblZhbHVlU2xvdChK
U1ZhbHVlICoqc2xvdCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8SlNPYmplY3QqLCBKU0V2ZW50
TGlzdGVuZXIqPiBMaXN0ZW5lcnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0Kiwg
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPiBVbnByb3RlY3RlZExpc3RlbmVyc01hcDsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8SlNPYmplY3QqLCBXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXIqPiBM
aXN0ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgV2ViQ29yZTo6SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPiBVbnByb3RlY3RlZExpc3RlbmVyc01hcDsKICAgICAK
ICAgICBMaXN0ZW5lcnNNYXAmIGpzRXZlbnRMaXN0ZW5lcnMoKTsKICAgICBMaXN0ZW5lcnNNYXAm
IGpzSFRNTEV2ZW50TGlzdGVuZXJzKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
VXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0
eS5tbQkocmV2aXNpb24gMjM0ODMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0
eS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBzdGF0aWMgaW5saW5lIGlkIGNy
ZWF0ZURPTVdyYXBwZXIoS0pTOjpKCiAgICAgV1JBUChDU1NTdHlsZURlY2xhcmF0aW9uKQogICAg
IFdSQVAoQ1NTVmFsdWUpCiAgICAgV1JBUChDb3VudGVyKQorICAgIFdSQVAoRXZlbnQpCiAgICAg
V1JBUChIVE1MT3B0aW9uc0NvbGxlY3Rpb24pCiAgICAgV1JBUChNZWRpYUxpc3QpCiAgICAgV1JB
UChOYW1lZE5vZGVNYXApCkBAIC05Nyw3ICs5OCw2IEBAIHN0YXRpYyBpbmxpbmUgaWQgY3JlYXRl
RE9NV3JhcHBlcihLSlM6OkoKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkRPTSMjY2xh
c3NOYW1lOjppbmZvKSkgXAogICAgICAgICAgICAgcmV0dXJuIFtvYmpjX2dldENsYXNzKCJET00i
ICNjbGFzc05hbWUpIF93cmFwIyNjbGFzc05hbWU6c3RhdGljX2Nhc3Q8RE9NIyNjbGFzc05hbWUq
PihvYmplY3QpLT5pbXBsKCldOwogCi0gICAgV1JBUChFdmVudCkKICAgICBXUkFQKFJHQkNvbG9y
KQogICAgIFdSQVAoUmVjdCkKICAgICBXUkFQKFN0eWxlU2hlZXRMaXN0KQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMzQ4MykK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCw3ICsxNTgsNyBAQCBzdWIgVXNlc01hbnVhbFRvSlNJbXBsZW1lbnRhdGlv
bgogewogICAgIG15ICR0eXBlID0gc2hpZnQ7CiAKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Tm9kZSIgb3IgJHR5cGUgZXEgIkRvY3VtZW50IiBvciAkdHlwZSBlcSAiSFRNTENvbGxlY3Rpb24i
IG9yICR0eXBlIGVxICJTVkdQYXRoU2VnIiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIgb3IgJHR5
cGUgZXEgIkNTU1J1bGUiIG9yICR0eXBlIGVxICJDU1NWYWx1ZSI7CisgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIk5vZGUiIG9yICR0eXBlIGVxICJEb2N1bWVudCIgb3IgJHR5cGUgZXEgIkhUTUxD
b2xsZWN0aW9uIiBvciAkdHlwZSBlcSAiU1ZHUGF0aFNlZyIgb3IgJHR5cGUgZXEgIlN0eWxlU2hl
ZXQiIG9yICR0eXBlIGVxICJDU1NSdWxlIiBvciAkdHlwZSBlcSAiQ1NTVmFsdWUiIG9yICR0eXBl
IGVxICJFdmVudCI7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzNjksNyArMTM2OSw3IEBAIHN1
YiBOYXRpdmVUb0pTVmFsdWUKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1v
ZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKIAogICAgIHJldHVybiAianNCb29sZWFuKCR2YWx1ZSki
IGlmICR0eXBlIGVxICJib29sZWFuIjsKLSAgICByZXR1cm4gImpzTnVtYmVyKCR2YWx1ZSkiIGlm
ICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJTVkdQ
YWludFR5cGUiOworICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVlKSIgaWYgJGNvZGVHZW5lcmF0
b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSIgb3Ig
JHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3Ry
aW5nVHlwZSgkdHlwZSkpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcu
aCJ9ID0gMTsKQEAgLTE0MzUsOSArMTQzNSw2IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAg
ICAgJGltcGxJbmNsdWRlc3siRXZlbnRUYXJnZXROb2RlLmgifSA9IDE7CiAgICAgICAgICRpbXBs
SW5jbHVkZXN7IkpTRXZlbnRUYXJnZXROb2RlLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVk
ZXN7Imtqc19kb20uaCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnQiKSB7Ci0g
ICAgICAgICRpbXBsSW5jbHVkZXN7Imtqc19ldmVudHMuaCJ9ID0gMTsKLSAgICAgICAgJGltcGxJ
bmNsdWRlc3siRXZlbnQuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUxpc3Qi
KSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTJHR5cGUuaCJ9ID0gMTsKICAgICAgICAgJGlt
cGxJbmNsdWRlc3siJHR5cGUuaCJ9ID0gMTsKQEAgLTE0NTIsNiArMTQ0OSw5IEBAIHN1YiBOYXRp
dmVUb0pTVmFsdWUKICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0gPSAxOwog
ICAgIH0gZWxzaWYgKCR0eXBlIGVxICJET01PYmplY3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgifSA9IDE7CisgICAgfSBlbHNpZiAoJHR5
cGUgZXEgIkNsaXBib2FyZCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2V2ZW50cy5o
In0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJDbGlwYm9hcmQuaCJ9ID0gMTsKICAgICB9
IGVsc2lmICgkdHlwZSA9fiAvU1ZHUGF0aFNlZy8pIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3si
SlMkdHlwZS5oIn0gPSAxOwogICAgICAgICAkam9pbmVkTmFtZSA9ICR0eXBlOwpJbmRleDogV2Vi
Q29yZS9kb20vRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudC5oCShyZXZp
c2lvbiAyMzQ4MykKKysrIFdlYkNvcmUvZG9tL0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDcgKzkzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBJRSBFeHRlbnNp
b25zCiAgICAgICAgIEV2ZW50VGFyZ2V0KiBzcmNFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGFy
Z2V0KCk7IH0gLy8gTVNJRSBleHRlbnNpb24gLSAidGhlIG9iamVjdCB0aGF0IGZpcmVkIHRoZSBl
dmVudCIKLSAgICAgICAgYm9vbCByZXR1cm5WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2RlZmF1
bHRQcmV2ZW50ZWQ7IH0KKworICAgICAgICBib29sIHJldHVyblZhbHVlKCkgY29uc3QgeyByZXR1
cm4gIWRlZmF1bHRQcmV2ZW50ZWQoKTsgfQorICAgICAgICB2b2lkIHNldFJldHVyblZhbHVlKGJv
b2wgcmV0dXJuVmFsdWUpIHsgc2V0RGVmYXVsdFByZXZlbnRlZCghcmV0dXJuVmFsdWUpOyB9CisK
ICAgICAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmREYXRhKCkgY29uc3QgeyByZXR1cm4gaXNDbGlw
Ym9hcmRFdmVudCgpID8gY2xpcGJvYXJkKCkgOiAwOyB9CiAgICAgICAgIENsaXBib2FyZCogZGF0
YVRyYW5zZmVyKCkgY29uc3QgeyByZXR1cm4gaXNNb3VzZUV2ZW50KCkgPyBjbGlwYm9hcmQoKSA6
IDA7IH0KIApJbmRleDogV2ViQ29yZS9kb20vRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0V2ZW50LmlkbAkocmV2aXNpb24gMjM0ODMpCisrKyBXZWJDb3JlL2RvbS9FdmVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDcgKzIx
LDcgQEAKIG1vZHVsZSBldmVudHMgewogCiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MjoKLSAgICBpbnRlcmZhY2UgW0xlZ2FjeVBhcmVudD1LSlM6OkRPTUV2ZW50LCBHZW5lcmF0ZUNv
bnN0cnVjdG9yLCBPYmpDQ3VzdG9tSW50ZXJuYWxJbXBsXSBFdmVudCB7CisgICAgaW50ZXJmYWNl
IFtHZW5lcmF0ZUNvbnN0cnVjdG9yLCBPYmpDQ3VzdG9tSW50ZXJuYWxJbXBsXSBFdmVudCB7CiAK
ICAgICAgICAgLy8gRE9NIFBoYXNlVHlwZQogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBD
QVBUVVJJTkdfUEhBU0UgICAgID0gMTsKQEAgLTQ4LDcgKzQ4LDYgQEAgbW9kdWxlIGV2ZW50cyB7
CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENIQU5HRSAgICAgICAgICAgICAgPSAzMjc2
ODsKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgdHlwZTsKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEV2ZW50VGFyZ2V0ICAgICAgdGFyZ2V0OwogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRXZlbnRUYXJnZXQgICAgICBjdXJyZW50VGFyZ2V0OwpAQCAtNTgsOSArNTcsMTgg
QEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01UaW1lU3Rh
bXAgICAgIHRpbWVTdGFtcDsKICAgICAgICAgdm9pZCAgICAgICAgICAgICAgIHN0b3BQcm9wYWdh
dGlvbigpOwogICAgICAgICB2b2lkICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQoKTsKLSAg
ICAgICAgW09sZFN0eWxlT2JqQ10gdm9pZCBpbml0RXZlbnQoaW4gRE9NU3RyaW5nIGV2ZW50VHlw
ZUFyZywgCisgICAgICAgIFtPbGRTdHlsZU9iakNdIHZvaWQgaW5pdEV2ZW50KGluIEF0b21pY1N0
cmluZyBldmVudFR5cGVBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZyk7CisKKyAgICAgICAgLy8gSUUgRXh0
ZW5zaW9ucworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRXZlbnRUYXJnZXQgICAgICBzcmNF
bGVtZW50OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiAgICAgICAgICByZXR1
cm5WYWx1ZTsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgY2Fu
Y2VsQnViYmxlOworCisjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKQorICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbV0gQ2xpcGJvYXJkICAgICAgICBjbGlwYm9hcmREYXRh
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbV0gQ2xpcGJvYXJkICAgICAgICBk
YXRhVHJhbnNmZXI7CiAjZW5kaWYKIAogICAgIH07CkluZGV4OiBXZWJDb3JlL2tzdmcyL2V2ZW50
cy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9l
dmVudHMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMzQ4MykKKysrIFdlYkNv
cmUva3N2ZzIvZXZlbnRzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBKU1NW
R0xhenlFdmVudExpc3RlbmVyIDogcHVibGljIEtKUzo6SlNMYXp5RXZlbnRMaXN0ZW5lciB7Cisg
ICAgY2xhc3MgSlNTVkdMYXp5RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0xhenlFdmVudExpc3Rl
bmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTU1ZHTGF6eUV2ZW50TGlzdGVuZXIoY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgS0pTOjpXaW5kb3cqLCBO
b2RlKiwgaW50IGxpbmVubyA9IDApOwogICAgIHByaXZhdGU6CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MzQ4MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEzIEBACisyMDA3LTA2LTEyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRlc3QgZm9y
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTExCisgICAgICAgIEF1
dG9nZW5lcmF0ZSBFdmVudCBKUyBiaW5kaW5nCisKKyAgICAgICAgKiBmYXN0L2RvbS9wcm90b3R5
cGUtY2hhaW4tZXhwZWN0ZWQudHh0OiBET01FdmVudCBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUK
KyAgICAgICAgcHJvdG90eXBlIGNoYWluIQorCiAyMDA3LTA2LTEwICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtpbi4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWNoYWluLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMjM0ODMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUt
Y2hhaW4tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00MiwzNCArNDIsMjggQEAgTk9U
RTogVGhpcyB0ZXN0IHdpbGwgc3RhcnQgZmFpbGluZyBpZiB5bwogCiBbb2JqZWN0IEhUTUxGb3Jt
RWxlbWVudFByb3RvdHlwZV0KIAotLS0tLS0gW29iamVjdCBVSUV2ZW50XSAoNCBwcm90b3R5cGVz
KSAtLS0tLQorLS0tLS0gW29iamVjdCBVSUV2ZW50XSAoMyBwcm90b3R5cGVzKSAtLS0tLQogCiBb
b2JqZWN0IE9iamVjdF0KIAotW29iamVjdCBET01FdmVudFByb3RvdHlwZV0KLQogW29iamVjdCBF
dmVudFByb3RvdHlwZV0KIAogW29iamVjdCBVSUV2ZW50UHJvdG90eXBlXQogCi0tLS0tLSBbb2Jq
ZWN0IE1vdXNlRXZlbnRdICg1IHByb3RvdHlwZXMpIC0tLS0tCistLS0tLSBbb2JqZWN0IE1vdXNl
RXZlbnRdICg0IHByb3RvdHlwZXMpIC0tLS0tCiAKIFtvYmplY3QgT2JqZWN0XQogCi1bb2JqZWN0
IERPTUV2ZW50UHJvdG90eXBlXQotCiBbb2JqZWN0IEV2ZW50UHJvdG90eXBlXQogCiBbb2JqZWN0
IFVJRXZlbnRQcm90b3R5cGVdCiAKIFtvYmplY3QgTW91c2VFdmVudFByb3RvdHlwZV0KIAotLS0t
LS0gW29iamVjdCBLZXlib2FyZEV2ZW50XSAoNSBwcm90b3R5cGVzKSAtLS0tLQorLS0tLS0gW29i
amVjdCBLZXlib2FyZEV2ZW50XSAoNCBwcm90b3R5cGVzKSAtLS0tLQogCiBbb2JqZWN0IE9iamVj
dF0KIAotW29iamVjdCBET01FdmVudFByb3RvdHlwZV0KLQogW29iamVjdCBFdmVudFByb3RvdHlw
ZV0KIAogW29iamVjdCBVSUV2ZW50UHJvdG90eXBlXQo=
</data>
<flag name="review"
          id="6179"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15042</attachid>
            <date>2007-06-14 23:38:31 -0700</date>
            <delta_ts>2007-06-26 10:28:14 -0700</delta_ts>
            <desc>Update patch</desc>
            <filename>autoEvent2.diff</filename>
            <type>text/plain</type>
            <size>49357</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzU0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDctMDYtMTQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTEKKyAgICAgICAg
QXV0b2dlbmVyYXRlIEV2ZW50IEpTIGJpbmRpbmcKKworICAgICAgICAtIE1vdmVzIHRoZSBkYXRh
VHJhbnNmZXIgbWV0aG9kIGludG8gTW91c2VFdmVudCB3aGVyZSBpdCBzaG91bGQgYmUuCisgICAg
ICAgIC0gTW92ZXMgdGhlIEpTRXZlbnRMaXN0ZW5lcnMgYW5kIEpTQ2xpcGJvYXJkIGludG8gdGhl
IFdlYkNvcmUgbmFtZXNwYWNlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnQ6OmNsaXBib2FyZERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aXNIVE1MRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXI6On5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmopOgorICAgICAgICAoV2ViQ29y
ZTo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OndpbmRvd09iaik6CisgICAgICAgIChXZWJD
b3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y2xlYXJXaW5kb3dPYmopOgorICAgICAg
ICAoV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6Om1hcmspOgorICAgICAgICAo
V2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFdmVudExpc3RlbmVyOjp+SlNFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmopOgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudExpc3RlbmVyOjp3aW5kb3dPYmopOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3Rl
bmVyOjpjbGVhcldpbmRvd09iaik6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3Rl
bmVyOjpKU0xhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50
TGlzdGVuZXI6Omxpc3RlbmVyT2JqKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlz
dGVuZXI6OnBhcnNlQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXROb2RlRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6SlNDbGlwYm9hcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDbGlwYm9hcmQ6OnB1dFZhbHVlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDbGlwYm9hcmRQcm90b3R5cGVGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0NsaXBib2FyZCk6CisgICAgICAg
ICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9h
cmQ6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6aW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5oOgorICAgICAgICAqIGJpbmRpbmdzL29i
amMvRE9NVXRpbGl0eS5tbToKKyAgICAgICAgKEtKUzo6Y3JlYXRlRE9NV3JhcHBlcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogZG9t
L0V2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6cmV0dXJuVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnQ6OnNldFJldHVyblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50OjpjbGlwYm9hcmREYXRhKToKKyAgICAgICAgKiBkb20vRXZlbnQuaWRsOgorICAgICAgICAq
IGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50OjpkYXRhVHJh
bnNmZXIpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmlkbDoKKyAgICAgICAgKiBrc3ZnMi9l
dmVudHMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oOgorCiAyMDA3LTA2LTE0ICBHZW9yZ2UgU3Rh
aWtvcyAgPHN0YWlrb3NAa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXJzLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIz
NTQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTI3NTksNiArMjc1OSw3IEBACiAJCUJDMzA1Qzc5MEMwNzZCQjMwMENEMjBG
MCAvKiBKU0hUTUxPYmplY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzA1Qzc3MEMwNzZCQjMwMENEMjBGMCAvKiBKU0hUTUxPYmpl
Y3RFbGVtZW50LmNwcCAqLzsgfTsKIAkJQkMzMDVDN0EwQzA3NkJCMzAwQ0QyMEYwIC8qIEpTSFRN
TE9iamVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDMzA1Qzc4MEMwNzZCQjMwMENEMjBGMCAvKiBKU0hUTUxPYmplY3RFbGVtZW50Lmgg
Ki87IH07CiAJCUJDMzA1Q0E0MEMwNzgxQkIwMENEMjBGMCAvKiBKU0hUTUxPYmplY3RFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMzA1Q0EzMEMwNzgxQkIwMENEMjBGMCAvKiBKU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNw
cCAqLzsgfTsKKwkJQkMzNEI4REIwQzFGOUZEMTAwNTE4OUUyIC8qIEpTRXZlbnRDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNEI4REEw
QzFGOUZEMTAwNTE4OUUyIC8qIEpTRXZlbnRDdXN0b20uY3BwICovOyB9OwogCQlCQzNDMzlCNjBD
MEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQzM5QjQwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVk
aWFMaXN0LmNwcCAqLzsgfTsKIAkJQkMzQzM5QjcwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzND
MzlCNTBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCAqLzsgfTsKIAkJQkMzRkNBQTkw
QUMzREI1ODAwQkE1NEFEIC8qIFBsYXRmb3JtU2Nyb2xsQmFyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNGQ0FBODBBQzNEQjU4MDBCQTU0QUQgLyog
UGxhdGZvcm1TY3JvbGxCYXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9
OwpAQCAtNjA1MCw2ICs2MDUxLDcgQEAKIAkJQkMzMDVDNzcwQzA3NkJCMzAwQ0QyMEYwIC8qIEpT
SFRNTE9iamVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTSFRNTE9iamVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzMwNUM3ODBDMDc2QkIzMDBDRDIwRjAgLyogSlNIVE1MT2JqZWN0RWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MT2JqZWN0RWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMwNUNBMzBDMDc4MUJCMDBDRDIwRjAgLyogSlNI
VE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQkMzNEI4REEwQzFGOUZEMTAwNTE4OUUyIC8qIEpTRXZlbnRDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFdmVudEN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDM0IzNjQ3MDVDOUQ1RTIwMEU0MjkwMiAv
KiBBdG9taWNTdHJpbmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEF0b21pY1N0cmluZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDM0MzOUI0MEMwRDNEOEQwMDVG
NEQ3QSAvKiBKU01lZGlhTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzND
MzlCNTBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NDY2LDggKzY0NjgsNiBAQAogCQkxNERGQjMzRjBBN0RGNzYzMDAxOEY3NjkgLyogRGVy
aXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQlCQ0NCQUQzRTBDMThDMTQyMDBDRTg5MEYgLyogSlNIVE1MQ29sbGVjdGlvbi5jcHAgKi8s
Ci0JCQkJQkNDQkFEM0YwQzE4QzE0MjAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb24uaCAqLywK
IAkJCQk2NURGMzFEODA5RDFDMTIyMDAwQkUzMjUgLyogSlNBdHRyLmNwcCAqLywKIAkJCQk2NURG
MzFEOTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggKi8sCiAJCQkJNjVERjMyMzMwOUQxREU2
NTAwMEJFMzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuY3BwICovLApAQCAtNjU1MCw2ICs2NTUwLDgg
QEAKIAkJCQlBODBFN0U5NTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MQnV0dG9uRWxlbWVudC5o
ICovLAogCQkJCTkzOEU2NjVGMDlGMDlCODEwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50
LmNwcCAqLywKIAkJCQk5MzhFNjY2MTA5RjA5Qjg3MDA4QTQ4RUMgLyogSlNIVE1MQ2FudmFzRWxl
bWVudC5oICovLAorCQkJCUJDQ0JBRDNFMEMxOEMxNDIwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0
aW9uLmNwcCAqLywKKwkJCQlCQ0NCQUQzRjBDMThDMTQyMDBDRTg5MEYgLyogSlNIVE1MQ29sbGVj
dGlvbi5oICovLAogCQkJCTFBODVCMUUwMEExQjI0MDUwMEQ4Qzg3QyAvKiBKU0hUTUxEaXJlY3Rv
cnlFbGVtZW50LmNwcCAqLywKIAkJCQkxQTg1QjFFMTBBMUIyNDA1MDBEOEM4N0MgLyogSlNIVE1M
RGlyZWN0b3J5RWxlbWVudC5oICovLAogCQkJCTFBODVCMkI0MEExQjJBQzcwMEQ4Qzg3QyAvKiBK
U0hUTUxEaXZFbGVtZW50LmNwcCAqLywKQEAgLTkyOTIsNiArOTI5NCw3IEBACiAJCQkJQkMyMEZC
N0UwQzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFsdWVDdXN0b20uY3BwICovLAogCQkJCTkyOTI2
NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQ0Q5
QzI1RTBDMTdBQTY3MDA1QzkwQTIgLyogSlNET01XaW5kb3dDdXN0b20uY3BwICovLAorCQkJCUJD
MzRCOERBMEMxRjlGRDEwMDUxODlFMiAvKiBKU0V2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzRF
REVGMzBDMDhGM0ZCMDA3RURENDkgLyogSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAgKi8s
CiAJCQkJQkNDQkFEM0EwQzE4QkZGODAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb25DdXN0b20u
Y3BwICovLAogCQkJCUJDNTE1ODBBMEMwM0Q0MDQwMDhCQjBFRSAvKiBKU0hUTUxEb2N1bWVudEN1
c3RvbS5jcHAgKi8sCkBAIC0xMTU4OSw3ICsxMTU5Miw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJ
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87Ci0JCQlj
b21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwogCQkJaGFzU2Nhbm5lZEZvckVuY29k
aW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTEyOTc2LDYg
KzEyOTc4LDcgQEAKIAkJCQlCQ0Q5QzJDMjBDMTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NCQUQzQjBDMThCRkY4MDBDRTg5MEYgLyogSlNIVE1M
Q29sbGVjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NCQUQ0MDBDMThDMTQy
MDBDRTg5MEYgLyogSlNIVE1MQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzM0
QjhEQjBDMUY5RkQxMDA1MTg5RTIgLyogSlNFdmVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNF
dmVudC5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJKU0tleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJKU01vdXNlRXZlbnQuaCIKKyNp
bmNsdWRlICJKU011dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJKU092ZXJmbG93RXZlbnQuaCIK
KyNpbmNsdWRlICJKU1RleHRFdmVudC5oIgorI2luY2x1ZGUgIkpTVUlFdmVudC5oIgorI2luY2x1
ZGUgIkpTV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk92
ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJVSUV2ZW50
LmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgImtqc19ldmVudHMuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitLSlM6OkpTVmFsdWUqIEpTRXZlbnQ6OmNsaXBib2FyZERh
dGEoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltcGwoKS0+aXND
bGlwYm9hcmRFdmVudCgpID8gdG9KUyhleGVjLCBpbXBsKCktPmNsaXBib2FyZERhdGEoKSkgOiBL
SlM6OmpzVW5kZWZpbmVkKCk7Cit9CisKK0tKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0
ZSogZXhlYywgRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQpCisgICAgICAgIHJldHVy
biBLSlM6OmpzTnVsbCgpOworCisgICAgS0pTOjpTY3JpcHRJbnRlcnByZXRlciogaW50ZXJwID0g
c3RhdGljX2Nhc3Q8S0pTOjpTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRlcnBy
ZXRlcigpKTsKKworICAgIEtKUzo6SlNMb2NrIGxvY2s7CisKKyAgICBLSlM6OkRPTU9iamVjdCog
cmV0ID0gaW50ZXJwLT5nZXRET01PYmplY3QoZXZlbnQpOworICAgIGlmIChyZXQpCisgICAgICAg
IHJldHVybiByZXQ7CisKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAg
ICByZXQgPSBuZXcgSlNLZXlib2FyZEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PEtleWJvYXJkRXZl
bnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc1RleHRFdmVudCgpKQorICAgICAg
ICByZXQgPSBuZXcgSlNUZXh0RXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZl
bnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHJldCA9
IG5ldyBKU01vdXNlRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7
CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2hlZWxFdmVudCgpKQorICAgICAgICByZXQgPSBuZXcg
SlNXaGVlbEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkpOworICAg
IGVsc2UgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gbmV3IEpTVUlFdmVu
dChleGVjLCBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVu
dC0+aXNNdXRhdGlvbkV2ZW50KCkpCisgICAgICAgIHJldCA9IG5ldyBKU011dGF0aW9uRXZlbnQo
ZXhlYywgc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAo
ZXZlbnQtPmlzT3ZlcmZsb3dFdmVudCgpKQorICAgICAgICByZXQgPSBuZXcgSlNPdmVyZmxvd0V2
ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihldmVudCkpOworICAgIGVsc2UK
KyAgICAgICAgcmV0ID0gbmV3IEpTRXZlbnQoZXhlYywgZXZlbnQpOworCisgICAgaW50ZXJwLT5w
dXRET01PYmplY3QoZXZlbnQsIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9k
ZS5jcHAJKHJldmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJF
dmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0Tm9kZS5oIgorI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjM1NDEpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxNiArMjYsMTcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0V2
ZW50LmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIK
ICNpbmNsdWRlICJ4bWxodHRwcmVxdWVzdC5oIgogCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVz
dC5sdXQuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIG5hbWVzcGFjZSBLSlMgewog
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBKU1hN
TEh0dHBSZXF1ZXN0IE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogLyogU291cmNl
IGZvciBKU1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlVGFibGUuCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2V2ZW50cy5jcHAJKHJldmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfZXZlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzQgKzM0LDIxIEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRU
YXJnZXROb2RlLmgiCi0jaW5jbHVkZSAiSlNLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiSlNN
b3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiSlNNdXRhdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiSlNP
dmVyZmxvd0V2ZW50LmgiCi0jaW5jbHVkZSAiSlNUZXh0RXZlbnQuaCIKLSNpbmNsdWRlICJKU1do
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCi0j
aW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJU
ZXh0RXZlbnQuaCIKLSNpbmNsdWRlICJVSUV2ZW50LmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudC5o
IgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKIAogI2lu
Y2x1ZGUgImtqc19ldmVudHMubHV0LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOwogdXNpbmcgbmFtZXNwYWNl
IEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1uYW1lc3BhY2UgS0pT
IHsKLQotSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGJv
b2wgX2h0bWwpCi0gICAgOiBodG1sKF9odG1sKQorSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OkpT
QWJzdHJhY3RFdmVudExpc3RlbmVyKGJvb2wgaHRtbCkKKyAgICA6IG1faHRtbChodG1sKQogewog
fQogCkBAIC03Miw3ICs1OSw3IEBAIHZvaWQgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW4KICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBFdmVudCAqZXZlbnQgPSBlbGU7
CisgICAgRXZlbnQqIGV2ZW50ID0gZWxlOwogCiAgICAgSlNPYmplY3QqIGxpc3RlbmVyID0gbGlz
dGVuZXJPYmooKTsKICAgICBpZiAoIWxpc3RlbmVyKQpAQCAtMTQ1LDcgKzEzMiw3IEBAIHZvaWQg
SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICghcmV0dmFsLT5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2ZW50LT5zdG9y
ZXNSZXN1bHRBc1N0cmluZygpKQogICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdChy
ZXR2YWwtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIGlmIChodG1sKSB7CisgICAgICAg
ICAgICBpZiAobV9odG1sKSB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXR2YWxib29sOwogICAg
ICAgICAgICAgICAgIGlmIChyZXR2YWwtPmdldEJvb2xlYW4ocmV0dmFsYm9vbCkgJiYgIXJldHZh
bGJvb2wpCiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOwpAQCAt
MTU5LDUxICsxNDYsNTEgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bgogCiBib29sIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjppc0hUTUxFdmVudExpc3RlbmVyKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaHRtbDsKKyAgICByZXR1cm4gbV9odG1sOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcihKU09iamVjdCogX2xpc3RlbmVyLCBXaW5kb3cqIF93aW4sIGJvb2wg
X2h0bWwpCi0gIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoX2h0bWwpCi0gICwgbGlzdGVuZXIo
X2xpc3RlbmVyKQotICAsIHdpbihfd2luKQotewotICAgIGlmIChfbGlzdGVuZXIpIHsKLSAgICAg
ICAgV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gX2h0bWwgCi0g
ICAgICAgICAgICA/IF93aW4tPmpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IF93
aW4tPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycygpOwotICAgICAgICBsaXN0ZW5lcnMuc2V0
KF9saXN0ZW5lciwgdGhpcyk7CitKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGxpc3RlbmVyLCBXaW5kb3cqIHdpbiwgYm9vbCBo
dG1sKQorICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGh0bWwpCisgICwgbV9saXN0ZW5lcihs
aXN0ZW5lcikKKyAgLCBtX3dpbih3aW4pCit7CisgICAgaWYgKG1fbGlzdGVuZXIpIHsKKyAgICAg
ICAgV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaHRtbCAKKyAg
ICAgICAgICAgID8gbV93aW4tPmpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IG1f
d2luLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgbGlzdGVuZXJzLnNl
dChtX2xpc3RlbmVyLCB0aGlzKTsKICAgICB9CiB9CiAKIEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyOjp+SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoKQogewotICAgIGlmIChsaXN0ZW5lciAm
JiB3aW4pIHsKKyAgICBpZiAobV9saXN0ZW5lciAmJiBtX3dpbikgewogICAgICAgICBXaW5kb3c6
OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0hUTUxFdmVudExpc3RlbmVy
KCkKLSAgICAgICAgICAgID8gd2luLT5qc1VucHJvdGVjdGVkSFRNTEV2ZW50TGlzdGVuZXJzKCkg
OiB3aW4tPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycygpOwotICAgICAgICBsaXN0ZW5lcnMu
cmVtb3ZlKGxpc3RlbmVyKTsKKyAgICAgICAgICAgID8gbV93aW4tPmpzVW5wcm90ZWN0ZWRIVE1M
RXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKTsK
KyAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShtX2xpc3RlbmVyKTsKICAgICB9CiB9CiAKIEpTT2Jq
ZWN0KiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmooKSBjb25zdAogeyAK
LSAgICByZXR1cm4gbGlzdGVuZXI7IAorICAgIHJldHVybiBtX2xpc3RlbmVyOyAKIH0KIAogV2lu
ZG93KiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6d2luZG93T2JqKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gd2luOworICAgIHJldHVybiBtX3dpbjsKIH0KIAogdm9pZCBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcjo6Y2xlYXJXaW5kb3dPYmooKQogewotICAgIHdpbiA9IDA7CisgICAgbV93
aW4gPSAwOwogfQogCiB2b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjptYXJrKCkKIHsK
LSAgICBpZiAobGlzdGVuZXIgJiYgIWxpc3RlbmVyLT5tYXJrZWQoKSkKLSAgICAgICAgbGlzdGVu
ZXItPm1hcmsoKTsKKyAgICBpZiAobV9saXN0ZW5lciAmJiAhbV9saXN0ZW5lci0+bWFya2VkKCkp
CisgICAgICAgIG1fbGlzdGVuZXItPm1hcmsoKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTIy
NiwxNSArMjEzLDE1IEBAIHN0YXRpYyBFdmVudExpc3RlbmVyQ291bnRlciBldmVudExpc3RlbmUK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5l
cihKU09iamVjdCogX2xpc3RlbmVyLCBXaW5kb3cqIF93aW4sIGJvb2wgX2h0bWwpCi0gICAgOiBK
U0Fic3RyYWN0RXZlbnRMaXN0ZW5lcihfaHRtbCkKLSAgICAsIGxpc3RlbmVyKF9saXN0ZW5lcikK
LSAgICAsIHdpbihfd2luKQotewotICAgIGlmIChfbGlzdGVuZXIpIHsKLSAgICAgICAgV2luZG93
OjpMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IF9odG1sCi0gICAgICAgICAgICA/IF93aW4tPmpz
SFRNTEV2ZW50TGlzdGVuZXJzKCkgOiBfd2luLT5qc0V2ZW50TGlzdGVuZXJzKCk7Ci0gICAgICAg
IGxpc3RlbmVycy5zZXQoX2xpc3RlbmVyLCB0aGlzKTsKK0pTRXZlbnRMaXN0ZW5lcjo6SlNFdmVu
dExpc3RlbmVyKEpTT2JqZWN0KiBsaXN0ZW5lciwgV2luZG93KiB3aW4sIGJvb2wgaHRtbCkKKyAg
ICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGh0bWwpCisgICAgLCBtX2xpc3RlbmVyKGxpc3Rl
bmVyKQorICAgICwgbV93aW4od2luKQoreworICAgIGlmIChtX2xpc3RlbmVyKSB7CisgICAgICAg
IFdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBodG1sCisgICAgICAgICAgICA/IG1f
d2luLT5qc0hUTUxFdmVudExpc3RlbmVycygpIDogbV93aW4tPmpzRXZlbnRMaXN0ZW5lcnMoKTsK
KyAgICAgICAgbGlzdGVuZXJzLnNldChtX2xpc3RlbmVyLCB0aGlzKTsKICAgICB9CiAjaWZuZGVm
IE5ERUJVRwogICAgICsrZXZlbnRMaXN0ZW5lckNvdW50ZXIuY291bnQ7CkBAIC0yNDMsMTAgKzIz
MCwxMCBAQCBKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lcihKU09iamVjCiAKIEpTRXZl
bnRMaXN0ZW5lcjo6fkpTRXZlbnRMaXN0ZW5lcigpCiB7Ci0gICAgaWYgKGxpc3RlbmVyICYmIHdp
bikgeworICAgIGlmIChtX2xpc3RlbmVyICYmIG1fd2luKSB7CiAgICAgICAgIFdpbmRvdzo6TGlz
dGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0hUTUxFdmVudExpc3RlbmVyKCkKLSAgICAgICAgICAg
ID8gd2luLT5qc0hUTUxFdmVudExpc3RlbmVycygpIDogd2luLT5qc0V2ZW50TGlzdGVuZXJzKCk7
Ci0gICAgICAgIGxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgICAgICAgICAgPyBtX3dp
bi0+anNIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luLT5qc0V2ZW50TGlzdGVuZXJzKCk7Cisg
ICAgICAgIGxpc3RlbmVycy5yZW1vdmUobV9saXN0ZW5lcik7CiAgICAgfQogI2lmbmRlZiBOREVC
VUcKICAgICAtLWV2ZW50TGlzdGVuZXJDb3VudGVyLmNvdW50OwpAQCAtMjU1LDI4ICsyNDIsMjgg
QEAgSlNFdmVudExpc3RlbmVyOjp+SlNFdmVudExpc3RlbmVyKCkKIAogSlNPYmplY3QqIEpTRXZl
bnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmooKSBjb25zdAogeyAKLSAgICByZXR1cm4gbGlzdGVuZXI7
IAorICAgIHJldHVybiBtX2xpc3RlbmVyOyAKIH0KIAogV2luZG93KiBKU0V2ZW50TGlzdGVuZXI6
OndpbmRvd09iaigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHdpbjsKKyAgICByZXR1cm4gbV93aW47
CiB9CiAKIHZvaWQgSlNFdmVudExpc3RlbmVyOjpjbGVhcldpbmRvd09iaigpCiB7Ci0gICAgd2lu
ID0gMDsKKyAgICBtX3dpbiA9IDA7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9u
TmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBXaW5kb3cqIHdpbiwgTm9kZSogbm9kZSwgaW50IGxp
bmVubykKK0pTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgV2luZG93KiB3aW4sIE5vZGUq
IG5vZGUsIGludCBsaW5lTnVtYmVyKQogICA6IEpTRXZlbnRMaXN0ZW5lcigwLCB3aW4sIHRydWUp
CiAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQotICAsIGNvZGUoY29kZSkKLSAgLCBw
YXJzZWQoZmFsc2UpCi0gICwgbGluZU51bWJlcihsaW5lbm8pCi0gICwgb3JpZ2luYWxOb2RlKG5v
ZGUpCisgICwgbV9jb2RlKGNvZGUpCisgICwgbV9wYXJzZWQoZmFsc2UpCisgICwgbV9saW5lTnVt
YmVyKGxpbmVOdW1iZXIpCisgICwgbV9vcmlnaW5hbE5vZGUobm9kZSkKIHsKICAgICAvLyBXZSBk
b24ndCByZXRhaW4gdGhlIG9yaWdpbmFsIG5vZGUgYmVjYXVzZSB3ZSBhc3N1bWUgaXQKICAgICAv
LyB3aWxsIHN0YXkgYWxpdmUgYXMgbG9uZyBhcyB0aGlzIGhhbmRsZXIgb2JqZWN0IGlzIGFyb3Vu
ZApAQCAtMjg4LDcgKzI3NSw3IEBAIEpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlz
dGVuZXIKIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjpsaXN0ZW5lck9iaigpIGNvbnN0
CiB7CiAgICAgcGFyc2VDb2RlKCk7Ci0gICAgcmV0dXJuIGxpc3RlbmVyOworICAgIHJldHVybiBt
X2xpc3RlbmVyOwogfQogCiBKU1ZhbHVlKiBKU0xhenlFdmVudExpc3RlbmVyOjpldmVudFBhcmFt
ZXRlck5hbWUoKSBjb25zdApAQCAtMjk5LDEyICsyODYsMTIgQEAgSlNWYWx1ZSogSlNMYXp5RXZl
bnRMaXN0ZW5lcjo6ZXZlbnRQYXJhbQogCiB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNl
Q29kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhcnNlZCkKKyAgICBpZiAobV9wYXJzZWQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBwYXJzZWQgPSB0cnVlOworICAgIG1fcGFyc2VkID0gdHJ1ZTsKIAot
ICAgIEZyYW1lICpmcmFtZSA9IHdpbmRvd09iaigpLT5mcmFtZSgpOwotICAgIEtKU1Byb3h5ICpw
cm94eSA9IDA7CisgICAgRnJhbWUqIGZyYW1lID0gd2luZG93T2JqKCktPmZyYW1lKCk7CisgICAg
S0pTUHJveHkqIHByb3h5ID0gMDsKICAgICBpZiAoZnJhbWUpCiAgICAgICAgIHByb3h5ID0gZnJh
bWUtPnNjcmlwdFByb3h5KCk7CiAKQEAgLTMxOCwyMiArMzA1LDIyIEBAIHZvaWQgSlNMYXp5RXZl
bnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY28KIAogICAgICAgICBVU3RyaW5nIHNvdXJjZVVSTChm
cmFtZS0+bG9hZGVyKCktPnVybCgpLnVybCgpKTsKICAgICAgICAgYXJncy5hcHBlbmQoZXZlbnRQ
YXJhbWV0ZXJOYW1lKCkpOwotICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhjb2RlKSk7Ci0g
ICAgICAgIGxpc3RlbmVyID0gY29uc3RyLT5jb25zdHJ1Y3QoZXhlYywgYXJncywgbV9mdW5jdGlv
bk5hbWUsIHNvdXJjZVVSTCwgbGluZU51bWJlcik7IC8vICMjIyBpcyBnbG9iYWxFeGVjIG9rID8K
KyAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcobV9jb2RlKSk7CisgICAgICAgIG1fbGlzdGVu
ZXIgPSBjb25zdHItPmNvbnN0cnVjdChleGVjLCBhcmdzLCBtX2Z1bmN0aW9uTmFtZSwgc291cmNl
VVJMLCBtX2xpbmVOdW1iZXIpOyAvLyBGSVhNRTogaXMgZ2xvYmFsRXhlYyBvayA/CiAKLSAgICAg
ICAgRnVuY3Rpb25JbXAqIGxpc3RlbmVyQXNGdW5jdGlvbiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
SW1wKj4obGlzdGVuZXIuZ2V0KCkpOworICAgICAgICBGdW5jdGlvbkltcCogbGlzdGVuZXJBc0Z1
bmN0aW9uID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25JbXAqPihtX2xpc3RlbmVyLmdldCgpKTsKIAog
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgICAgIC8vIGZhaWxlZCB0byBwYXJzZSwgc28gbGV0
J3MganVzdCBtYWtlIHRoaXMgbGlzdGVuZXIgYSBuby1vcAotICAgICAgICAgICAgbGlzdGVuZXIg
PSAwOwotICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsTm9kZSkgeworICAgICAgICAgICAgbV9s
aXN0ZW5lciA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAgICAg
ICAgICAgIC8vIEFkZCB0aGUgZXZlbnQncyBob21lIGVsZW1lbnQgdG8gdGhlIHNjb3BlCiAgICAg
ICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVs
ZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQogICAgICAgICAgICAgU2NvcGVDaGFpbiBzY29wZSA9
IGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUoKTsKIAotICAgICAgICAgICAgSlNWYWx1ZSogdGhp
c09iaiA9IHRvSlMoZXhlYywgb3JpZ2luYWxOb2RlKTsKKyAgICAgICAgICAgIEpTVmFsdWUqIHRo
aXNPYmogPSB0b0pTKGV4ZWMsIG1fb3JpZ2luYWxOb2RlKTsKICAgICAgICAgICAgIGlmICh0aGlz
T2JqLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNFdmVudFRh
cmdldE5vZGUqPih0aGlzT2JqKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMsIHNjb3BlKTsK
ICAgICAgICAgICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKHNjb3BlKTsKQEAg
LTM0MywxODIgKzMzMCwyMiBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgp
IGNvCiAKICAgICAvLyBubyBtb3JlIG5lZWQgdG8ga2VlcCB0aGUgdW5wYXJzZWQgY29kZSBhcm91
bmQKICAgICBtX2Z1bmN0aW9uTmFtZSA9IFN0cmluZygpOwotICAgIGNvZGUgPSBTdHJpbmcoKTsK
KyAgICBtX2NvZGUgPSBTdHJpbmcoKTsKIAotICAgIGlmIChsaXN0ZW5lcikgeworICAgIGlmICht
X2xpc3RlbmVyKSB7CiAgICAgICAgIFdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBp
c0hUTUxFdmVudExpc3RlbmVyKCkKICAgICAgICAgICAgID8gd2luZG93T2JqKCktPmpzSFRNTEV2
ZW50TGlzdGVuZXJzKCkgOiB3aW5kb3dPYmooKS0+anNFdmVudExpc3RlbmVycygpOwotICAgICAg
ICBsaXN0ZW5lcnMuc2V0KGxpc3RlbmVyLCBjb25zdF9jYXN0PEpTTGF6eUV2ZW50TGlzdGVuZXIq
Pih0aGlzKSk7CisgICAgICAgIGxpc3RlbmVycy5zZXQobV9saXN0ZW5lciwgY29uc3RfY2FzdDxK
U0xhenlFdmVudExpc3RlbmVyKj4odGhpcykpOwogICAgIH0KIH0KIAogSlNWYWx1ZSogZ2V0Tm9k
ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXROb2RlKiBuLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSkKIHsKLSAgICBpZiAoSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihuLT5nZXRIVE1MRXZlbnRMaXN0
ZW5lcihldmVudFR5cGUpKSkKKyAgICBpZiAoSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihuLT5nZXRIVE1MRXZl
bnRMaXN0ZW5lcihldmVudFR5cGUpKSkgewogICAgICAgICBpZiAoSlNWYWx1ZSogb2JqID0gbGlz
dGVuZXItPmxpc3RlbmVyT2JqKCkpCiAgICAgICAgICAgICByZXR1cm4gb2JqOwotICAgIHJldHVy
biBqc051bGwoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jb25zdCBDbGFzc0luZm8g
RE9NRXZlbnQ6OmluZm8gPSB7ICJFdmVudCIsIDAsICZET01FdmVudFRhYmxlLCAwIH07Ci0vKgot
QGJlZ2luIERPTUV2ZW50VGFibGUgMTIKLSAgdHlwZSAgICAgICAgICBET01FdmVudDo6VHlwZSAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHRhcmdldCAgICAgICAgRE9NRXZlbnQ6OlRh
cmdldCAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBjdXJyZW50VGFyZ2V0IERPTUV2ZW50
OjpDdXJyZW50VGFyZ2V0IERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3JjRWxlbWVudCAgICBET01F
dmVudDo6U3JjRWxlbWVudCAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGV2ZW50UGhhc2UgICAg
RE9NRXZlbnQ6OkV2ZW50UGhhc2UgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBidWJibGVzICAg
ICAgIERPTUV2ZW50OjpCdWJibGVzICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgY2FuY2Vs
YWJsZSAgICBET01FdmVudDo6Q2FuY2VsYWJsZSAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHRp
bWVTdGFtcCAgICAgRE9NRXZlbnQ6OlRpbWVTdGFtcCAgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICByZXR1cm5WYWx1ZSAgIERPTUV2ZW50OjpSZXR1cm5WYWx1ZSAgIERvbnREZWxldGUKLSAgY2Fu
Y2VsQnViYmxlICBET01FdmVudDo6Q2FuY2VsQnViYmxlICBEb250RGVsZXRlCi0gIGRhdGFUcmFu
c2ZlciAgRE9NRXZlbnQ6OkRhdGFUcmFuc2ZlciAgRG9udERlbGV0ZXxSZWFkT25seQotICBjbGlw
Ym9hcmREYXRhICBET01FdmVudDo6Q2xpcGJvYXJkRGF0YSAgRG9udERlbGV0ZXxSZWFkT25seQot
QGVuZAotQGJlZ2luIERPTUV2ZW50UHJvdG90eXBlVGFibGUgMwotICBzdG9wUHJvcGFnYXRpb24g
ICAgICAgRE9NRXZlbnQ6OlN0b3BQcm9wYWdhdGlvbiAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9u
IDAKLSAgcHJldmVudERlZmF1bHQgICAgICAgIERPTUV2ZW50OjpQcmV2ZW50RGVmYXVsdCAgICAg
ICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi0gIGluaXRFdmVudCAgICAgICAgICAgICBET01FdmVu
dDo6SW5pdEV2ZW50ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMwotQGVuZAotKi8K
LUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OKERPTUV2ZW50UHJvdG90eXBlRnVuY3Rp
b24pCi1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRSgiRE9NRXZlbnQiLCBET01FdmVudFByb3RvdHlw
ZSwgRE9NRXZlbnRQcm90b3R5cGVGdW5jdGlvbikKLQotRE9NRXZlbnQ6OkRPTUV2ZW50KEV4ZWNT
dGF0ZSogZXhlYywgRXZlbnQqIGV2ZW50KQotICAgIDogbV9pbXBsKGV2ZW50KQotewotICAgIHNl
dFByb3RvdHlwZShET01FdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSk7Ci19Ci0KLURPTUV2ZW50
Ojp+RE9NRXZlbnQoKQotewotICAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3Qo
bV9pbXBsLmdldCgpKTsKLX0KLQotYm9vbCBET01FdmVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxET01FdmVudCwgRE9N
T2JqZWN0PihleGVjLCAmRE9NRXZlbnRUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsK
LX0KLQotSlNWYWx1ZSogRE9NRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgRXZlbnQqIGV2ZW50ID0gaW1wbCgpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV2ZW50LT50eXBlKCkpOwotICAgICAgICBjYXNlIFRhcmdldDoKLSAgICAgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgICAgIGNhc2UgU3JjRWxl
bWVudDoKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LT5zcmNFbGVtZW50KCkp
OwotICAgICAgICBjYXNlIEN1cnJlbnRUYXJnZXQ6Ci0gICAgICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBldmVudC0+Y3VycmVudFRhcmdldCgpKTsKLSAgICAgICAgY2FzZSBFdmVudFBoYXNlOgot
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV2ZW50LT5ldmVudFBoYXNlKCkpOwotICAgICAg
ICBjYXNlIEJ1YmJsZXM6Ci0gICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKGV2ZW50LT5idWJi
bGVzKCkpOwotICAgICAgICBjYXNlIENhbmNlbEJ1YmJsZToKLSAgICAgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKTsKLSAgICAgICAgY2FzZSBSZXR1cm5WYWx1
ZToKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZXZlbnQtPnJldHVyblZhbHVlKCkpOwot
ICAgICAgICBjYXNlIENhbmNlbGFibGU6Ci0gICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKGV2
ZW50LT5jYW5jZWxhYmxlKCkpOwotICAgICAgICBjYXNlIFRpbWVTdGFtcDoKLSAgICAgICAgICAg
IHJldHVybiBqc051bWJlcihldmVudC0+dGltZVN0YW1wKCkpOwotICAgICAgICBjYXNlIENsaXBi
b2FyZERhdGE6Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPmlzQ2xpcGJvYXJkRXZlbnQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBldmVudC0+Y2xpcGJvYXJkRGF0YSgpKTsK
LSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBjYXNlIERhdGFUcmFu
c2ZlcjoKLSAgICAgICAgICAgIGlmIChldmVudC0+aXNEcmFnRXZlbnQoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBldmVudC0+ZGF0YVRyYW5zZmVyKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci19Ci0KLXZvaWQgRE9NRXZlbnQ6OnB1dChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRy
KQotewotICAgIGxvb2t1cFB1dDxET01FdmVudCwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyLCAmRE9NRXZlbnRUYWJsZSwgdGhpcyk7Ci19Ci0KLXZvaWQgRE9NRXZl
bnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUq
IHZhbHVlLCBpbnQpCi17Ci0gICAgRXZlbnQqIGV2ZW50ID0gbV9pbXBsLmdldCgpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBSZXR1cm5WYWx1ZToKLSAgICAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0UHJldmVudGVkKCF2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENhbmNlbEJ1YmJsZToKLSAgICAgICAgICAgIGV2
ZW50LT5zZXRDYW5jZWxCdWJibGUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0K
LQotSlNWYWx1ZSogRE9NRXZlbnRQcm90b3R5cGVGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBKU09iamVjdCAqIHRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCi17Ci0g
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NRXZlbnQ6OmluZm8pKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgRXZlbnQqIGV2ZW50ID0gc3Rh
dGljX2Nhc3Q8RE9NRXZlbnQqPih0aGlzT2JqKS0+aW1wbCgpOwotICAgIHN3aXRjaCAoaWQpIHsK
LSAgICAgICAgY2FzZSBET01FdmVudDo6U3RvcFByb3BhZ2F0aW9uOgotICAgICAgICAgICAgZXZl
bnQtPnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgIGNhc2UgRE9NRXZlbnQ6OlByZXZlbnREZWZhdWx0OgotICAgICAgICAgICAgZXZl
bnQtPnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgY2FzZSBET01FdmVudDo6SW5pdEV2ZW50OgotICAgICAgICAgICAgZXZlbnQtPmlu
aXRFdmVudChBdG9taWNTdHJpbmcoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLCBhcmdzWzFdLT50
b0Jvb2xlYW4oZXhlYyksIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfTsKLSAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0K
LUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXZlbnQpCi17Ci0gICAgaWYg
KCFldmVudCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgU2NyaXB0SW50ZXJwcmV0
ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyKj4oZXhlYy0+ZHluYW1p
Y0ludGVycHJldGVyKCkpOwotCi0gICAgSlNMb2NrIGxvY2s7Ci0KLSAgICBET01PYmplY3QqIHJl
dCA9IGludGVycC0+Z2V0RE9NT2JqZWN0KGV2ZW50KTsKLSAgICBpZiAocmV0KQotICAgICAgICBy
ZXR1cm4gcmV0OwotCi0gICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAg
cmV0ID0gbmV3IEpTS2V5Ym9hcmRFdmVudChleGVjLCBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50
Kj4oZXZlbnQpKTsKLSAgICBlbHNlIGlmIChldmVudC0+aXNUZXh0RXZlbnQoKSkKLSAgICAgICAg
cmV0ID0gbmV3IEpTVGV4dEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50
KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQotICAgICAgICByZXQgPSBu
ZXcgSlNNb3VzZUV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwot
ICAgIGVsc2UgaWYgKGV2ZW50LT5pc1doZWVsRXZlbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpT
V2hlZWxFdmVudChleGVjLCBzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpKTsKLSAgICBl
bHNlIGlmIChldmVudC0+aXNVSUV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU1VJRXZlbnQo
ZXhlYywgc3RhdGljX2Nhc3Q8VUlFdmVudCo+KGV2ZW50KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQt
PmlzTXV0YXRpb25FdmVudCgpKQotICAgICAgICByZXQgPSBuZXcgSlNNdXRhdGlvbkV2ZW50KGV4
ZWMsIHN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnQqPihldmVudCkpOwotICAgIGVsc2UgaWYgKGV2
ZW50LT5pc092ZXJmbG93RXZlbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpTT3ZlcmZsb3dFdmVu
dChleGVjLCBzdGF0aWNfY2FzdDxPdmVyZmxvd0V2ZW50Kj4oZXZlbnQpKTsKLSAgICBlbHNlCi0g
ICAgICAgIHJldCA9IG5ldyBKU0V2ZW50KGV4ZWMsIGV2ZW50KTsKLQotICAgIGludGVycC0+cHV0
RE9NT2JqZWN0KGV2ZW50LCByZXQpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLUV2ZW50KiB0b0V2
ZW50KEpTVmFsdWUqIHZhbCkKLXsKLSAgICBpZiAoIXZhbCB8fCAhdmFsLT5pc09iamVjdCgmRE9N
RXZlbnQ6OmluZm8pKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RE9NRXZlbnQqPih2YWwpLT5pbXBsKCk7CisgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC01MjcsMTUgKzM1NCwxNSBAQCBjb25zdCBDbGFzc0luZm8gSlND
bGlwYm9hcmQ6OmluZm8gPSB7ICJDCiAKIC8qIFNvdXJjZSBmb3IgSlNDbGlwYm9hcmRUYWJsZS4g
VXNlICJtYWtlIGhhc2h0YWJsZXMiIHRvIHJlZ2VuZXJhdGUuCiBAYmVnaW4gSlNDbGlwYm9hcmRU
YWJsZSAzCi0gIGRyb3BFZmZlY3QgICAgSlNDbGlwYm9hcmQ6OkRyb3BFZmZlY3QgICBEb250RGVs
ZXRlCi0gIGVmZmVjdEFsbG93ZWQgSlNDbGlwYm9hcmQ6OkVmZmVjdEFsbG93ZWQgICAgICAgIERv
bnREZWxldGUKLSAgdHlwZXMgICAgICAgICBKU0NsaXBib2FyZDo6VHlwZXMgICAgICAgIERvbnRE
ZWxldGV8UmVhZE9ubHkKKyAgZHJvcEVmZmVjdCAgICBXZWJDb3JlOjpKU0NsaXBib2FyZDo6RHJv
cEVmZmVjdCAgIERvbnREZWxldGUKKyAgZWZmZWN0QWxsb3dlZCBXZWJDb3JlOjpKU0NsaXBib2Fy
ZDo6RWZmZWN0QWxsb3dlZCAgICAgICAgRG9udERlbGV0ZQorICB0eXBlcyAgICAgICAgIFdlYkNv
cmU6OkpTQ2xpcGJvYXJkOjpUeXBlcyAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQogQGVuZAog
QGJlZ2luIEpTQ2xpcGJvYXJkUHJvdG90eXBlVGFibGUgNAotICBjbGVhckRhdGEgICAgIEpTQ2xp
cGJvYXJkOjpDbGVhckRhdGEgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi0gIGdldERhdGEgICAg
ICAgSlNDbGlwYm9hcmQ6OkdldERhdGEgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLSAgc2V0
RGF0YSAgICAgICBKU0NsaXBib2FyZDo6U2V0RGF0YSAgICAgIERvbnREZWxldGV8RnVuY3Rpb24g
MgotICBzZXREcmFnSW1hZ2UgIEpTQ2xpcGJvYXJkOjpTZXREcmFnSW1hZ2UgRG9udERlbGV0ZXxG
dW5jdGlvbiAzCisgIGNsZWFyRGF0YSAgICAgV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OkNsZWFyRGF0
YSAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKKyAgZ2V0RGF0YSAgICAgICBXZWJDb3JlOjpKU0Ns
aXBib2FyZDo6R2V0RGF0YSAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQorICBzZXREYXRhICAg
ICAgIFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjpTZXREYXRhICAgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAyCisgIHNldERyYWdJbWFnZSAgV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OlNldERyYWdJbWFnZSBE
b250RGVsZXRlfEZ1bmN0aW9uIDMKIEBlbmQKICovCiAKQEAgLTU0Myw4ICszNzAsOCBAQCBLSlNf
REVGSU5FX1BST1RPVFlQRShKU0NsaXBib2FyZFByb3RvdHlwCiBLSlNfSU1QTEVNRU5UX1BST1RP
VFlQRV9GVU5DVElPTihKU0NsaXBib2FyZFByb3RvdHlwZUZ1bmN0aW9uKQogS0pTX0lNUExFTUVO
VF9QUk9UT1RZUEUoIkNsaXBib2FyZCIsIEpTQ2xpcGJvYXJkUHJvdG90eXBlLCBKU0NsaXBib2Fy
ZFByb3RvdHlwZUZ1bmN0aW9uKQogCi1KU0NsaXBib2FyZDo6SlNDbGlwYm9hcmQoRXhlY1N0YXRl
KiBleGVjLCBXZWJDb3JlOjpDbGlwYm9hcmQqIGNiKQotICAgIDogbV9pbXBsKGNiKQorSlNDbGlw
Ym9hcmQ6OkpTQ2xpcGJvYXJkKEV4ZWNTdGF0ZSogZXhlYywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQp
CisgICAgOiBtX2ltcGwoY2xpcGJvYXJkKQogewogICAgIHNldFByb3RvdHlwZShKU0NsaXBib2Fy
ZFByb3RvdHlwZTo6c2VsZihleGVjKSk7CiB9CkBAIC01NjEsNyArMzg4LDcgQEAgYm9vbCBKU0Ns
aXBib2FyZDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZQogCiBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAg
ICBXZWJDb3JlOjpDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKKyAgICBDbGlwYm9hcmQq
IGNsaXBib2FyZCA9IGltcGwoKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2Ug
RHJvcEVmZmVjdDoKICAgICAgICAgICAgIEFTU0VSVChjbGlwYm9hcmQtPmlzRm9yRHJhZ2dpbmco
KSB8fCBjbGlwYm9hcmQtPmRyb3BFZmZlY3QoKS5pc051bGwoKSk7CkBAIC01OTQsNyArNDIxLDcg
QEAgdm9pZCBKU0NsaXBib2FyZDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgYwogCiB2b2lkIEpTQ2xp
cGJvYXJkOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBKU1Zh
bHVlKiB2YWx1ZSwgaW50IC8qYXR0ciovKQogewotICAgIFdlYkNvcmU6OkNsaXBib2FyZCogY2xp
cGJvYXJkID0gaW1wbCgpOworICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBEcm9wRWZmZWN0OgogICAgICAgICAgICAg
Ly8gY2FuIG5ldmVyIHNldCB0aGlzIHdoZW4gbm90IGZvciBkcmFnZ2luZywgdGh1cyBnZXR0aW5n
IGFsd2F5cyByZXR1cm5zIE5VTEwgc3RyaW5nCkBAIC02MTQsNyArNDQxLDcgQEAgSlNWYWx1ZSog
SlNDbGlwYm9hcmRQcm90b3R5cGVGdW5jdGlvbjo6YwogICAgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJkpTQ2xpcGJvYXJkOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKIAotICAgIFdlYkNvcmU6OkNsaXBib2FyZCogY2xpcGJvYXJkID0gc3RhdGlj
X2Nhc3Q8SlNDbGlwYm9hcmQqPih0aGlzT2JqKS0+aW1wbCgpOworICAgIENsaXBib2FyZCogY2xp
cGJvYXJkID0gc3RhdGljX2Nhc3Q8SlNDbGlwYm9hcmQqPih0aGlzT2JqKS0+aW1wbCgpOwogICAg
IHN3aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBKU0NsaXBib2FyZDo6Q2xlYXJEYXRhOgogICAg
ICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApIHsKQEAgLTY3MSwxNCArNDk4LDE0IEBAIEpT
VmFsdWUqIEpTQ2xpcGJvYXJkUHJvdG90eXBlRnVuY3Rpb246OmMKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFdlYkNvcmU6OkNs
aXBib2FyZCogb2JqKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENsaXBib2FyZCog
b2JqKQogewotICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxXZWJDb3JlOjpDbGlwYm9hcmQsIEpT
Q2xpcGJvYXJkPihleGVjLCBvYmopOworICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxDbGlwYm9h
cmQsIEpTQ2xpcGJvYXJkPihleGVjLCBvYmopOwogfQogCi1XZWJDb3JlOjpDbGlwYm9hcmQqIHRv
Q2xpcGJvYXJkKEpTVmFsdWUqIHZhbCkKK0NsaXBib2FyZCogdG9DbGlwYm9hcmQoSlNWYWx1ZSog
dmFsKQogewogICAgIHJldHVybiB2YWwtPmlzT2JqZWN0KCZKU0NsaXBib2FyZDo6aW5mbykgPyBz
dGF0aWNfY2FzdDxKU0NsaXBib2FyZCo+KHZhbCktPmltcGwoKSA6IDA7CiB9CiAKLX0KK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5oCShyZXZpc2lv
biAyMzU0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMzIgKzI2LDEwMiBAQAogI2luY2x1ZGUgImtqc19kb20uaCIKICNpbmNsdWRl
ICJranNfaHRtbC5oIgogCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBXaW5kb3c7Cit9CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogICAgIGNsYXNzIENsaXBib2FyZDsKICAgICBjbGFzcyBF
dmVudDsKLSAgICBjbGFzcyBLZXlib2FyZEV2ZW50OwotICAgIGNsYXNzIE1vdXNlRXZlbnQ7Ci0g
ICAgY2xhc3MgTXV0YXRpb25FdmVudDsKLSAgICBjbGFzcyBVSUV2ZW50OwotfQotCi1uYW1lc3Bh
Y2UgS0pTIHsKIAotICAgIGNsYXNzIFdpbmRvdzsKLSAgICBjbGFzcyBKU0NsaXBib2FyZDsKLSAg
ICAKLSAgICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJDb3JlOjpF
dmVudExpc3RlbmVyIHsKKyAgICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1Ymxp
YyBFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQWJzdHJhY3RFdmVudExp
c3RlbmVyKGJvb2wgSFRNTCA9IGZhbHNlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KFdlYkNvcmU6OkV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKKyAgICAgICAgSlNBYnN0
cmFjdEV2ZW50TGlzdGVuZXIoYm9vbCBodG1sID0gZmFsc2UpOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVudCk7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0hUTUxFdmVudExpc3RlbmVyKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFdpbmRv
dyogd2luZG93T2JqKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtKUzo6SlNPYmplY3Qq
IGxpc3RlbmVyT2JqKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtKUzo6V2luZG93KiB3
aW5kb3dPYmooKSBjb25zdCA9IDA7CisKICAgICBwcml2YXRlOgotICAgICAgICBib29sIGh0bWw7
CisgICAgICAgIGJvb2wgbV9odG1sOwogICAgIH07CiAKICAgICBjbGFzcyBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciB7CiAgICAgcHVi
bGljOgotICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU09iamVjdCogbGlzdGVu
ZXIsIFdpbmRvdyosIGJvb2wgSFRNTCA9IGZhbHNlKTsKKyAgICAgICAgSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIoS0pTOjpKU09iamVjdCogbGlzdGVuZXIsIEtKUzo6V2luZG93KiwgYm9vbCBo
dG1sID0gZmFsc2UpOwogICAgICAgICB2aXJ0dWFsIH5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cigpOwotICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIFdpbmRvdyogd2luZG93T2JqKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVh
bCBLSlM6OkpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtK
Uzo6V2luZG93KiB3aW5kb3dPYmooKSBjb25zdDsKICAgICAgICAgdm9pZCBjbGVhcldpbmRvd09i
aigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgSlNPYmplY3QqIGxpc3RlbmVyOwotICAgICAgICBXaW5kb3cqIHdpbjsKKyAgICAgICAgS0pT
OjpKU09iamVjdCogbV9saXN0ZW5lcjsKKyAgICAgICAgS0pTOjpXaW5kb3cqIG1fd2luOwogICAg
IH07CiAKICAgICBjbGFzcyBKU0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNBYnN0cmFjdEV2ZW50
TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNFdmVudExpc3RlbmVyKEpTT2JqZWN0
KiBsaXN0ZW5lciwgV2luZG93KiwgYm9vbCBIVE1MID0gZmFsc2UpOworICAgICAgICBKU0V2ZW50
TGlzdGVuZXIoS0pTOjpKU09iamVjdCogbGlzdGVuZXIsIEtKUzo6V2luZG93KiwgYm9vbCBodG1s
ID0gZmFsc2UpOwogICAgICAgICB2aXJ0dWFsIH5KU0V2ZW50TGlzdGVuZXIoKTsKLSAgICAgICAg
dmlydHVhbCBKU09iamVjdCogbGlzdGVuZXJPYmooKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBX
aW5kb3cqIHdpbmRvd09iaigpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgS0pTOjpKU09iamVj
dCogbGlzdGVuZXJPYmooKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBLSlM6OldpbmRvdyogd2lu
ZG93T2JqKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2xlYXJXaW5kb3dPYmooKTsKKwogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgbXV0YWJsZSBQcm90ZWN0ZWRQdHI8SlNPYmplY3Q+IGxpc3RlbmVy
OwotICAgIHByaXZhdGU6Ci0gICAgICAgIFByb3RlY3RlZFB0cjxXaW5kb3c+IHdpbjsKLSAgICB9
OworICAgICAgICBtdXRhYmxlIEtKUzo6UHJvdGVjdGVkUHRyPEtKUzo6SlNPYmplY3Q+IG1fbGlz
dGVuZXI7CiAKLSAgICBjbGFzcyBKU0xhenlFdmVudExpc3RlbmVyIDogcHVibGljIEpTRXZlbnRM
aXN0ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBKU0xhenlFdmVudExpc3RlbmVyKGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGNv
ZGUsIFdpbmRvdyosIFdlYkNvcmU6Ok5vZGUqLCBpbnQgbGluZW5vID0gMCk7Ci0gICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29uc3Q7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiBldmVudFBhcmFtZXRlck5hbWUoKSBjb25zdDsKLSAgICAgICAg
dm9pZCBwYXJzZUNvZGUoKSBjb25zdDsKLQotICAgICAgICBtdXRhYmxlIFdlYkNvcmU6OlN0cmlu
ZyBtX2Z1bmN0aW9uTmFtZTsKLSAgICAgICAgbXV0YWJsZSBXZWJDb3JlOjpTdHJpbmcgY29kZTsK
LSAgICAgICAgbXV0YWJsZSBib29sIHBhcnNlZDsKLSAgICAgICAgaW50IGxpbmVOdW1iZXI7Ci0g
ICAgICAgIFdlYkNvcmU6Ok5vZGUqIG9yaWdpbmFsTm9kZTsKKyAgICAgICAgS0pTOjpQcm90ZWN0
ZWRQdHI8S0pTOjpXaW5kb3c+IG1fd2luOwogICAgIH07CiAKLSAgICBKU1ZhbHVlKiBnZXROb2Rl
RXZlbnRMaXN0ZW5lcihXZWJDb3JlOjpOb2RlKiBuLCBjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSk7Ci0KLSAgICBjbGFzcyBET01FdmVudCA6IHB1YmxpYyBET01PYmplY3Qg
eworICAgIGNsYXNzIEpTTGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNFdmVudExpc3RlbmVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERPTUV2ZW50KEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkV2
ZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgfkRPTUV2ZW50KCk7CisgICAgICAgIEpTTGF6eUV2ZW50
TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwg
S0pTOjpXaW5kb3cqLCBOb2RlKiwgaW50IGxpbmVOdW1iZXIgPSAwKTsKIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgaW50IGF0dHIgPSBOb25lKTsKLSAg
ICAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbiwgSlNWYWx1
ZSosIGludCBhdHRyKTsKLQotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwotCi0gICAgICAgIGVudW0geyAKLSAgICAgICAgICAgIFR5cGUsIFRhcmdldCwg
Q3VycmVudFRhcmdldCwgRXZlbnRQaGFzZSwKLSAgICAgICAgICAgIEJ1YmJsZXMsIENhbmNlbGFi
bGUsIFRpbWVTdGFtcCwgU3RvcFByb3BhZ2F0aW9uLAotICAgICAgICAgICAgUHJldmVudERlZmF1
bHQsIEluaXRFdmVudCwKLQotICAgICAgICAgICAgLy8gTVMgSUUgZXF1aXZhbGVudHMKLSAgICAg
ICAgICAgIFNyY0VsZW1lbnQsIFJldHVyblZhbHVlLCBDYW5jZWxCdWJibGUsIENsaXBib2FyZERh
dGEsCi0gICAgICAgICAgICBEYXRhVHJhbnNmZXIKLSAgICAgICAgfTsKKyAgICAgICAgdmlydHVh
bCBLSlM6OkpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwogCi0gICAgICAgIFdlYkNvcmU6
OkV2ZW50KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CisgICAgcHJpdmF0
ZToKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIGV2ZW50UGFyYW1ldGVyTmFtZSgpIGNv
bnN0OworICAgICAgICB2b2lkIHBhcnNlQ29kZSgpIGNvbnN0OwogCi0gICAgcHJvdGVjdGVkOgot
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnQ+IG1faW1wbDsKKyAgICAgICAgbXV0YWJsZSBT
dHJpbmcgbV9mdW5jdGlvbk5hbWU7CisgICAgICAgIG11dGFibGUgU3RyaW5nIG1fY29kZTsKKyAg
ICAgICAgbXV0YWJsZSBib29sIG1fcGFyc2VkOworICAgICAgICBpbnQgbV9saW5lTnVtYmVyOwor
ICAgICAgICBOb2RlKiBtX29yaWdpbmFsTm9kZTsKICAgICB9OwogCi0gICAgSlNWYWx1ZSogdG9K
UyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpFdmVudCopOwotICAgIFdlYkNvcmU6OkV2ZW50KiB0b0V2
ZW50KEpTVmFsdWUqKTsgLy8gcmV0dXJucyAwIGlmIHZhbHVlIGlzIG5vdCBhIERPTUV2ZW50IG9i
amVjdAotCi0gICAgS0pTX0RFRklORV9QUk9UT1RZUEUoRE9NRXZlbnRQcm90b3R5cGUpCisgICAg
S0pTOjpKU1ZhbHVlKiBnZXROb2RlRXZlbnRMaXN0ZW5lcihOb2RlKiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpOwogCi0gICAgY2xhc3MgSlNDbGlwYm9hcmQgOiBwdWJsaWMgRE9NT2Jq
ZWN0IHsKKyAgICBjbGFzcyBKU0NsaXBib2FyZCA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKU0NsaXBib2FyZFByb3RvdHlwZUZ1bmN0aW9uOwogICAgIHB1
YmxpYzoKLSAgICAgICAgSlNDbGlwYm9hcmQoRXhlY1N0YXRlKiwgV2ViQ29yZTo6Q2xpcGJvYXJk
KiBkcyk7CisgICAgICAgIEpTQ2xpcGJvYXJkKEtKUzo6RXhlY1N0YXRlKiwgQ2xpcGJvYXJkKik7
CiAgICAgICAgIHZpcnR1YWwgfkpTQ2xpcGJvYXJkKCk7CiAKLSAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwg
aW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIGludCBhdHRyID0gTm9uZSk7Ci0gICAgICAgIHZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTVmFsdWUqLCBpbnQg
YXR0cik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVj
U3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOworICAg
ICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwgaW50IHRva2Vu
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0
IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6SlNWYWx1ZSosIGludCBhdHRyID0gS0pTOjpOb25lKTsK
KyAgICAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwgaW50IHRva2Vu
LCBLSlM6OkpTVmFsdWUqLCBpbnQgYXR0cik7CiAKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKyAgICAgICAgdmlydHVhbCBjb25zdCBLSlM6OkNsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGlj
IGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87CiAKICAgICAgICAgZW51bSB7IENsZWFyRGF0YSwg
R2V0RGF0YSwgU2V0RGF0YSwgVHlwZXMsIFNldERyYWdJbWFnZSwgRHJvcEVmZmVjdCwgRWZmZWN0
QWxsb3dlZCB9OwogCi0gICAgICAgIFdlYkNvcmU6OkNsaXBib2FyZCogaW1wbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW1wbC5nZXQoKTsgfQorICAgICAgICBDbGlwYm9hcmQqIGltcGwoKSBjb25zdCB7
IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxX
ZWJDb3JlOjpDbGlwYm9hcmQ+IG1faW1wbDsKKyAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gbV9p
bXBsOwogICAgIH07CiAKLSAgICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkNs
aXBib2FyZCopOwotICAgIFdlYkNvcmU6OkNsaXBib2FyZCogdG9DbGlwYm9hcmQoSlNWYWx1ZSop
OworICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIENsaXBib2FyZCopOwor
ICAgIENsaXBib2FyZCogdG9DbGlwYm9hcmQoS0pTOjpKU1ZhbHVlKik7CiAKIH0gLy8gbmFtZXNw
YWNlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCShyZXZpc2lvbiAyMzU0MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFz
cyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSlNET01XaW5kb3c7CisgICAgY2xhc3MgSlNFdmVudExp
c3RlbmVyOworICAgIGNsYXNzIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOwogICAgIGNsYXNz
IE5vZGU7CiB9CiAKQEAgLTM5LDkgKzQxLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3Mg
QmFySW5mbzsKICAgICBjbGFzcyBGcmFtZUFycmF5OwogICAgIGNsYXNzIEhpc3Rvcnk7Ci0gICAg
Y2xhc3MgSlNFdmVudExpc3RlbmVyOwotICAgIGNsYXNzIEpTTGF6eUV2ZW50TGlzdGVuZXI7Ci0g
ICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgTG9jYXRpb247
CiAgICAgY2xhc3MgUGF1c2VkVGltZW91dDsKICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb247CkBA
IC0xNDEsMTYgKzE0MCwxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBCYXJJbmZvICp0b29sYmFy
KEV4ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEgSlMgRXZl
bnRMaXN0ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KLSAgICBKU0V2ZW50TGlz
dGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsK
KyAgICBXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1
ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKIAogICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3cmFw
cGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMgR0Mt
cHJvdGVjdGVkLgotICAgIEpTRXZlbnRMaXN0ZW5lciAqZmluZE9yQ3JlYXRlSlNFdmVudExpc3Rl
bmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CisgICAgV2ViQ29yZTo6SlNFdmVudExp
c3RlbmVyICpmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9
IGZhbHNlKTsKIAogICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEdDLXVucHJvdGVjdGVkIEpT
IEV2ZW50TGlzdGVuZXIsIHJldHVybnMgMCBpZiBubyBleGlzdGluZyBvbmUuCi0gICAgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIqIGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU1Zh
bHVlKiwgYm9vbCBodG1sID0gZmFsc2UpOworICAgIFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKiBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wg
aHRtbCA9IGZhbHNlKTsKIAogICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3cmFwcGVyIG9mIGEg
SlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMgKk5PVCogR0MtcHJv
dGVjdGVkLgotICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyICpmaW5kT3JDcmVhdGVKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiwgYm9vbCBodG1sID0gZmFsc2UpOworICAg
IFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyICpmaW5kT3JDcmVhdGVKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiwgYm9vbCBodG1sID0gZmFsc2UpOwogCiAgICAg
dm9pZCBjbGVhcigpOwogCkBAIC0xNjAsOCArMTU5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
Ly8gU2V0IGEgcGxhY2UgdG8gcHV0IGEgZGlhbG9nIHJldHVybiB2YWx1ZSB3aGVuIHRoZSB3aW5k
b3cgaXMgY2xlYXJlZC4KICAgICB2b2lkIHNldFJldHVyblZhbHVlU2xvdChKU1ZhbHVlICoqc2xv
dCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8SlNPYmplY3QqLCBKU0V2ZW50TGlzdGVuZXIqPiBM
aXN0ZW5lcnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIqPiBVbnByb3RlY3RlZExpc3RlbmVyc01hcDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8SlNPYmplY3QqLCBXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXIqPiBMaXN0ZW5lcnNNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIqPiBVbnByb3RlY3RlZExpc3RlbmVyc01hcDsKICAgICAKICAgICBMaXN0ZW5l
cnNNYXAmIGpzRXZlbnRMaXN0ZW5lcnMoKTsKICAgICBMaXN0ZW5lcnNNYXAmIGpzSFRNTEV2ZW50
TGlzdGVuZXJzKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbQkocmV2aXNp
b24gMjM1NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZURPTVdyYXBw
ZXIoS0pTOjpKCiAgICAgV1JBUChDU1NTdHlsZURlY2xhcmF0aW9uKQogICAgIFdSQVAoQ1NTVmFs
dWUpCiAgICAgV1JBUChDb3VudGVyKQorICAgIFdSQVAoRXZlbnQpCiAgICAgV1JBUChIVE1MT3B0
aW9uc0NvbGxlY3Rpb24pCiAgICAgV1JBUChNZWRpYUxpc3QpCiAgICAgV1JBUChOYW1lZE5vZGVN
YXApCkBAIC05Nyw3ICs5OCw2IEBAIHN0YXRpYyBpbmxpbmUgaWQgY3JlYXRlRE9NV3JhcHBlcihL
SlM6OkoKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkRPTSMjY2xhc3NOYW1lOjppbmZv
KSkgXAogICAgICAgICAgICAgcmV0dXJuIFtvYmpjX2dldENsYXNzKCJET00iICNjbGFzc05hbWUp
IF93cmFwIyNjbGFzc05hbWU6c3RhdGljX2Nhc3Q8RE9NIyNjbGFzc05hbWUqPihvYmplY3QpLT5p
bXBsKCldOwogCi0gICAgV1JBUChFdmVudCkKICAgICBXUkFQKFJHQkNvbG9yKQogICAgIFdSQVAo
UmVjdCkKICAgICBXUkFQKFN0eWxlU2hlZXRMaXN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMzU0MSkKKysrIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE1
OCw3ICsxNTgsNyBAQCBzdWIgVXNlc01hbnVhbFRvSlNJbXBsZW1lbnRhdGlvbgogewogICAgIG15
ICR0eXBlID0gc2hpZnQ7CiAKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiTm9kZSIgb3IgJHR5
cGUgZXEgIkRvY3VtZW50IiBvciAkdHlwZSBlcSAiSFRNTENvbGxlY3Rpb24iIG9yICR0eXBlIGVx
ICJTVkdQYXRoU2VnIiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIgb3IgJHR5cGUgZXEgIkNTU1J1
bGUiIG9yICR0eXBlIGVxICJDU1NWYWx1ZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIk5v
ZGUiIG9yICR0eXBlIGVxICJEb2N1bWVudCIgb3IgJHR5cGUgZXEgIkhUTUxDb2xsZWN0aW9uIiBv
ciAkdHlwZSBlcSAiU1ZHUGF0aFNlZyIgb3IgJHR5cGUgZXEgIlN0eWxlU2hlZXQiIG9yICR0eXBl
IGVxICJDU1NSdWxlIiBvciAkdHlwZSBlcSAiQ1NTVmFsdWUiIG9yICR0eXBlIGVxICJFdmVudCI7
CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzNjksNyArMTM2OSw3IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0
dXJlLT50eXBlKTsKIAogICAgIHJldHVybiAianNCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVx
ICJib29sZWFuIjsKLSAgICByZXR1cm4gImpzTnVtYmVyKCR2YWx1ZSkiIGlmICRjb2RlR2VuZXJh
dG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJTVkdQYWludFR5cGUiOwor
ICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVlKSIgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0
aXZlVHlwZSgkdHlwZSkgb3IgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSIgb3IgJHR5cGUgZXEgIkRP
TVRpbWVTdGFtcCI7CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlw
ZSkpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9ID0gMTsKQEAg
LTE0MzUsOSArMTQzNSw2IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgJGltcGxJbmNs
dWRlc3siRXZlbnRUYXJnZXROb2RlLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpT
RXZlbnRUYXJnZXROb2RlLmgifSA9IDE7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20u
aCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnQiKSB7Ci0gICAgICAgICRpbXBs
SW5jbHVkZXN7Imtqc19ldmVudHMuaCJ9ID0gMTsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siRXZl
bnQuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUxpc3QiKSB7CiAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IkpTJHR5cGUuaCJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3si
JHR5cGUuaCJ9ID0gMTsKQEAgLTE0NTIsNiArMTQ0OSw5IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUK
ICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX3dpbmRvdy5oIn0gPSAxOwogICAgIH0gZWxzaWYg
KCR0eXBlIGVxICJET01PYmplY3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgifSA9IDE7CisgICAgfSBlbHNpZiAoJHR5cGUgZXEgIkNsaXBi
b2FyZCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2V2ZW50cy5oIn0gPSAxOworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJDbGlwYm9hcmQuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlw
ZSA9fiAvU1ZHUGF0aFNlZy8pIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siSlMkdHlwZS5oIn0g
PSAxOwogICAgICAgICAkam9pbmVkTmFtZSA9ICR0eXBlOwpJbmRleDogV2ViQ29yZS9kb20vRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudC5oCShyZXZpc2lvbiAyMzU0MSkK
KysrIFdlYkNvcmUvZG9tL0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBJRSBFeHRlbnNpb25zCiAgICAgICAg
IEV2ZW50VGFyZ2V0KiBzcmNFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0KCk7IH0gLy8g
TVNJRSBleHRlbnNpb24gLSAidGhlIG9iamVjdCB0aGF0IGZpcmVkIHRoZSBldmVudCIKLSAgICAg
ICAgYm9vbCByZXR1cm5WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2RlZmF1bHRQcmV2ZW50ZWQ7
IH0KKworICAgICAgICBib29sIHJldHVyblZhbHVlKCkgY29uc3QgeyByZXR1cm4gIWRlZmF1bHRQ
cmV2ZW50ZWQoKTsgfQorICAgICAgICB2b2lkIHNldFJldHVyblZhbHVlKGJvb2wgcmV0dXJuVmFs
dWUpIHsgc2V0RGVmYXVsdFByZXZlbnRlZCghcmV0dXJuVmFsdWUpOyB9CisKICAgICAgICAgQ2xp
cGJvYXJkKiBjbGlwYm9hcmREYXRhKCkgY29uc3QgeyByZXR1cm4gaXNDbGlwYm9hcmRFdmVudCgp
ID8gY2xpcGJvYXJkKCkgOiAwOyB9Ci0gICAgICAgIENsaXBib2FyZCogZGF0YVRyYW5zZmVyKCkg
Y29uc3QgeyByZXR1cm4gaXNNb3VzZUV2ZW50KCkgPyBjbGlwYm9hcmQoKSA6IDA7IH0KIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc01vdXNlRXZlbnQoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudC5pZGwJKHJldmlzaW9uIDIzNTQxKQorKysgV2Vi
Q29yZS9kb20vRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0yMSw3ICsyMSw3IEBACiBtb2R1bGUgZXZlbnRzIHsKIAogICAgIC8vIEludHJvZHVj
ZWQgaW4gRE9NIExldmVsIDI6Ci0gICAgaW50ZXJmYWNlIFtMZWdhY3lQYXJlbnQ9S0pTOjpET01F
dmVudCwgR2VuZXJhdGVDb25zdHJ1Y3RvciwgT2JqQ0N1c3RvbUludGVybmFsSW1wbF0gRXZlbnQg
eworICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3RvciwgT2JqQ0N1c3RvbUludGVybmFs
SW1wbF0gRXZlbnQgewogCiAgICAgICAgIC8vIERPTSBQaGFzZVR5cGUKICAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgQ0FQVFVSSU5HX1BIQVNFICAgICA9IDE7CkBAIC00OCw3ICs0OCw2IEBA
IG1vZHVsZSBldmVudHMgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDSEFOR0UgICAg
ICAgICAgICAgID0gMzI3Njg7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKExBTkdVQUdFX0pBVkFT
Q1JJUFQpCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHR5cGU7
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFdmVudFRhcmdldCAgICAgIHRhcmdldDsKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEV2ZW50VGFyZ2V0ICAgICAgY3VycmVudFRhcmdldDsK
QEAgLTYxLDYgKzYwLDE0IEBAIG1vZHVsZSBldmVudHMgewogICAgICAgICBbT2xkU3R5bGVPYmpD
XSB2b2lkIGluaXRFdmVudChpbiBET01TdHJpbmcgZXZlbnRUeXBlQXJnLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNlbGFibGVB
cmcpOworCisgICAgICAgIC8vIElFIEV4dGVuc2lvbnMKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEV2ZW50VGFyZ2V0ICAgICAgc3JjRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgYXR0cmli
dXRlIGJvb2xlYW4gICAgICAgICAgcmV0dXJuVmFsdWU7CisgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBib29sZWFuICAgICAgICAgIGNhbmNlbEJ1YmJsZTsKKworI2lmIGRlZmluZWQoTEFOR1VB
R0VfSkFWQVNDUklQVCkKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21dIENsaXBi
b2FyZCAgICAgICAgY2xpcGJvYXJkRGF0YTsKICNlbmRpZgogCiAgICAgfTsKSW5kZXg6IFdlYkNv
cmUvZG9tL01vdXNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Nb3VzZUV2ZW50
LmgJKHJldmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTm9k
ZSogdG9FbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIE5vZGUqIGZyb21FbGVtZW50KCkgY29uc3Q7
CiAKKyAgICAgICAgQ2xpcGJvYXJkKiBkYXRhVHJhbnNmZXIoKSBjb25zdCB7IHJldHVybiBpc0Ry
YWdFdmVudCgpID8gbV9jbGlwYm9hcmQuZ2V0KCkgOiAwOyB9CisKICAgICAgICAgdmlydHVhbCBi
b29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZl
bnQoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvZG9tL01vdXNlRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01vdXNl
RXZlbnQuaWRsCShyZXZpc2lvbiAyMzU0MSkKKysrIFdlYkNvcmUvZG9tL01vdXNlRXZlbnQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTUsNiAr
NTUsMTAgQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25n
ICAgICAgICAgICAgIHk7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlICAgICAgICAg
ICAgIGZyb21FbGVtZW50OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSAgICAgICAg
ICAgICB0b0VsZW1lbnQ7CisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDbGlwYm9hcmQgICAgICAgIGRhdGFUcmFuc2ZlcjsKKyNl
bmRpZgogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvZXZlbnRzL0pTU1ZHTGF6eUV2
ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL2V2ZW50cy9KU1NWR0xh
enlFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDIzNTQxKQorKysgV2ViQ29yZS9rc3ZnMi9ldmVu
dHMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEpTU1ZHTGF6eUV2ZW50TGlz
dGVuZXIgOiBwdWJsaWMgS0pTOjpKU0xhenlFdmVudExpc3RlbmVyIHsKKyAgICBjbGFzcyBKU1NW
R0xhenlFdmVudExpc3RlbmVyIDogcHVibGljIEpTTGF6eUV2ZW50TGlzdGVuZXIgewogICAgIHB1
YmxpYzoKICAgICAgICAgSlNTVkdMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBLSlM6OldpbmRvdyosIE5vZGUqLCBpbnQgbGlu
ZW5vID0gMCk7CiAgICAgcHJpdmF0ZToKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNTQ2KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDct
MDYtMTQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGVzdCBmb3IgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTEKKyAgICAgICAgQXV0b2dlbmVyYXRlIEV2
ZW50IEpTIGJpbmRpbmcKKworICAgICAgICAqIGZhc3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBl
Y3RlZC50eHQ6IERPTUV2ZW50IGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZQorICAgICAgICBwcm90
b3R5cGUgY2hhaW4hCisgICAgICAgICogZmFzdC9kb20veG1saHR0cHJlcXVlc3QtZ2V0LWV4cGVj
dGVkLnR4dDoKKwogMjAwNy0wNi0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vcHJvdG90eXBlLWNoYWluLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMzU0
MSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDM0ICs0MiwyOCBAQCBOT1RFOiBUaGlzIHRlc3Qgd2lsbCBz
dGFydCBmYWlsaW5nIGlmIHlvCiAKIFtvYmplY3QgSFRNTEZvcm1FbGVtZW50UHJvdG90eXBlXQog
Ci0tLS0tLSBbb2JqZWN0IFVJRXZlbnRdICg0IHByb3RvdHlwZXMpIC0tLS0tCistLS0tLSBbb2Jq
ZWN0IFVJRXZlbnRdICgzIHByb3RvdHlwZXMpIC0tLS0tCiAKIFtvYmplY3QgT2JqZWN0XQogCi1b
b2JqZWN0IERPTUV2ZW50UHJvdG90eXBlXQotCiBbb2JqZWN0IEV2ZW50UHJvdG90eXBlXQogCiBb
b2JqZWN0IFVJRXZlbnRQcm90b3R5cGVdCiAKLS0tLS0tIFtvYmplY3QgTW91c2VFdmVudF0gKDUg
cHJvdG90eXBlcykgLS0tLS0KKy0tLS0tIFtvYmplY3QgTW91c2VFdmVudF0gKDQgcHJvdG90eXBl
cykgLS0tLS0KIAogW29iamVjdCBPYmplY3RdCiAKLVtvYmplY3QgRE9NRXZlbnRQcm90b3R5cGVd
Ci0KIFtvYmplY3QgRXZlbnRQcm90b3R5cGVdCiAKIFtvYmplY3QgVUlFdmVudFByb3RvdHlwZV0K
IAogW29iamVjdCBNb3VzZUV2ZW50UHJvdG90eXBlXQogCi0tLS0tLSBbb2JqZWN0IEtleWJvYXJk
RXZlbnRdICg1IHByb3RvdHlwZXMpIC0tLS0tCistLS0tLSBbb2JqZWN0IEtleWJvYXJkRXZlbnRd
ICg0IHByb3RvdHlwZXMpIC0tLS0tCiAKIFtvYmplY3QgT2JqZWN0XQogCi1bb2JqZWN0IERPTUV2
ZW50UHJvdG90eXBlXQotCiBbb2JqZWN0IEV2ZW50UHJvdG90eXBlXQogCiBbb2JqZWN0IFVJRXZl
bnRQcm90b3R5cGVdCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1n
ZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0
dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIzNTQxKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtZ2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNiBAQCBjYW5jZWxCdWJibGUgOiAnZmFsc2UnCiBjYW5jZWxhYmxlIDog
J3RydWUnCiBjbGlwYm9hcmREYXRhIDogJ3VuZGVmaW5lZCcKIGN1cnJlbnRUYXJnZXQgOiAnW29i
amVjdCBKU1hNTEh0dHBSZXF1ZXN0XScKLWRhdGFUcmFuc2ZlciA6ICd1bmRlZmluZWQnCiBldmVu
dFBoYXNlIDogJzAnCiBpbml0RXZlbnQgOiAnCiBmdW5jdGlvbiBpbml0RXZlbnQoKSB7Cg==
</data>
<flag name="review"
          id="6201"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15250</attachid>
            <date>2007-06-26 10:28:14 -0700</date>
            <delta_ts>2007-06-26 12:57:11 -0700</delta_ts>
            <desc>just the event autogeneration</desc>
            <filename>autoEvent3.diff</filename>
            <type>text/plain</type>
            <size>26314</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzc5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDctMDYtMjYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTEKKyAgICAgICAg
QXV0b2dlbmVyYXRlIEV2ZW50IEpTIGJpbmRpbmcKKworICAgICAgICAtIE1vdmVzIHRoZSBkYXRh
VHJhbnNmZXIgbWV0aG9kIGludG8gTW91c2VFdmVudCB3aGVyZSBpdCBzaG91bGQgYmUuCisKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudDo6Y2xpcGJvYXJkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2V2ZW50
cy5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5oOgorICAgICAgICAqIGJp
bmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbToKKyAgICAgICAgKEtKUzo6Y3JlYXRlRE9NV3JhcHBl
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAg
ICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6cmV0dXJuVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnQ6OnNldFJldHVyblZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50OjpjbGlwYm9hcmREYXRhKToKKyAgICAgICAgKiBkb20vRXZlbnQuaWRsOgor
ICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50
OjpkYXRhVHJhbnNmZXIpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmlkbDoKKwogMjAwNy0w
Ni0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIzNzk0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5NTYsNiArMjk1Niw3IEBACiAJ
CUJDRUMwMUQ3MEMyNzRFQjQwMDlGNEVDOSAvKiBQbGF0Zm9ybVNjcmVlbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQzAxRDYwQzI3NEVCNDAwOUY0
RUM5IC8qIFBsYXRmb3JtU2NyZWVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkNFRjM0MzQwODdCNTYzRTAwQkJGODMzIC8qIEhUTUxFbGVtZW50
RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzMgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsg
fTsKIAkJQkNFRjM0MzUwODdCNTYzRTAwQkJGODMzIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRjM0MzMwODdC
NTYzRTAwQkJGODMzIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OworCQlCQ0VGQUY0RTBD
MzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VGQUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNF
dmVudEN1c3RvbS5jcHAgKi87IH07CiAJCUJDRjdDMDc4MEExNjgwQzAwMDMyRjc1QiAvKiBGb250
RmFsbGJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRjdDMDc3MEExNjgwQzAwMDMyRjc1QiAvKiBGb250RmFsbGJhY2tMaXN0LmNwcCAq
LzsgfTsKIAkJQkNGN0MwQjgwQTE2ODdDQzAwMzJGNzVCIC8qIEZvbnRDYWNoZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGN0MwQjcwQTE2ODdDQzAw
MzJGNzVCIC8qIEZvbnRDYWNoZS5oICovOyB9OwogCQlCQ0Y3QzIzNDBBMTZCNUY4MDAzMkY3NUIg
LyogRm9udENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNGN0MyMzMwQTE2QjVGODAwMzJGNzVCIC8qIEZvbnRDYWNoZU1hYy5tbSAqLzsg
fTsKQEAgLTYyNzUsNiArNjI3Niw3IEBACiAJCUJDRUMwMUQ2MEMyNzRFQjQwMDlGNEVDOSAvKiBQ
bGF0Zm9ybVNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1TY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFRjM0MzIwODdCNTYz
RTAwQkJGODMzIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJQkNFRjM0MzMwODdCNTYzRTAwQkJGODMzIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRWxlbWVu
dEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CisJCUJDRUZBRjREMEMzMTdFNjkwMEZBODFGNiAvKiBKU0V2ZW50Q3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0V2ZW50Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGN0MwNzcwQTE2ODBDMDAwMzJGNzVC
IC8qIEZvbnRGYWxsYmFja0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZvbnRGYWxsYmFja0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0Y3QzBCNzBBMTY4N0NDMDAzMkY3NUIgLyogRm9udENhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNGN0MyMzMwQTE2QjVGODAwMzJGNzVCIC8qIEZvbnRDYWNoZU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250Q2FjaGVNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzU2LDYgKzkzNTgsNyBAQAogCQkJCUJDMjBGQjdF
MEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKIAkJCQk5MjkyNjQ3
NjBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNEOUMy
NUUwQzE3QUE2NzAwNUM5MEEyIC8qIEpTRE9NV2luZG93Q3VzdG9tLmNwcCAqLywKKwkJCQlCQ0VG
QUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkM0RURF
RjMwQzA4RjNGQjAwN0VERDQ5IC8qIEpTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwICovLAog
CQkJCUJDQ0JBRDNBMEMxOEJGRjgwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNw
cCAqLywKIAkJCQlCQzUxNTgwQTBDMDNENDA0MDA4QkIwRUUgLyogSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwICovLApAQCAtMTMwNTksNiArMTMwNjIsNyBAQAogCQkJCUJDOTREMTRFMEMyNzVDNjgw
MDZCQzYxNyAvKiBKU0hpc3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NEQxNTMwQzI3
NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NEQxNTkw
QzI3NUNCNjAwNkJDNjE3IC8qIEdsb2JhbEhpc3RvcnlNYWMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlCQ0VGQUY0RTBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNFdmVudC5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRXZlbnQu
aCIKKyNpbmNsdWRlICJKU0tleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJKU01vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJKU011dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJKU092ZXJmbG93RXZl
bnQuaCIKKyNpbmNsdWRlICJKU1RleHRFdmVudC5oIgorI2luY2x1ZGUgIkpTVUlFdmVudC5oIgor
I2luY2x1ZGUgIkpTV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1
ZGUgIk92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJV
SUV2ZW50LmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgImtqc19ldmVudHMu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLSlM6OkpTVmFsdWUqIEpTRXZlbnQ6OmNsaXBi
b2FyZERhdGEoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltcGwo
KS0+aXNDbGlwYm9hcmRFdmVudCgpID8gdG9KUyhleGVjLCBpbXBsKCktPmNsaXBib2FyZERhdGEo
KSkgOiBLSlM6OmpzVW5kZWZpbmVkKCk7Cit9CisKK0tKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4
ZWNTdGF0ZSogZXhlYywgRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghZXZlbnQpCisgICAgICAg
IHJldHVybiBLSlM6OmpzTnVsbCgpOworCisgICAgS0pTOjpTY3JpcHRJbnRlcnByZXRlciogaW50
ZXJwID0gc3RhdGljX2Nhc3Q8S0pTOjpTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJ
bnRlcnByZXRlcigpKTsKKworICAgIEtKUzo6SlNMb2NrIGxvY2s7CisKKyAgICBLSlM6OkRPTU9i
amVjdCogcmV0ID0gaW50ZXJwLT5nZXRET01PYmplY3QoZXZlbnQpOworICAgIGlmIChyZXQpCisg
ICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQor
ICAgICAgICByZXQgPSBuZXcgSlNLZXlib2FyZEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PEtleWJv
YXJkRXZlbnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc1RleHRFdmVudCgpKQor
ICAgICAgICByZXQgPSBuZXcgSlNUZXh0RXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50
Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAg
IHJldCA9IG5ldyBKU01vdXNlRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2hlZWxFdmVudCgpKQorICAgICAgICByZXQg
PSBuZXcgSlNXaGVlbEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkp
OworICAgIGVsc2UgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gbmV3IEpT
VUlFdmVudChleGVjLCBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlm
IChldmVudC0+aXNNdXRhdGlvbkV2ZW50KCkpCisgICAgICAgIHJldCA9IG5ldyBKU011dGF0aW9u
RXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgZWxz
ZSBpZiAoZXZlbnQtPmlzT3ZlcmZsb3dFdmVudCgpKQorICAgICAgICByZXQgPSBuZXcgSlNPdmVy
Zmxvd0V2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihldmVudCkpOworICAg
IGVsc2UKKyAgICAgICAgcmV0ID0gbmV3IEpTRXZlbnQoZXhlYywgZXZlbnQpOworCisgICAgaW50
ZXJwLT5wdXRET01PYmplY3QoZXZlbnQsIHJldCk7CisgICAgcmV0dXJuIHJldDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Tm9kZS5jcHAJKHJldmlzaW9uIDIzNzk0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkV2ZW50VGFyZ2V0Tm9kZS5oIgorI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjM3
OTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxNiArMjYsMTcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc193aW5k
b3cuaCIKICNpbmNsdWRlICJ4bWxodHRwcmVxdWVzdC5oIgogCiAjaW5jbHVkZSAiSlNYTUxIdHRw
UmVxdWVzdC5sdXQuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIG5hbWVzcGFjZSBL
SlMgewogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LyBKU1hNTEh0dHBSZXF1ZXN0IE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogLyog
U291cmNlIGZvciBKU1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlVGFibGUuCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2V2ZW50cy5jcHAJKHJldmlzaW9uIDIzNzk0KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfZXZlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDE2NyArMzYyLDYgQEAg
SlNWYWx1ZSogZ2V0Tm9kZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLWNvbnN0IENsYXNzSW5mbyBET01FdmVudDo6aW5mbyA9IHsgIkV2ZW50IiwgMCwg
JkRPTUV2ZW50VGFibGUsIDAgfTsKLS8qCi1AYmVnaW4gRE9NRXZlbnRUYWJsZSAxMgotICB0eXBl
ICAgICAgICAgIERPTUV2ZW50OjpUeXBlICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAg
dGFyZ2V0ICAgICAgICBET01FdmVudDo6VGFyZ2V0ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5
Ci0gIGN1cnJlbnRUYXJnZXQgRE9NRXZlbnQ6OkN1cnJlbnRUYXJnZXQgRG9udERlbGV0ZXxSZWFk
T25seQotICBzcmNFbGVtZW50ICAgIERPTUV2ZW50OjpTcmNFbGVtZW50ICAgIERvbnREZWxldGV8
UmVhZE9ubHkKLSAgZXZlbnRQaGFzZSAgICBET01FdmVudDo6RXZlbnRQaGFzZSAgICBEb250RGVs
ZXRlfFJlYWRPbmx5Ci0gIGJ1YmJsZXMgICAgICAgRE9NRXZlbnQ6OkJ1YmJsZXMgICAgICAgRG9u
dERlbGV0ZXxSZWFkT25seQotICBjYW5jZWxhYmxlICAgIERPTUV2ZW50OjpDYW5jZWxhYmxlICAg
IERvbnREZWxldGV8UmVhZE9ubHkKLSAgdGltZVN0YW1wICAgICBET01FdmVudDo6VGltZVN0YW1w
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHJldHVyblZhbHVlICAgRE9NRXZlbnQ6OlJldHVy
blZhbHVlICAgRG9udERlbGV0ZQotICBjYW5jZWxCdWJibGUgIERPTUV2ZW50OjpDYW5jZWxCdWJi
bGUgIERvbnREZWxldGUKLSAgZGF0YVRyYW5zZmVyICBET01FdmVudDo6RGF0YVRyYW5zZmVyICBE
b250RGVsZXRlfFJlYWRPbmx5Ci0gIGNsaXBib2FyZERhdGEgIERPTUV2ZW50OjpDbGlwYm9hcmRE
YXRhICBEb250RGVsZXRlfFJlYWRPbmx5Ci1AZW5kCi1AYmVnaW4gRE9NRXZlbnRQcm90b3R5cGVU
YWJsZSAzCi0gIHN0b3BQcm9wYWdhdGlvbiAgICAgICBET01FdmVudDo6U3RvcFByb3BhZ2F0aW9u
ICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBwcmV2ZW50RGVmYXVsdCAgICAgICAgRE9N
RXZlbnQ6OlByZXZlbnREZWZhdWx0ICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLSAgaW5p
dEV2ZW50ICAgICAgICAgICAgIERPTUV2ZW50OjpJbml0RXZlbnQgICAgICAgICAgICAgRG9udERl
bGV0ZXxGdW5jdGlvbiAzCi1AZW5kCi0qLwotS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJ
T04oRE9NRXZlbnRQcm90b3R5cGVGdW5jdGlvbikKLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFKCJE
T01FdmVudCIsIERPTUV2ZW50UHJvdG90eXBlLCBET01FdmVudFByb3RvdHlwZUZ1bmN0aW9uKQot
Ci1ET01FdmVudDo6RE9NRXZlbnQoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXZlbnQpCi0gICAg
OiBtX2ltcGwoZXZlbnQpCi17Ci0gICAgc2V0UHJvdG90eXBlKERPTUV2ZW50UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpKTsKLX0KLQotRE9NRXZlbnQ6On5ET01FdmVudCgpCi17Ci0gICAgU2NyaXB0SW50
ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwotfQotCi1ib29sIERPTUV2
ZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVTbG90PERPTUV2ZW50LCBET01PYmplY3Q+KGV4ZWMsICZET01FdmVudFRhYmxlLCB0
aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1KU1ZhbHVlKiBET01FdmVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgICBFdmVu
dCogZXZlbnQgPSBpbXBsKCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIFR5
cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXZlbnQtPnR5cGUoKSk7Ci0gICAgICAg
IGNhc2UgVGFyZ2V0OgotICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZXZlbnQtPnRhcmdl
dCgpKTsKLSAgICAgICAgY2FzZSBTcmNFbGVtZW50OgotICAgICAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZXZlbnQtPnNyY0VsZW1lbnQoKSk7Ci0gICAgICAgIGNhc2UgQ3VycmVudFRhcmdldDoK
LSAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCkpOwot
ICAgICAgICBjYXNlIEV2ZW50UGhhc2U6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXZl
bnQtPmV2ZW50UGhhc2UoKSk7Ci0gICAgICAgIGNhc2UgQnViYmxlczoKLSAgICAgICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oZXZlbnQtPmJ1YmJsZXMoKSk7Ci0gICAgICAgIGNhc2UgQ2FuY2VsQnVi
YmxlOgotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihldmVudC0+Y2FuY2VsQnViYmxlKCkp
OwotICAgICAgICBjYXNlIFJldHVyblZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihldmVudC0+cmV0dXJuVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgQ2FuY2VsYWJsZToKLSAgICAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZXZlbnQtPmNhbmNlbGFibGUoKSk7Ci0gICAgICAgIGNh
c2UgVGltZVN0YW1wOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV2ZW50LT50aW1lU3Rh
bXAoKSk7Ci0gICAgICAgIGNhc2UgQ2xpcGJvYXJkRGF0YToKLSAgICAgICAgICAgIGlmIChldmVu
dC0+aXNDbGlwYm9hcmRFdmVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGV2ZW50LT5jbGlwYm9hcmREYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgICAgIGNhc2UgRGF0YVRyYW5zZmVyOgotICAgICAgICAgICAgaWYgKGV2ZW50LT5p
c0RyYWdFdmVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LT5k
YXRhVHJhbnNmZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBET01F
dmVudDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpCi17Ci0gICAgbG9va3VwUHV0PERPTUV2ZW50LCBE
T01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZET01FdmVudFRhYmxl
LCB0aGlzKTsKLX0KLQotdm9pZCBET01FdmVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSogdmFsdWUsIGludCkKLXsKLSAgICBFdmVudCogZXZl
bnQgPSBtX2ltcGwuZ2V0KCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIFJl
dHVyblZhbHVlOgotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRQcmV2ZW50ZWQoIXZhbHVl
LT50b0Jvb2xlYW4oZXhlYykpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2Fu
Y2VsQnViYmxlOgotICAgICAgICAgICAgZXZlbnQtPnNldENhbmNlbEJ1YmJsZSh2YWx1ZS0+dG9C
b29sZWFuKGV4ZWMpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1KU1ZhbHVlKiBET01FdmVudFByb3RvdHlwZUZ1
bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICogdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01F
dmVudDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
Ci0KLSAgICBFdmVudCogZXZlbnQgPSBzdGF0aWNfY2FzdDxET01FdmVudCo+KHRoaXNPYmopLT5p
bXBsKCk7Ci0gICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIERPTUV2ZW50OjpTdG9wUHJv
cGFnYXRpb246Ci0gICAgICAgICAgICBldmVudC0+c3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBET01FdmVudDo6UHJldmVu
dERlZmF1bHQ6Ci0gICAgICAgICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBjYXNlIERPTUV2ZW50OjpJbml0RXZl
bnQ6Ci0gICAgICAgICAgICBldmVudC0+aW5pdEV2ZW50KEF0b21pY1N0cmluZyhhcmdzWzBdLT50
b1N0cmluZyhleGVjKSksIGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKSwgYXJnc1syXS0+dG9Cb29s
ZWFuKGV4ZWMpKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9OwotICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50KQotICAgICAgICByZXR1cm4ganNOdWxs
KCk7Ci0KLSAgICBTY3JpcHRJbnRlcnByZXRlciogaW50ZXJwID0gc3RhdGljX2Nhc3Q8U2NyaXB0
SW50ZXJwcmV0ZXIqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSk7Ci0KLSAgICBKU0xvY2sg
bG9jazsKLQotICAgIERPTU9iamVjdCogcmV0ID0gaW50ZXJwLT5nZXRET01PYmplY3QoZXZlbnQp
OwotICAgIGlmIChyZXQpCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBpZiAoZXZlbnQtPmlz
S2V5Ym9hcmRFdmVudCgpKQotICAgICAgICByZXQgPSBuZXcgSlNLZXlib2FyZEV2ZW50KGV4ZWMs
IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwotICAgIGVsc2UgaWYgKGV2ZW50
LT5pc1RleHRFdmVudCgpKQotICAgICAgICByZXQgPSBuZXcgSlNUZXh0RXZlbnQoZXhlYywgc3Rh
dGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKLSAgICBlbHNlIGlmIChldmVudC0+aXNNb3Vz
ZUV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU01vdXNlRXZlbnQoZXhlYywgc3RhdGljX2Nh
c3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzV2hlZWxFdmVu
dCgpKQotICAgICAgICByZXQgPSBuZXcgSlNXaGVlbEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFdo
ZWVsRXZlbnQqPihldmVudCkpOwotICAgIGVsc2UgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkKLSAg
ICAgICAgcmV0ID0gbmV3IEpTVUlFdmVudChleGVjLCBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZl
bnQpKTsKLSAgICBlbHNlIGlmIChldmVudC0+aXNNdXRhdGlvbkV2ZW50KCkpCi0gICAgICAgIHJl
dCA9IG5ldyBKU011dGF0aW9uRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudCo+
KGV2ZW50KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzT3ZlcmZsb3dFdmVudCgpKQotICAgICAg
ICByZXQgPSBuZXcgSlNPdmVyZmxvd0V2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE92ZXJmbG93RXZl
bnQqPihldmVudCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0ID0gbmV3IEpTRXZlbnQoZXhlYywg
ZXZlbnQpOwotCi0gICAgaW50ZXJwLT5wdXRET01PYmplY3QoZXZlbnQsIHJldCk7Ci0gICAgcmV0
dXJuIHJldDsKLX0KLQotRXZlbnQqIHRvRXZlbnQoSlNWYWx1ZSogdmFsKQotewotICAgIGlmICgh
dmFsIHx8ICF2YWwtPmlzT2JqZWN0KCZET01FdmVudDo6aW5mbykpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxET01FdmVudCo+KHZhbCktPmltcGwoKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCiBjb25zdCBDbGFzc0luZm8gSlNDbGlwYm9hcmQ6OmluZm8g
PSB7ICJDbGlwYm9hcmQiLCAwLCAmSlNDbGlwYm9hcmRUYWJsZSwgMCB9OwogCiAvKiBTb3VyY2Ug
Zm9yIEpTQ2xpcGJvYXJkVGFibGUuIFVzZSAibWFrZSBoYXNodGFibGVzIiB0byByZWdlbmVyYXRl
LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmgJKHJldmlzaW9uIDIzNzk0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDQwICs5
NCw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgSlNWYWx1ZSogZ2V0Tm9kZUV2ZW50TGlzdGVu
ZXIoV2ViQ29yZTo6Tm9kZSogbiwgY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJiBldmVudFR5
cGUpOwogCi0gICAgY2xhc3MgRE9NRXZlbnQgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIERPTUV2ZW50KEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkV2ZW50Kik7Ci0gICAg
ICAgIHZpcnR1YWwgfkRPTUV2ZW50KCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2Vu
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgSlNWYWx1ZSosIGludCBhdHRyID0gTm9uZSk7Ci0gICAgICAgIHZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTVmFsdWUqLCBpbnQgYXR0cik7Ci0K
LSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLQotICAg
ICAgICBlbnVtIHsgCi0gICAgICAgICAgICBUeXBlLCBUYXJnZXQsIEN1cnJlbnRUYXJnZXQsIEV2
ZW50UGhhc2UsCi0gICAgICAgICAgICBCdWJibGVzLCBDYW5jZWxhYmxlLCBUaW1lU3RhbXAsIFN0
b3BQcm9wYWdhdGlvbiwKLSAgICAgICAgICAgIFByZXZlbnREZWZhdWx0LCBJbml0RXZlbnQsCi0K
LSAgICAgICAgICAgIC8vIE1TIElFIGVxdWl2YWxlbnRzCi0gICAgICAgICAgICBTcmNFbGVtZW50
LCBSZXR1cm5WYWx1ZSwgQ2FuY2VsQnViYmxlLCBDbGlwYm9hcmREYXRhLAotICAgICAgICAgICAg
RGF0YVRyYW5zZmVyCi0gICAgICAgIH07Ci0KLSAgICAgICAgV2ViQ29yZTo6RXZlbnQqIGltcGwo
KSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OkV2ZW50PiBtX2ltcGw7Ci0gICAgfTsKLQotICAgIEpTVmFsdWUq
IHRvSlMoRXhlY1N0YXRlKiwgV2ViQ29yZTo6RXZlbnQqKTsKLSAgICBXZWJDb3JlOjpFdmVudCog
dG9FdmVudChKU1ZhbHVlKik7IC8vIHJldHVybnMgMCBpZiB2YWx1ZSBpcyBub3QgYSBET01FdmVu
dCBvYmplY3QKLQotICAgIEtKU19ERUZJTkVfUFJPVE9UWVBFKERPTUV2ZW50UHJvdG90eXBlKQot
CiAgICAgY2xhc3MgSlNDbGlwYm9hcmQgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpTQ2xpcGJvYXJkUHJvdG90eXBlRnVuY3Rpb247CiAgICAgcHVibGljOgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW0JKHJldmlzaW9uIDIzNzk0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDYg
Kzc4LDcgQEAgc3RhdGljIGlubGluZSBpZCBjcmVhdGVET01XcmFwcGVyKEtKUzo6SgogICAgIFdS
QVAoQ1NTU3R5bGVEZWNsYXJhdGlvbikKICAgICBXUkFQKENTU1ZhbHVlKQogICAgIFdSQVAoQ291
bnRlcikKKyAgICBXUkFQKEV2ZW50KQogICAgIFdSQVAoSFRNTE9wdGlvbnNDb2xsZWN0aW9uKQog
ICAgIFdSQVAoTWVkaWFMaXN0KQogICAgIFdSQVAoTmFtZWROb2RlTWFwKQpAQCAtOTcsMTQgKzk4
LDYgQEAgc3RhdGljIGlubGluZSBpZCBjcmVhdGVET01XcmFwcGVyKEtKUzo6SgogCiAgICAgI3Vu
ZGVmIFdSQVAKIAotICAgICNkZWZpbmUgV1JBUChjbGFzc05hbWUpIFwKLSAgICAgICAgaWYgKG9i
amVjdC0+aW5oZXJpdHMoJkRPTSMjY2xhc3NOYW1lOjppbmZvKSkgXAotICAgICAgICAgICAgcmV0
dXJuIFtvYmpjX2dldENsYXNzKCJET00iICNjbGFzc05hbWUpIF93cmFwIyNjbGFzc05hbWU6c3Rh
dGljX2Nhc3Q8RE9NIyNjbGFzc05hbWUqPihvYmplY3QpLT5pbXBsKCldOwotCi0gICAgV1JBUChF
dmVudCkKLQotICAgICN1bmRlZiBXUkFQCi0KICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmV2lu
ZG93OjppbmZvKSkKICAgICAgICAgcmV0dXJuIFtET01BYnN0cmFjdFZpZXcgX3dyYXBBYnN0cmFj
dFZpZXc6c3RhdGljX2Nhc3Q8V2luZG93Kj4ob2JqZWN0KS0+aW1wbCgpXTsKICAgICBpZiAob2Jq
ZWN0LT5pbmhlcml0cygmV2ViQ29yZTo6SlNET01JbXBsZW1lbnRhdGlvbjo6aW5mbykpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9u
IDIzNzk0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHN1YiBVc2VzTWFudWFsVG9KU0ltcGxl
bWVudGF0aW9uCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKIAotICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJOb2RlIiBvciAkdHlwZSBlcSAiRG9jdW1lbnQiIG9yICR0eXBlIGVxICJIVE1MQ29s
bGVjdGlvbiIgb3IgJHR5cGUgZXEgIlNWR1BhdGhTZWciIG9yICR0eXBlIGVxICJTdHlsZVNoZWV0
IiBvciAkdHlwZSBlcSAiQ1NTUnVsZSIgb3IgJHR5cGUgZXEgIkNTU1ZhbHVlIjsKKyAgICByZXR1
cm4gMSBpZiAkdHlwZSBlcSAiTm9kZSIgb3IgJHR5cGUgZXEgIkRvY3VtZW50IiBvciAkdHlwZSBl
cSAiSFRNTENvbGxlY3Rpb24iIG9yICR0eXBlIGVxICJTVkdQYXRoU2VnIiBvciAkdHlwZSBlcSAi
U3R5bGVTaGVldCIgb3IgJHR5cGUgZXEgIkNTU1J1bGUiIG9yICR0eXBlIGVxICJDU1NWYWx1ZSIg
b3IgJHR5cGUgZXEgIkV2ZW50IjsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTQwNCw3ICsxNDA0
LDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3It
PlN0cmlwTW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOwogCiAgICAgcmV0dXJuICJqc0Jvb2xlYW4o
JHZhbHVlKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwotICAgIHJldHVybiAianNOdW1iZXIoJHZh
bHVlKSIgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgJHR5cGUg
ZXEgIlNWR1BhaW50VHlwZSI7CisgICAgcmV0dXJuICJqc051bWJlcigkdmFsdWUpIiBpZiAkY29k
ZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvciAkdHlwZSBlcSAiU1ZHUGFpbnRU
eXBlIiBvciAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKIAogICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTdHJpbmdUeXBlKCR0eXBlKSkgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJQbGF0Zm9y
bVN0cmluZy5oIn0gPSAxOwpAQCAtMTQ3NCw5ICsxNDc0LDYgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1
ZQogICAgICAgICAkaW1wbEluY2x1ZGVzeyJFdmVudFRhcmdldE5vZGUuaCJ9ID0gMTsKICAgICAg
ICAgJGltcGxJbmNsdWRlc3siSlNFdmVudFRhcmdldE5vZGUuaCJ9ID0gMTsKICAgICAgICAgJGlt
cGxJbmNsdWRlc3sia2pzX2RvbS5oIn0gPSAxOwotICAgIH0gZWxzaWYgKCR0eXBlIGVxICJFdmVu
dCIpIHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2V2ZW50cy5oIn0gPSAxOwotICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJFdmVudC5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCR0eXBlIGVxICJI
VE1MQ2FudmFzRWxlbWVudCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2RvbS5oIn0g
PSAxOwogICAgICAgICAkaW1wbEluY2x1ZGVzeyJIVE1MQ2FudmFzRWxlbWVudC5oIn0gPSAxOwpA
QCAtMTQ4NCw2ICsxNDgxLDkgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJranNfd2luZG93LmgifSA9IDE7CiAgICAgfSBlbHNpZiAoJHR5cGUgZXEgIkRPTU9i
amVjdCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCJ9ID0gMTsKKyAgICB9IGVsc2lmICgkdHlwZSBlcSAiQ2xpcGJvYXJkIikgeworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJranNfZXZlbnRzLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkNsaXBib2FyZC5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCR0eXBlID1+IC9TVkdQYXRoU2Vn
LykgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CiAgICAgICAgICRq
b2luZWROYW1lID0gJHR5cGU7CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0V2ZW50LmgJKHJldmlzaW9uIDIzNzk0KQorKysgV2ViQ29yZS9kb20v
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsOSArOTMsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIC8vIElFIEV4dGVuc2lvbnMKICAgICAgICAgRXZlbnRUYXJnZXQqIHNy
Y0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0YXJnZXQoKTsgfSAvLyBNU0lFIGV4dGVuc2lvbiAt
ICJ0aGUgb2JqZWN0IHRoYXQgZmlyZWQgdGhlIGV2ZW50IgotICAgICAgICBib29sIHJldHVyblZh
bHVlKCkgY29uc3QgeyByZXR1cm4gIW1fZGVmYXVsdFByZXZlbnRlZDsgfQorCisgICAgICAgIGJv
b2wgcmV0dXJuVmFsdWUoKSBjb25zdCB7IHJldHVybiAhZGVmYXVsdFByZXZlbnRlZCgpOyB9Cisg
ICAgICAgIHZvaWQgc2V0UmV0dXJuVmFsdWUoYm9vbCByZXR1cm5WYWx1ZSkgeyBzZXREZWZhdWx0
UHJldmVudGVkKCFyZXR1cm5WYWx1ZSk7IH0KKwogICAgICAgICBDbGlwYm9hcmQqIGNsaXBib2Fy
ZERhdGEoKSBjb25zdCB7IHJldHVybiBpc0NsaXBib2FyZEV2ZW50KCkgPyBjbGlwYm9hcmQoKSA6
IDA7IH0KLSAgICAgICAgQ2xpcGJvYXJkKiBkYXRhVHJhbnNmZXIoKSBjb25zdCB7IHJldHVybiBp
c01vdXNlRXZlbnQoKSA/IGNsaXBib2FyZCgpIDogMDsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1VJRXZlbnQoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgp
IGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0V2ZW50LmlkbAkocmV2aXNpb24gMjM3OTQpCisrKyBXZWJDb3JlL2RvbS9FdmVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDcgKzIx
LDcgQEAKIG1vZHVsZSBldmVudHMgewogCiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MjoKLSAgICBpbnRlcmZhY2UgW0xlZ2FjeVBhcmVudD1LSlM6OkRPTUV2ZW50LCBHZW5lcmF0ZUNv
bnN0cnVjdG9yLCBPYmpDQ3VzdG9tSW50ZXJuYWxJbXBsXSBFdmVudCB7CisgICAgaW50ZXJmYWNl
IFtHZW5lcmF0ZUNvbnN0cnVjdG9yLCBPYmpDQ3VzdG9tSW50ZXJuYWxJbXBsXSBFdmVudCB7CiAK
ICAgICAgICAgLy8gRE9NIFBoYXNlVHlwZQogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBD
QVBUVVJJTkdfUEhBU0UgICAgID0gMTsKQEAgLTQ4LDcgKzQ4LDYgQEAgbW9kdWxlIGV2ZW50cyB7
CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENIQU5HRSAgICAgICAgICAgICAgPSAzMjc2
ODsKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgdHlwZTsKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEV2ZW50VGFyZ2V0ICAgICAgdGFyZ2V0OwogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRXZlbnRUYXJnZXQgICAgICBjdXJyZW50VGFyZ2V0OwpAQCAtNjEsNiArNjAsMTQg
QEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgICAgIFtPbGRTdHlsZU9iakNdIHZvaWQgaW5pdEV2ZW50
KGluIERPTVN0cmluZyBldmVudFR5cGVBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZyk7CisKKyAgICAgICAg
Ly8gSUUgRXh0ZW5zaW9ucworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRXZlbnRUYXJnZXQg
ICAgICBzcmNFbGVtZW50OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiAgICAg
ICAgICByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAg
ICAgICAgY2FuY2VsQnViYmxlOworCisjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKQor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbV0gQ2xpcGJvYXJkICAgICAgICBjbGlw
Ym9hcmREYXRhOwogI2VuZGlmCiAKICAgICB9OwpJbmRleDogV2ViQ29yZS9kb20vTW91c2VFdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAkocmV2aXNpb24gMjM3
OTQpCisrKyBXZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYg
KzU4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOb2RlKiB0b0VsZW1lbnQoKSBj
b25zdDsKICAgICAgICAgTm9kZSogZnJvbUVsZW1lbnQoKSBjb25zdDsKIAorICAgICAgICBDbGlw
Ym9hcmQqIGRhdGFUcmFuc2ZlcigpIGNvbnN0IHsgcmV0dXJuIGlzRHJhZ0V2ZW50KCkgPyBtX2Ns
aXBib2FyZC5nZXQoKSA6IDA7IH0KKwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50
KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vTW91c2VF
dmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTW91c2VFdmVudC5pZGwJKHJldmlz
aW9uIDIzNzk0KQorKysgV2ViQ29yZS9kb20vTW91c2VFdmVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSw2ICs1NSwxMCBAQCBtb2R1bGUg
ZXZlbnRzIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgeTsK
ICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgICAgICAgICAgICAgZnJvbUVsZW1lbnQ7
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlICAgICAgICAgICAgIHRvRWxlbWVudDsK
KworI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIENsaXBib2FyZCAgICAgICAgZGF0YVRyYW5zZmVyOworI2VuZGlmCiAgICAgfTsKIAog
fQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjM3OTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwNy0wNi0yNiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVwZGF0ZSB0ZXN0cyBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxMTEKKyAgICAgICAgQXV0b2dlbmVyYXRlIEV2ZW50IEpTIGJpbmRpbmcKKworICAg
ICAgICAqIGZhc3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQ6IERPTUV2ZW50UHJv
dG90eXBlIGlzIG5vIGxvbmdlcgorICAgICAgICBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgorICAg
ICAgICAqIGZhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQ6CisKIDIwMDct
MDYtMjYgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBKb2huLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBl
LWNoYWluLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9w
cm90b3R5cGUtY2hhaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMzc5NCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDM0ICs0MiwyOCBAQCBOT1RFOiBUaGlzIHRlc3Qgd2lsbCBzdGFydCBmYWlsaW5nIGlm
IHlvCiAKIFtvYmplY3QgSFRNTEZvcm1FbGVtZW50UHJvdG90eXBlXQogCi0tLS0tLSBbb2JqZWN0
IFVJRXZlbnRdICg0IHByb3RvdHlwZXMpIC0tLS0tCistLS0tLSBbb2JqZWN0IFVJRXZlbnRdICgz
IHByb3RvdHlwZXMpIC0tLS0tCiAKIFtvYmplY3QgT2JqZWN0XQogCi1bb2JqZWN0IERPTUV2ZW50
UHJvdG90eXBlXQotCiBbb2JqZWN0IEV2ZW50UHJvdG90eXBlXQogCiBbb2JqZWN0IFVJRXZlbnRQ
cm90b3R5cGVdCiAKLS0tLS0tIFtvYmplY3QgTW91c2VFdmVudF0gKDUgcHJvdG90eXBlcykgLS0t
LS0KKy0tLS0tIFtvYmplY3QgTW91c2VFdmVudF0gKDQgcHJvdG90eXBlcykgLS0tLS0KIAogW29i
amVjdCBPYmplY3RdCiAKLVtvYmplY3QgRE9NRXZlbnRQcm90b3R5cGVdCi0KIFtvYmplY3QgRXZl
bnRQcm90b3R5cGVdCiAKIFtvYmplY3QgVUlFdmVudFByb3RvdHlwZV0KIAogW29iamVjdCBNb3Vz
ZUV2ZW50UHJvdG90eXBlXQogCi0tLS0tLSBbb2JqZWN0IEtleWJvYXJkRXZlbnRdICg1IHByb3Rv
dHlwZXMpIC0tLS0tCistLS0tLSBbb2JqZWN0IEtleWJvYXJkRXZlbnRdICg0IHByb3RvdHlwZXMp
IC0tLS0tCiAKIFtvYmplY3QgT2JqZWN0XQogCi1bb2JqZWN0IERPTUV2ZW50UHJvdG90eXBlXQot
CiBbb2JqZWN0IEV2ZW50UHJvdG90eXBlXQogCiBbb2JqZWN0IFVJRXZlbnRQcm90b3R5cGVdCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1nZXQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdldC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDIzNzk0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20veG1s
aHR0cHJlcXVlc3QtZ2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcs
NiBAQCBjYW5jZWxCdWJibGUgOiAnZmFsc2UnCiBjYW5jZWxhYmxlIDogJ3RydWUnCiBjbGlwYm9h
cmREYXRhIDogJ3VuZGVmaW5lZCcKIGN1cnJlbnRUYXJnZXQgOiAnW29iamVjdCBKU1hNTEh0dHBS
ZXF1ZXN0XScKLWRhdGFUcmFuc2ZlciA6ICd1bmRlZmluZWQnCiBldmVudFBoYXNlIDogJzAnCiBp
bml0RXZlbnQgOiAnCiBmdW5jdGlvbiBpbml0RXZlbnQoKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15261</attachid>
            <date>2007-06-26 16:38:42 -0700</date>
            <delta_ts>2007-06-26 21:36:33 -0700</delta_ts>
            <desc>cleanup portion of the patch</desc>
            <filename>kjs_eventsCleanup.diff</filename>
            <type>text/plain</type>
            <size>25352</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzgwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDctMDYtMjYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAybmQgcGF0
Y2ggZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTExCisgICAg
ICAgIEF1dG9nZW5lcmF0ZSBFdmVudCBKUyBiaW5kaW5nCisKKyAgICAgICAgLSBDbGVhbnVwIGtq
c19ldmVudHMKKworICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OkpTQWJzdHJhY3RFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aXNIVE1M
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6On5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmop
OgorICAgICAgICAoV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OndpbmRvd09i
aik6CisgICAgICAgIChXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y2xlYXJX
aW5kb3dPYmopOgorICAgICAgICAoV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6
Om1hcmspOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjp+SlNFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmopOgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjp3aW5kb3dPYmopOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFdmVudExpc3RlbmVyOjpjbGVhcldpbmRvd09iaik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyT2JqKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXROb2RlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6SlND
bGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmdldFZhbHVlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnB1dFZhbHVlUHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmRQcm90b3R5cGVGdW5jdGlvbjo6Y2FsbEFzRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0Ns
aXBib2FyZCk6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU0Ns
aXBib2FyZDo6aW1wbCk6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5oOgorICAg
ICAgICAqIGtzdmcyL2V2ZW50cy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmg6CisKIDIwMDctMDYt
MjYgIEFscCBUb2tlciAgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWl0eiwgbGFuZGVkIGJ5IEFuZGVycy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
ZXZlbnRzLmNwcAkocmV2aXNpb24gMjM3OTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19l
dmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwzNCArMzQsMjEgQEAKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudFRhcmdl
dE5vZGUuaCIKLSNpbmNsdWRlICJKU0tleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJKU01vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJKU011dGF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJKU092ZXJm
bG93RXZlbnQuaCIKLSNpbmNsdWRlICJKU1RleHRFdmVudC5oIgotI2luY2x1ZGUgIkpTV2hlZWxF
dmVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0j
aW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKLSNpbmNs
dWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHRF
dmVudC5oIgotI2luY2x1ZGUgIlVJRXZlbnQuaCIKLSNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAj
aW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgogCiAjaW5jbHVk
ZSAia2pzX2V2ZW50cy5sdXQuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CiB1c2luZyBuYW1lc3BhY2UgRXZl
bnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLW5hbWVzcGFjZSBLSlMgewot
Ci1KU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoYm9vbCBf
aHRtbCkKLSAgICA6IGh0bWwoX2h0bWwpCitKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6SlNBYnN0
cmFjdEV2ZW50TGlzdGVuZXIoYm9vbCBodG1sKQorICAgIDogbV9odG1sKGh0bWwpCiB7CiB9CiAK
QEAgLTcyLDcgKzU5LDcgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bgogICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgIEV2ZW50ICpldmVudCA9IGVsZTsKKyAg
ICBFdmVudCogZXZlbnQgPSBlbGU7CiAKICAgICBKU09iamVjdCogbGlzdGVuZXIgPSBsaXN0ZW5l
ck9iaigpOwogICAgIGlmICghbGlzdGVuZXIpCkBAIC05MSwyOSArNzgsMjkgQEAgdm9pZCBKU0Fi
c3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICAgICAgICByZXR1cm47CiAKICAgICBK
U0xvY2sgbG9jazsKLSAgCisKICAgICBTY3JpcHRJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBw
cm94eS0+aW50ZXJwcmV0ZXIoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBpbnRlcnByZXRlci0+
Z2xvYmFsRXhlYygpOwotICAKKwogICAgIEpTVmFsdWUqIGhhbmRsZUV2ZW50RnVuY1ZhbHVlID0g
bGlzdGVuZXItPmdldChleGVjLCAiaGFuZGxlRXZlbnQiKTsKICAgICBKU09iamVjdCogaGFuZGxl
RXZlbnRGdW5jID0gMDsKLSAgICBpZiAoaGFuZGxlRXZlbnRGdW5jVmFsdWUtPmlzT2JqZWN0KCkp
IHsgICAgICAKKyAgICBpZiAoaGFuZGxlRXZlbnRGdW5jVmFsdWUtPmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgaGFuZGxlRXZlbnRGdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihoYW5kbGVFdmVu
dEZ1bmNWYWx1ZSk7CiAgICAgICAgIGlmICghaGFuZGxlRXZlbnRGdW5jLT5pbXBsZW1lbnRzQ2Fs
bCgpKQogICAgICAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gMDsKICAgICB9Ci0gIAorCiAgICAg
aWYgKGhhbmRsZUV2ZW50RnVuYyB8fCBsaXN0ZW5lci0+aW1wbGVtZW50c0NhbGwoKSkgewogICAg
ICAgICByZWYoKTsKLSAgICAgIAorCiAgICAgICAgIExpc3QgYXJnczsKICAgICAgICAgYXJncy5h
cHBlbmQodG9KUyhleGVjLCBldmVudCkpOwotICAgICAgCisKICAgICAgICAgLy8gU2V0IHRoZSBl
dmVudCB3ZSdyZSBoYW5kbGluZyBpbiB0aGUgV2luZG93IG9iamVjdAogICAgICAgICB3aW5kb3ct
PnNldEN1cnJlbnRFdmVudChldmVudCk7CiAgICAgICAgIC8vIC4uLiBhbmQgaW4gdGhlIGludGVy
cHJldGVyCiAgICAgICAgIGludGVycHJldGVyLT5zZXRDdXJyZW50RXZlbnQoZXZlbnQpOwotICAg
ICAgCisKICAgICAgICAgSlNWYWx1ZSogcmV0dmFsOwogICAgICAgICBpZiAoaGFuZGxlRXZlbnRG
dW5jKSB7CiAgICAgICAgICAgICBpbnRlcnByZXRlci0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKQEAg
LTE0NSw3ICsxMzIsNyBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXJldHZhbC0+aXNVbmRlZmluZWRP
ck51bGwoKSAmJiBldmVudC0+c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSkKICAgICAgICAgICAgICAg
ICBldmVudC0+c3RvcmVSZXN1bHQocmV0dmFsLT50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgICAg
ICBpZiAoaHRtbCkgeworICAgICAgICAgICAgaWYgKG1faHRtbCkgewogICAgICAgICAgICAgICAg
IGJvb2wgcmV0dmFsYm9vbDsKICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLT5nZXRCb29sZWFu
KHJldHZhbGJvb2wpICYmICFyZXR2YWxib29sKQogICAgICAgICAgICAgICAgICAgICBldmVudC0+
cHJldmVudERlZmF1bHQoKTsKQEAgLTE1OSw1MSArMTQ2LDUxIEBAIHZvaWQgSlNBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KIAogYm9vbCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
aXNIVE1MRXZlbnRMaXN0ZW5lcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGh0bWw7CisgICAgcmV0
dXJuIG1faHRtbDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNPYmplY3QqIF9saXN0ZW5l
ciwgV2luZG93KiBfd2luLCBib29sIF9odG1sKQotICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
KF9odG1sKQotICAsIGxpc3RlbmVyKF9saXN0ZW5lcikKLSAgLCB3aW4oX3dpbikKLXsKLSAgICBp
ZiAoX2xpc3RlbmVyKSB7Ci0gICAgICAgIFdpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAm
IGxpc3RlbmVycyA9IF9odG1sIAotICAgICAgICAgICAgPyBfd2luLT5qc1VucHJvdGVjdGVkSFRN
TEV2ZW50TGlzdGVuZXJzKCkgOiBfd2luLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKTsK
LSAgICAgICAgbGlzdGVuZXJzLnNldChfbGlzdGVuZXIsIHRoaXMpOworSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXI6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBsaXN0ZW5l
ciwgV2luZG93KiB3aW4sIGJvb2wgaHRtbCkKKyAgICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
KGh0bWwpCisgICAgLCBtX2xpc3RlbmVyKGxpc3RlbmVyKQorICAgICwgbV93aW4od2luKQorewor
ICAgIGlmIChtX2xpc3RlbmVyKSB7CisgICAgICAgIFdpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5l
cnNNYXAmIGxpc3RlbmVycyA9IGh0bWwKKyAgICAgICAgICAgID8gbV93aW4tPmpzVW5wcm90ZWN0
ZWRIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cnMoKTsKKyAgICAgICAgbGlzdGVuZXJzLnNldChtX2xpc3RlbmVyLCB0aGlzKTsKICAgICB9CiB9
CiAKIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjp+SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIoKQogewotICAgIGlmIChsaXN0ZW5lciAmJiB3aW4pIHsKKyAgICBpZiAobV9saXN0ZW5lciAm
JiBtX3dpbikgewogICAgICAgICBXaW5kb3c6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0
ZW5lcnMgPSBpc0hUTUxFdmVudExpc3RlbmVyKCkKLSAgICAgICAgICAgID8gd2luLT5qc1VucHJv
dGVjdGVkSFRNTEV2ZW50TGlzdGVuZXJzKCkgOiB3aW4tPmpzVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVycygpOwotICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKyAgICAgICAgICAg
ID8gbV93aW4tPmpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IG1fd2luLT5qc1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShtX2xp
c3RlbmVyKTsKICAgICB9CiB9CiAKIEpTT2JqZWN0KiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cjo6bGlzdGVuZXJPYmooKSBjb25zdAoteyAKLSAgICByZXR1cm4gbGlzdGVuZXI7IAoreworICAg
IHJldHVybiBtX2xpc3RlbmVyOwogfQogCiBXaW5kb3cqIEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyOjp3aW5kb3dPYmooKSBjb25zdAogewotICAgIHJldHVybiB3aW47CisgICAgcmV0dXJuIG1f
d2luOwogfQogCiB2b2lkIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpjbGVhcldpbmRvd09i
aigpCiB7Ci0gICAgd2luID0gMDsKKyAgICBtX3dpbiA9IDA7CiB9CiAKIHZvaWQgSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXI6Om1hcmsoKQogewotICAgIGlmIChsaXN0ZW5lciAmJiAhbGlzdGVu
ZXItPm1hcmtlZCgpKQotICAgICAgICBsaXN0ZW5lci0+bWFyaygpOworICAgIGlmIChtX2xpc3Rl
bmVyICYmICFtX2xpc3RlbmVyLT5tYXJrZWQoKSkKKyAgICAgICAgbV9saXN0ZW5lci0+bWFyaygp
OwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjI2LDE1ICsyMTMsMTUgQEAgc3RhdGljIEV2ZW50
TGlzdGVuZXJDb3VudGVyIGV2ZW50TGlzdGVuZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpT
RXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBfbGlzdGVuZXIsIFdpbmRv
dyogX3dpbiwgYm9vbCBfaHRtbCkKLSAgICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKF9odG1s
KQotICAgICwgbGlzdGVuZXIoX2xpc3RlbmVyKQotICAgICwgd2luKF93aW4pCi17Ci0gICAgaWYg
KF9saXN0ZW5lcikgewotICAgICAgICBXaW5kb3c6Okxpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0g
X2h0bWwKLSAgICAgICAgICAgID8gX3dpbi0+anNIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IF93aW4t
PmpzRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICAgICAgbGlzdGVuZXJzLnNldChfbGlzdGVuZXIsIHRo
aXMpOworSlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGxpc3RlbmVy
LCBXaW5kb3cqIHdpbiwgYm9vbCBodG1sKQorICAgIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIo
aHRtbCkKKyAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCisgICAgLCBtX3dpbih3aW4pCit7Cisg
ICAgaWYgKG1fbGlzdGVuZXIpIHsKKyAgICAgICAgV2luZG93OjpMaXN0ZW5lcnNNYXAmIGxpc3Rl
bmVycyA9IGh0bWwKKyAgICAgICAgICAgID8gbV93aW4tPmpzSFRNTEV2ZW50TGlzdGVuZXJzKCkg
OiBtX3dpbi0+anNFdmVudExpc3RlbmVycygpOworICAgICAgICBsaXN0ZW5lcnMuc2V0KG1fbGlz
dGVuZXIsIHRoaXMpOwogICAgIH0KICNpZm5kZWYgTkRFQlVHCiAgICAgKytldmVudExpc3RlbmVy
Q291bnRlci5jb3VudDsKQEAgLTI0MywxMCArMjMwLDEwIEBAIEpTRXZlbnRMaXN0ZW5lcjo6SlNF
dmVudExpc3RlbmVyKEpTT2JqZWMKIAogSlNFdmVudExpc3RlbmVyOjp+SlNFdmVudExpc3RlbmVy
KCkKIHsKLSAgICBpZiAobGlzdGVuZXIgJiYgd2luKSB7CisgICAgaWYgKG1fbGlzdGVuZXIgJiYg
bV93aW4pIHsKICAgICAgICAgV2luZG93OjpMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlzSFRN
TEV2ZW50TGlzdGVuZXIoKQotICAgICAgICAgICAgPyB3aW4tPmpzSFRNTEV2ZW50TGlzdGVuZXJz
KCkgOiB3aW4tPmpzRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShs
aXN0ZW5lcik7CisgICAgICAgICAgICA/IG1fd2luLT5qc0hUTUxFdmVudExpc3RlbmVycygpIDog
bV93aW4tPmpzRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShtX2xp
c3RlbmVyKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIC0tZXZlbnRMaXN0ZW5lckNvdW50
ZXIuY291bnQ7CkBAIC0yNTQsMjkgKzI0MSwyOSBAQCBKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50
TGlzdGVuZXIoKQogfQogCiBKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjpsaXN0ZW5lck9iaigp
IGNvbnN0Ci17IAotICAgIHJldHVybiBsaXN0ZW5lcjsgCit7CisgICAgcmV0dXJuIG1fbGlzdGVu
ZXI7CiB9CiAKIFdpbmRvdyogSlNFdmVudExpc3RlbmVyOjp3aW5kb3dPYmooKSBjb25zdAogewot
ICAgIHJldHVybiB3aW47CisgICAgcmV0dXJuIG1fd2luOwogfQogCiB2b2lkIEpTRXZlbnRMaXN0
ZW5lcjo6Y2xlYXJXaW5kb3dPYmooKQogewotICAgIHdpbiA9IDA7CisgICAgbV93aW4gPSAwOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2
ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29k
ZSwgV2luZG93KiB3aW4sIE5vZGUqIG5vZGUsIGludCBsaW5lbm8pCi0gIDogSlNFdmVudExpc3Rl
bmVyKDAsIHdpbiwgdHJ1ZSkKLSAgLCBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCi0gICwg
Y29kZShjb2RlKQotICAsIHBhcnNlZChmYWxzZSkKLSAgLCBsaW5lTnVtYmVyKGxpbmVubykKLSAg
LCBvcmlnaW5hbE5vZGUobm9kZSkKK0pTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlz
dGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgV2lu
ZG93KiB3aW4sIE5vZGUqIG5vZGUsIGludCBsaW5lTnVtYmVyKQorICAgIDogSlNFdmVudExpc3Rl
bmVyKDAsIHdpbiwgdHJ1ZSkKKyAgICAsIG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKKyAg
ICAsIG1fY29kZShjb2RlKQorICAgICwgbV9wYXJzZWQoZmFsc2UpCisgICAgLCBtX2xpbmVOdW1i
ZXIobGluZU51bWJlcikKKyAgICAsIG1fb3JpZ2luYWxOb2RlKG5vZGUpCiB7CiAgICAgLy8gV2Ug
ZG9uJ3QgcmV0YWluIHRoZSBvcmlnaW5hbCBub2RlIGJlY2F1c2Ugd2UgYXNzdW1lIGl0CiAgICAg
Ly8gd2lsbCBzdGF5IGFsaXZlIGFzIGxvbmcgYXMgdGhpcyBoYW5kbGVyIG9iamVjdCBpcyBhcm91
bmQKQEAgLTI4OCw3ICsyNzUsNyBAQCBKU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExp
c3RlbmVyCiBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmooKSBjb25z
dAogewogICAgIHBhcnNlQ29kZSgpOwotICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICByZXR1cm4g
bV9saXN0ZW5lcjsKIH0KIAogSlNWYWx1ZSogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6ZXZlbnRQYXJh
bWV0ZXJOYW1lKCkgY29uc3QKQEAgLTI5OSwxMiArMjg2LDEyIEBAIEpTVmFsdWUqIEpTTGF6eUV2
ZW50TGlzdGVuZXI6OmV2ZW50UGFyYW0KIAogdm9pZCBKU0xhenlFdmVudExpc3RlbmVyOjpwYXJz
ZUNvZGUoKSBjb25zdAogewotICAgIGlmIChwYXJzZWQpCisgICAgaWYgKG1fcGFyc2VkKQogICAg
ICAgICByZXR1cm47Ci0gICAgcGFyc2VkID0gdHJ1ZTsKKyAgICBtX3BhcnNlZCA9IHRydWU7CiAK
LSAgICBGcmFtZSAqZnJhbWUgPSB3aW5kb3dPYmooKS0+ZnJhbWUoKTsKLSAgICBLSlNQcm94eSAq
cHJveHkgPSAwOworICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvd09iaigpLT5mcmFtZSgpOworICAg
IEtKU1Byb3h5KiBwcm94eSA9IDA7CiAgICAgaWYgKGZyYW1lKQogICAgICAgICBwcm94eSA9IGZy
YW1lLT5zY3JpcHRQcm94eSgpOwogCkBAIC0zMTgsMjIgKzMwNSwyMiBAQCB2b2lkIEpTTGF6eUV2
ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGNvCiAKICAgICAgICAgVVN0cmluZyBzb3VyY2VVUkwo
ZnJhbWUtPmxvYWRlcigpLT51cmwoKS51cmwoKSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGV2ZW50
UGFyYW1ldGVyTmFtZSgpKTsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoY29kZSkpOwot
ICAgICAgICBsaXN0ZW5lciA9IGNvbnN0ci0+Y29uc3RydWN0KGV4ZWMsIGFyZ3MsIG1fZnVuY3Rp
b25OYW1lLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpOyAvLyAjIyMgaXMgZ2xvYmFsRXhlYyBvayA/
CisgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKG1fY29kZSkpOworICAgICAgICBtX2xpc3Rl
bmVyID0gY29uc3RyLT5jb25zdHJ1Y3QoZXhlYywgYXJncywgbV9mdW5jdGlvbk5hbWUsIHNvdXJj
ZVVSTCwgbV9saW5lTnVtYmVyKTsgLy8gRklYTUU6IGlzIGdsb2JhbEV4ZWMgb2sgPwogCi0gICAg
ICAgIEZ1bmN0aW9uSW1wKiBsaXN0ZW5lckFzRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkltcCo+KGxpc3RlbmVyLmdldCgpKTsKKyAgICAgICAgRnVuY3Rpb25JbXAqIGxpc3RlbmVyQXNG
dW5jdGlvbiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4obV9saXN0ZW5lci5nZXQoKSk7CiAK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgICAgICAvLyBmYWlsZWQgdG8gcGFyc2UsIHNvIGxl
dCdzIGp1c3QgbWFrZSB0aGlzIGxpc3RlbmVyIGEgbm8tb3AKLSAgICAgICAgICAgIGxpc3RlbmVy
ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbE5vZGUpIHsKKyAgICAgICAgICAgIG1f
bGlzdGVuZXIgPSAwOworICAgICAgICB9IGVsc2UgaWYgKG1fb3JpZ2luYWxOb2RlKSB7CiAgICAg
ICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29wZQogICAg
ICAgICAgICAgLy8gKGFuZCB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgZm9ybSAtIHNlZSBKU0hUTUxF
bGVtZW50OjpldmVudEhhbmRsZXJTY29wZSkKICAgICAgICAgICAgIFNjb3BlQ2hhaW4gc2NvcGUg
PSBsaXN0ZW5lckFzRnVuY3Rpb24tPnNjb3BlKCk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUqIHRo
aXNPYmogPSB0b0pTKGV4ZWMsIG9yaWdpbmFsTm9kZSk7CisgICAgICAgICAgICBKU1ZhbHVlKiB0
aGlzT2JqID0gdG9KUyhleGVjLCBtX29yaWdpbmFsTm9kZSk7CiAgICAgICAgICAgICBpZiAodGhp
c09iai0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTRXZlbnRU
YXJnZXROb2RlKj4odGhpc09iaiktPnB1c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBzY29wZSk7
CiAgICAgICAgICAgICAgICAgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zZXRTY29wZShzY29wZSk7CkBA
IC0zNDMsMjAgKzMzMCwyMSBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgp
IGNvCiAKICAgICAvLyBubyBtb3JlIG5lZWQgdG8ga2VlcCB0aGUgdW5wYXJzZWQgY29kZSBhcm91
bmQKICAgICBtX2Z1bmN0aW9uTmFtZSA9IFN0cmluZygpOwotICAgIGNvZGUgPSBTdHJpbmcoKTsK
KyAgICBtX2NvZGUgPSBTdHJpbmcoKTsKIAotICAgIGlmIChsaXN0ZW5lcikgeworICAgIGlmICht
X2xpc3RlbmVyKSB7CiAgICAgICAgIFdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBp
c0hUTUxFdmVudExpc3RlbmVyKCkKICAgICAgICAgICAgID8gd2luZG93T2JqKCktPmpzSFRNTEV2
ZW50TGlzdGVuZXJzKCkgOiB3aW5kb3dPYmooKS0+anNFdmVudExpc3RlbmVycygpOwotICAgICAg
ICBsaXN0ZW5lcnMuc2V0KGxpc3RlbmVyLCBjb25zdF9jYXN0PEpTTGF6eUV2ZW50TGlzdGVuZXIq
Pih0aGlzKSk7CisgICAgICAgIGxpc3RlbmVycy5zZXQobV9saXN0ZW5lciwgY29uc3RfY2FzdDxK
U0xhenlFdmVudExpc3RlbmVyKj4odGhpcykpOwogICAgIH0KIH0KIAogSlNWYWx1ZSogZ2V0Tm9k
ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXROb2RlKiBuLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSkKIHsKLSAgICBpZiAoSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0g
c3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihuLT5nZXRIVE1MRXZlbnRMaXN0
ZW5lcihldmVudFR5cGUpKSkKKyAgICBpZiAoSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIqPihuLT5nZXRIVE1MRXZl
bnRMaXN0ZW5lcihldmVudFR5cGUpKSkgewogICAgICAgICBpZiAoSlNWYWx1ZSogb2JqID0gbGlz
dGVuZXItPmxpc3RlbmVyT2JqKCkpCiAgICAgICAgICAgICByZXR1cm4gb2JqOworICAgIH0KICAg
ICByZXR1cm4ganNOdWxsKCk7CiB9CiAKQEAgLTM2NiwxNSArMzU0LDE1IEBAIGNvbnN0IENsYXNz
SW5mbyBKU0NsaXBib2FyZDo6aW5mbyA9IHsgIkMKIAogLyogU291cmNlIGZvciBKU0NsaXBib2Fy
ZFRhYmxlLiBVc2UgIm1ha2UgaGFzaHRhYmxlcyIgdG8gcmVnZW5lcmF0ZS4KIEBiZWdpbiBKU0Ns
aXBib2FyZFRhYmxlIDMKLSAgZHJvcEVmZmVjdCAgICBKU0NsaXBib2FyZDo6RHJvcEVmZmVjdCAg
IERvbnREZWxldGUKLSAgZWZmZWN0QWxsb3dlZCBKU0NsaXBib2FyZDo6RWZmZWN0QWxsb3dlZCAg
ICAgICAgRG9udERlbGV0ZQotICB0eXBlcyAgICAgICAgIEpTQ2xpcGJvYXJkOjpUeXBlcyAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQorICBkcm9wRWZmZWN0ICAgIFdlYkNvcmU6OkpTQ2xpcGJv
YXJkOjpEcm9wRWZmZWN0ICAgRG9udERlbGV0ZQorICBlZmZlY3RBbGxvd2VkIFdlYkNvcmU6OkpT
Q2xpcGJvYXJkOjpFZmZlY3RBbGxvd2VkICAgICAgICBEb250RGVsZXRlCisgIHR5cGVzICAgICAg
ICAgV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OlR5cGVzICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5
CiBAZW5kCiBAYmVnaW4gSlNDbGlwYm9hcmRQcm90b3R5cGVUYWJsZSA0Ci0gIGNsZWFyRGF0YSAg
ICAgSlNDbGlwYm9hcmQ6OkNsZWFyRGF0YSAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLSAgZ2V0
RGF0YSAgICAgICBKU0NsaXBib2FyZDo6R2V0RGF0YSAgICAgIERvbnREZWxldGV8RnVuY3Rpb24g
MQotICBzZXREYXRhICAgICAgIEpTQ2xpcGJvYXJkOjpTZXREYXRhICAgICAgRG9udERlbGV0ZXxG
dW5jdGlvbiAyCi0gIHNldERyYWdJbWFnZSAgSlNDbGlwYm9hcmQ6OlNldERyYWdJbWFnZSBEb250
RGVsZXRlfEZ1bmN0aW9uIDMKKyAgY2xlYXJEYXRhICAgICBXZWJDb3JlOjpKU0NsaXBib2FyZDo6
Q2xlYXJEYXRhICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAorICBnZXREYXRhICAgICAgIFdlYkNv
cmU6OkpTQ2xpcGJvYXJkOjpHZXREYXRhICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisgIHNl
dERhdGEgICAgICAgV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OlNldERhdGEgICAgICBEb250RGVsZXRl
fEZ1bmN0aW9uIDIKKyAgc2V0RHJhZ0ltYWdlICBXZWJDb3JlOjpKU0NsaXBib2FyZDo6U2V0RHJh
Z0ltYWdlIERvbnREZWxldGV8RnVuY3Rpb24gMwogQGVuZAogKi8KIApAQCAtMzgyLDggKzM3MCw4
IEBAIEtKU19ERUZJTkVfUFJPVE9UWVBFKEpTQ2xpcGJvYXJkUHJvdG90eXAKIEtKU19JTVBMRU1F
TlRfUFJPVE9UWVBFX0ZVTkNUSU9OKEpTQ2xpcGJvYXJkUHJvdG90eXBlRnVuY3Rpb24pCiBLSlNf
SU1QTEVNRU5UX1BST1RPVFlQRSgiQ2xpcGJvYXJkIiwgSlNDbGlwYm9hcmRQcm90b3R5cGUsIEpT
Q2xpcGJvYXJkUHJvdG90eXBlRnVuY3Rpb24pCiAKLUpTQ2xpcGJvYXJkOjpKU0NsaXBib2FyZChF
eGVjU3RhdGUqIGV4ZWMsIFdlYkNvcmU6OkNsaXBib2FyZCogY2IpCi0gICAgOiBtX2ltcGwoY2Ip
CitKU0NsaXBib2FyZDo6SlNDbGlwYm9hcmQoRXhlY1N0YXRlKiBleGVjLCBDbGlwYm9hcmQqIGNs
aXBib2FyZCkKKyAgICA6IG1faW1wbChjbGlwYm9hcmQpCiB7CiAgICAgc2V0UHJvdG90eXBlKEpT
Q2xpcGJvYXJkUHJvdG90eXBlOjpzZWxmKGV4ZWMpKTsKIH0KQEAgLTQwMCw3ICszODgsNyBAQCBi
b29sIEpTQ2xpcGJvYXJkOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlCiAKIEpTVmFsdWUqIEpTQ2xp
cGJvYXJkOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAogewotICAgIFdlYkNvcmU6OkNsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOworICAgIENs
aXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAg
ICAgY2FzZSBEcm9wRWZmZWN0OgogICAgICAgICAgICAgQVNTRVJUKGNsaXBib2FyZC0+aXNGb3JE
cmFnZ2luZygpIHx8IGNsaXBib2FyZC0+ZHJvcEVmZmVjdCgpLmlzTnVsbCgpKTsKQEAgLTQzMyw3
ICs0MjEsNyBAQCB2b2lkIEpTQ2xpcGJvYXJkOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjCiAKIHZv
aWQgSlNDbGlwYm9hcmQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4sIEpTVmFsdWUqIHZhbHVlLCBpbnQgLyphdHRyKi8pCiB7Ci0gICAgV2ViQ29yZTo6Q2xpcGJv
YXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CisgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBs
KCk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICBjYXNlIERyb3BFZmZlY3Q6CiAgICAg
ICAgICAgICAvLyBjYW4gbmV2ZXIgc2V0IHRoaXMgd2hlbiBub3QgZm9yIGRyYWdnaW5nLCB0aHVz
IGdldHRpbmcgYWx3YXlzIHJldHVybnMgTlVMTCBzdHJpbmcKQEAgLTQ1Myw3ICs0NDEsNyBAQCBK
U1ZhbHVlKiBKU0NsaXBib2FyZFByb3RvdHlwZUZ1bmN0aW9uOjpjCiAgICAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmSlNDbGlwYm9hcmQ6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgV2ViQ29yZTo6Q2xpcGJvYXJkKiBjbGlwYm9hcmQg
PSBzdGF0aWNfY2FzdDxKU0NsaXBib2FyZCo+KHRoaXNPYmopLT5pbXBsKCk7CisgICAgQ2xpcGJv
YXJkKiBjbGlwYm9hcmQgPSBzdGF0aWNfY2FzdDxKU0NsaXBib2FyZCo+KHRoaXNPYmopLT5pbXBs
KCk7CiAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIEpTQ2xpcGJvYXJkOjpDbGVhckRh
dGE6CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCkgewpAQCAtNDk0LDMwICs0ODIs
MzAgQEAgSlNWYWx1ZSogSlNDbGlwYm9hcmRQcm90b3R5cGVGdW5jdGlvbjo6YwogICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IHRvTm9kZShhcmdzWzBdKTsKICAgICAgICAgICAgIGlmICghbm9kZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAic2V0RHJh
Z0ltYWdlRnJvbUVsZW1lbnQ6IEludmFsaWQgZmlyc3QgYXJndW1lbnQiKTsKIAotICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aGFzTG9jYWxOYW1lKGltZ1RhZykg
JiYgCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5oYXNMb2Nh
bE5hbWUoaW1nVGFnKSAmJgogICAgICAgICAgICAgICAgICFub2RlLT5pbkRvY3VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXREcmFnSW1hZ2Uoc3RhdGljX2Nhc3Q8SFRNTElt
YWdlRWxlbWVudCo+KG5vZGUpLT5jYWNoZWRJbWFnZSgpLCBJbnRQb2ludCh4LCB5KSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXREcmFnSW1hZ2VFbGVt
ZW50KG5vZGUsIEludFBvaW50KHgsIHkpKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0RHJhZ0ltYWdlRWxlbWVudChu
b2RlLCBJbnRQb2ludCh4LCB5KSk7CisKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgV2ViQ29yZTo6Q2xpcGJvYXJkKiBvYmopCitKU1Zh
bHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ2xpcGJvYXJkKiBvYmopCiB7Ci0gICAgcmV0dXJu
IGNhY2hlRE9NT2JqZWN0PFdlYkNvcmU6OkNsaXBib2FyZCwgSlNDbGlwYm9hcmQ+KGV4ZWMsIG9i
aik7CisgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENsaXBib2FyZCwgSlNDbGlwYm9hcmQ+KGV4
ZWMsIG9iaik7CiB9CiAKLVdlYkNvcmU6OkNsaXBib2FyZCogdG9DbGlwYm9hcmQoSlNWYWx1ZSog
dmFsKQorQ2xpcGJvYXJkKiB0b0NsaXBib2FyZChKU1ZhbHVlKiB2YWwpCiB7CiAgICAgcmV0dXJu
IHZhbC0+aXNPYmplY3QoJkpTQ2xpcGJvYXJkOjppbmZvKSA/IHN0YXRpY19jYXN0PEpTQ2xpcGJv
YXJkKj4odmFsKS0+aW1wbCgpIDogMDsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmgJKHJldmlzaW9uIDIzNzk1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDk5ICsyNiwx
MDEgQEAKICNpbmNsdWRlICJranNfZG9tLmgiCiAjaW5jbHVkZSAia2pzX2h0bWwuaCIKIAorCitu
YW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBXaW5kb3c7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKKwogICAgIGNsYXNzIENsaXBib2FyZDsKICAgICBjbGFzcyBFdmVudDsKLSAgICBjbGFzcyBL
ZXlib2FyZEV2ZW50OwotICAgIGNsYXNzIE1vdXNlRXZlbnQ7Ci0gICAgY2xhc3MgTXV0YXRpb25F
dmVudDsKLSAgICBjbGFzcyBVSUV2ZW50OwotfQotCi1uYW1lc3BhY2UgS0pTIHsKIAotICAgIGNs
YXNzIFdpbmRvdzsKLSAgICBjbGFzcyBKU0NsaXBib2FyZDsKLSAgICAKLSAgICBjbGFzcyBKU0Fi
c3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJDb3JlOjpFdmVudExpc3RlbmVyIHsKKyAg
ICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGJvb2wgSFRNTCA9
IGZhbHNlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OkV2ZW50
KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKKyAgICAgICAgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIo
Ym9vbCBodG1sID0gZmFsc2UpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChF
dmVudCosIGJvb2wgaXNXaW5kb3dFdmVudCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxF
dmVudExpc3RlbmVyKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGxpc3RlbmVy
T2JqKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFdpbmRvdyogd2luZG93T2JqKCkgY29u
c3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtKUzo6SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29u
c3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtKUzo6V2luZG93KiB3aW5kb3dPYmooKSBjb25zdCA9
IDA7CisKICAgICBwcml2YXRlOgotICAgICAgICBib29sIGh0bWw7CisgICAgICAgIGJvb2wgbV9o
dG1sOwogICAgIH07CiAKICAgICBjbGFzcyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciA6IHB1
YmxpYyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgotICAgICAgICBKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU09iamVjdCogbGlzdGVuZXIsIFdpbmRvdyosIGJvb2wg
SFRNTCA9IGZhbHNlKTsKKyAgICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoS0pTOjpK
U09iamVjdCogbGlzdGVuZXIsIEtKUzo6V2luZG93KiwgYm9vbCBodG1sID0gZmFsc2UpOwogICAg
ICAgICB2aXJ0dWFsIH5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcigpOwotICAgICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFdpbmRv
dyogd2luZG93T2JqKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTT2JqZWN0KiBs
aXN0ZW5lck9iaigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtKUzo6V2luZG93KiB3aW5kb3dP
YmooKSBjb25zdDsKICAgICAgICAgdm9pZCBjbGVhcldpbmRvd09iaigpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFyaygpOwogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTT2JqZWN0KiBsaXN0ZW5l
cjsKLSAgICAgICAgV2luZG93KiB3aW47CisgICAgICAgIEtKUzo6SlNPYmplY3QqIG1fbGlzdGVu
ZXI7CisgICAgICAgIEtKUzo6V2luZG93KiBtX3dpbjsKICAgICB9OwogCiAgICAgY2xhc3MgSlNF
dmVudExpc3RlbmVyIDogcHVibGljIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEpTRXZlbnRMaXN0ZW5lcihKU09iamVjdCogbGlzdGVuZXIsIFdpbmRvdyos
IGJvb2wgSFRNTCA9IGZhbHNlKTsKKyAgICAgICAgSlNFdmVudExpc3RlbmVyKEtKUzo6SlNPYmpl
Y3QqIGxpc3RlbmVyLCBLSlM6OldpbmRvdyosIGJvb2wgaHRtbCA9IGZhbHNlKTsKICAgICAgICAg
dmlydHVhbCB+SlNFdmVudExpc3RlbmVyKCk7Ci0gICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGxp
c3RlbmVyT2JqKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgV2luZG93KiB3aW5kb3dPYmooKSBj
b25zdDsKKworICAgICAgICB2aXJ0dWFsIEtKUzo6SlNPYmplY3QqIGxpc3RlbmVyT2JqKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgS0pTOjpXaW5kb3cqIHdpbmRvd09iaigpIGNvbnN0OwogICAg
ICAgICB2b2lkIGNsZWFyV2luZG93T2JqKCk7CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIG11
dGFibGUgUHJvdGVjdGVkUHRyPEpTT2JqZWN0PiBsaXN0ZW5lcjsKKyAgICAgICAgbXV0YWJsZSBL
SlM6OlByb3RlY3RlZFB0cjxLSlM6OkpTT2JqZWN0PiBtX2xpc3RlbmVyOworCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgUHJvdGVjdGVkUHRyPFdpbmRvdz4gd2luOworICAgICAgICBLSlM6OlByb3Rl
Y3RlZFB0cjxLSlM6OldpbmRvdz4gbV93aW47CiAgICAgfTsKIAogICAgIGNsYXNzIEpTTGF6eUV2
ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgY29kZSwgV2luZG93KiwgV2ViQ29yZTo6Tm9kZSos
IGludCBsaW5lbm8gPSAwKTsKLSAgICAgICAgdmlydHVhbCBKU09iamVjdCogbGlzdGVuZXJPYmoo
KSBjb25zdDsKKyAgICAgICAgSlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBLSlM6OldpbmRvdyosIE5vZGUqLCBpbnQgbGlu
ZU51bWJlciA9IDApOworICAgICAgICB2aXJ0dWFsIEtKUzo6SlNPYmplY3QqIGxpc3RlbmVyT2Jq
KCkgY29uc3Q7CisKICAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2ZW50
UGFyYW1ldGVyTmFtZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogZXZl
bnRQYXJhbWV0ZXJOYW1lKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgcGFyc2VDb2RlKCkgY29uc3Q7
CiAKLSAgICAgICAgbXV0YWJsZSBXZWJDb3JlOjpTdHJpbmcgbV9mdW5jdGlvbk5hbWU7Ci0gICAg
ICAgIG11dGFibGUgV2ViQ29yZTo6U3RyaW5nIGNvZGU7Ci0gICAgICAgIG11dGFibGUgYm9vbCBw
YXJzZWQ7Ci0gICAgICAgIGludCBsaW5lTnVtYmVyOwotICAgICAgICBXZWJDb3JlOjpOb2RlKiBv
cmlnaW5hbE5vZGU7CisgICAgICAgIG11dGFibGUgU3RyaW5nIG1fZnVuY3Rpb25OYW1lOworICAg
ICAgICBtdXRhYmxlIFN0cmluZyBtX2NvZGU7CisgICAgICAgIG11dGFibGUgYm9vbCBtX3BhcnNl
ZDsKKyAgICAgICAgaW50IG1fbGluZU51bWJlcjsKKyAgICAgICAgTm9kZSogbV9vcmlnaW5hbE5v
ZGU7CiAgICAgfTsKIAotICAgIEpTVmFsdWUqIGdldE5vZGVFdmVudExpc3RlbmVyKFdlYkNvcmU6
Ok5vZGUqIG4sIGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICBL
SlM6OkpTVmFsdWUqIGdldE5vZGVFdmVudExpc3RlbmVyKE5vZGUqLCBjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSk7CiAKLSAgICBjbGFzcyBKU0NsaXBib2FyZCA6IHB1YmxpYyBET01PYmpl
Y3QgewotICAgICAgICBmcmllbmQgY2xhc3MgSlNDbGlwYm9hcmRQcm90b3R5cGVGdW5jdGlvbjsK
KyAgICBjbGFzcyBKU0NsaXBib2FyZCA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CiAgICAgcHVi
bGljOgotICAgICAgICBKU0NsaXBib2FyZChFeGVjU3RhdGUqLCBXZWJDb3JlOjpDbGlwYm9hcmQq
IGRzKTsKKyAgICAgICAgSlNDbGlwYm9hcmQoS0pTOjpFeGVjU3RhdGUqLCBDbGlwYm9hcmQqKTsK
ICAgICAgICAgdmlydHVhbCB+SlNDbGlwYm9hcmQoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgaW50IGF0dHIgPSBOb25lKTsKLSAgICAgICAgdm9p
ZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbiwgSlNWYWx1ZSosIGludCBh
dHRyKTsKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNT
dGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIEtKUzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0
b2tlbikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUqLCBj
b25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OkpTVmFsdWUqLCBpbnQgYXR0ciA9IEtKUzo6Tm9u
ZSk7CisgICAgICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0
b2tlbiwgS0pTOjpKU1ZhbHVlKiwgaW50IGF0dHIpOwogCi0gICAgICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pTOjpD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICAgIHN0
YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBpbmZvOwogCiAgICAgICAgIGVudW0geyBDbGVhckRh
dGEsIEdldERhdGEsIFNldERhdGEsIFR5cGVzLCBTZXREcmFnSW1hZ2UsIERyb3BFZmZlY3QsIEVm
ZmVjdEFsbG93ZWQgfTsKIAotICAgICAgICBXZWJDb3JlOjpDbGlwYm9hcmQqIGltcGwoKSBjb25z
dCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKyAgICAgICAgQ2xpcGJvYXJkKiBpbXBsKCkgY29u
c3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8V2ViQ29yZTo6Q2xpcGJvYXJkPiBtX2ltcGw7CisgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+
IG1faW1wbDsKICAgICB9OwogCi0gICAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3Jl
OjpDbGlwYm9hcmQqKTsKLSAgICBXZWJDb3JlOjpDbGlwYm9hcmQqIHRvQ2xpcGJvYXJkKEpTVmFs
dWUqKTsKKyAgICBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqLCBDbGlwYm9hcmQq
KTsKKyAgICBDbGlwYm9hcmQqIHRvQ2xpcGJvYXJkKEtKUzo6SlNWYWx1ZSopOwogCi19IC8vIG5h
bWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBranNf
ZXZlbnRzX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCShyZXZpc2lvbiAyMzc5NCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNCArMzEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZyYW1lOwogICAg
IGNsYXNzIEZyYW1lVmlldzsKICAgICBjbGFzcyBKU0RPTVdpbmRvdzsKKyAgICBjbGFzcyBKU0V2
ZW50TGlzdGVuZXI7CisgICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI7CiAgICAg
Y2xhc3MgTm9kZTsKIH0KIAogbmFtZXNwYWNlIEtKUyB7CiAKLSAgICBjbGFzcyBKU0V2ZW50TGlz
dGVuZXI7Ci0gICAgY2xhc3MgSlNMYXp5RXZlbnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBMb2NhdGlvbjsKICAgICBjbGFzcyBQYXVz
ZWRUaW1lb3V0OwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKQEAgLTExOSwxNiArMTE4LDE2
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGJvb2wgZmluZChjb25zdCBXZWJDb3JlOjpTdHJpbmcm
LCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29sKSBjb25zdDsKIAogICAgIC8vIEZp
bmRzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIsIHJldHVybnMgMCBpZiBubyBleGlz
dGluZyBvbmUuCi0gICAgSlNFdmVudExpc3RlbmVyKiBmaW5kSlNFdmVudExpc3RlbmVyKEpTVmFs
dWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CisgICAgV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyKiBm
aW5kSlNFdmVudExpc3RlbmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CiAKICAgICAv
LyBGaW5kcyBvciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2
ZW50TGlzdGVuZXIgb2JqZWN0IGlzIEdDLXByb3RlY3RlZC4KLSAgICBKU0V2ZW50TGlzdGVuZXIg
KmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiwgYm9vbCBodG1sID0gZmFsc2Up
OworICAgIFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lciAqZmluZE9yQ3JlYXRlSlNFdmVudExpc3Rl
bmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CiAKICAgICAvLyBGaW5kcyBhIHdyYXBw
ZXIgb2YgYSBHQy11bnByb3RlY3RlZCBKUyBFdmVudExpc3RlbmVyLCByZXR1cm5zIDAgaWYgbm8g
ZXhpc3Rpbmcgb25lLgotICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBmaW5kSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKKyAgICBX
ZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogZmluZEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBmYWxzZSk7CiAKICAgICAvLyBGaW5kcyBv
ciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2ZW50TGlzdGVu
ZXIgb2JqZWN0IGlzICpOT1QqIEdDLXByb3RlY3RlZC4KLSAgICBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciAqZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNWYWx1ZSos
IGJvb2wgaHRtbCA9IGZhbHNlKTsKKyAgICBXZWJDb3JlOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciAqZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNWYWx1ZSosIGJv
b2wgaHRtbCA9IGZhbHNlKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAtMTM4LDggKzEzNyw4
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIC8vIFNldCBhIHBsYWNlIHRvIHB1dCBhIGRpYWxvZyBy
ZXR1cm4gdmFsdWUgd2hlbiB0aGUgd2luZG93IGlzIGNsZWFyZWQuCiAgICAgdm9pZCBzZXRSZXR1
cm5WYWx1ZVNsb3QoSlNWYWx1ZSAqKnNsb3QpOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPEpTT2Jq
ZWN0KiwgSlNFdmVudExpc3RlbmVyKj4gTGlzdGVuZXJzTWFwOwotICAgIHR5cGVkZWYgSGFzaE1h
cDxKU09iamVjdCosIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4gVW5wcm90ZWN0ZWRMaXN0
ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgV2ViQ29yZTo6SlNFdmVu
dExpc3RlbmVyKj4gTGlzdGVuZXJzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxKU09iamVjdCos
IFdlYkNvcmU6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4gVW5wcm90ZWN0ZWRMaXN0ZW5l
cnNNYXA7CiAgICAgCiAgICAgTGlzdGVuZXJzTWFwJiBqc0V2ZW50TGlzdGVuZXJzKCk7CiAgICAg
TGlzdGVuZXJzTWFwJiBqc0hUTUxFdmVudExpc3RlbmVycygpOwpJbmRleDogV2ViQ29yZS9rc3Zn
Mi9ldmVudHMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvZXZlbnRzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjM3OTQpCisr
KyBXZWJDb3JlL2tzdmcyL2V2ZW50cy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgSlNTVkdMYXp5RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBLSlM6OkpTTGF6eUV2ZW50TGlzdGVu
ZXIgeworICAgIGNsYXNzIEpTU1ZHTGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNMYXp5RXZl
bnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgogICAgICAgICBKU1NWR0xhenlFdmVudExpc3RlbmVy
KGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIEtKUzo6V2lu
ZG93KiwgTm9kZSosIGludCBsaW5lbm8gPSAwKTsKICAgICBwcml2YXRlOgo=
</data>
<flag name="review"
          id="6311"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>