<?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>156182</bug_id>
          
          <creation_ts>2016-04-04 15:09:28 -0700</creation_ts>
          <short_desc>PolymorphicAccess should have a MegamorphicLoad case</short_desc>
          <delta_ts>2016-04-05 12:58:25 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1180520</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-04 15:09:28 -0700</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180522</commentid>
    <comment_count>1</comment_count>
      <attachid>275580</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-04 15:11:38 -0700</bug_when>
    <thetext>Created attachment 275580
patch that does not work

It generates code for MegamorphicAccess but that code then crashes.

OTOH the other changes in this patch pass tests and are perf-neutral (like changing repatch heuristics and hashing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180576</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-04 16:46:09 -0700</bug_when>
    <thetext>It now works for a simple test:

                          TipOfTree                   Things                                      

megamorphic-load       29.3178+-2.9974     ^     16.4813+-1.2412        ^ definitely 1.7789x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180659</commentid>
    <comment_count>3</comment_count>
      <attachid>275628</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-04 20:35:19 -0700</bug_when>
    <thetext>Created attachment 275628
the patch

Not yet ready for review since I am not yet done benchmarking it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180682</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-04 21:11:32 -0700</bug_when>
    <thetext>Attachment 275628 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:154:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180871</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-05 10:57:57 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Attachment 275628 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:154:  The parameter name
&gt; &quot;object&quot; adds no information, so it should be removed. 

False.

&gt; [readability/parameter_name] [5]
&gt; Total errors found: 1 in 20 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180874</commentid>
    <comment_count>6</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-04-05 10:59:41 -0700</bug_when>
    <thetext>Looks like some of the builds are unhappy with your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180875</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-05 11:00:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Looks like some of the builds are unhappy with your patch.

Yeah, I haven&apos;t compiled/tested 32-bit yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180881</commentid>
    <comment_count>8</comment_count>
      <attachid>275676</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-05 11:07:33 -0700</bug_when>
    <thetext>Created attachment 275676
the patch

Fixes 32-bit-only link error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180883</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-05 11:09:54 -0700</bug_when>
    <thetext>Attachment 275676 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:154:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180922</commentid>
    <comment_count>10</comment_count>
      <attachid>275676</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-05 12:48:50 -0700</bug_when>
    <thetext>Comment on attachment 275676
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:22
&gt; +        pathology only makes sense if it also preserves the good performance of the fast case, or reduces the
&gt; +        likelihood of the worst-case by so much that it&apos;s a win for the average case even with a slow-down in
&gt; +        the fast case.

Interesting. I was just looking at the same problem for bmalloc.

I think doubleHash() was originally partially a defense against the combination of: (a) hash functions that weren&apos;t very good at mixing the low bits, and (b) hash tables where the key was expensive to compare, like a WTF::String. But maybe those problems are in the past.

Maybe we should make the same change in WTF::HashTable, which also doubleHashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180924</commentid>
    <comment_count>11</comment_count>
      <attachid>275676</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-04-05 12:52:32 -0700</bug_when>
    <thetext>Comment on attachment 275676
the patch

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

r=me too.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:531
&gt; +        UNUSED_PARAM(loop);

Seems unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180926</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-05 12:53:13 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 275676 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275676&amp;action=review
&gt; 
&gt; r=me too.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:531
&gt; &gt; +        UNUSED_PARAM(loop);
&gt; 
&gt; Seems unnecessary.

Ooops I will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180930</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-05 12:58:25 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/199069</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275580</attachid>
            <date>2016-04-04 15:11:38 -0700</date>
            <delta_ts>2016-04-04 20:35:19 -0700</delta_ts>
            <desc>patch that does not work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36652</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2
ICs0NiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogCit2b2lkIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBpZiAobV9jb2RlKQor
ICAgICAgICBvdXQucHJpbnQoIjoiLCBtX2NvZGUpOworfQorCiBXYXRjaHBvaW50KiBBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGU6OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGNvbmRpdGlvbikKIHsKICAgICByZXR1cm4gV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KApAQCAtMTc1LDYgKzE4MiwxOCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAorc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6Om1lZ2Ft
b3JwaGljTG9hZChWTSYgdm0sIEpTQ2VsbCogb3duZXIpCit7CisgICAgVU5VU0VEX1BBUkFNKHZt
KTsKKyAgICBVTlVTRURfUEFSQU0ob3duZXIpOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CisgICAgCisgICAgcmVzdWx0LT5t
X3R5cGUgPSBNZWdhbW9ycGhpY0xvYWQ7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2UoCiAgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewpAQCAtMzIyLDYgKzM0MSw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2sKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKICAgICBjYXNlIEFycmF5TGVuZ3RoOgog
ICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDIsOSAr
MzYyLDIxIEBAIGJvb2wgQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBjb24KICAgICBy
ZXR1cm4gbV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKIH0KIAotYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNl
KGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKQorYm9vbCBBY2Nlc3NDYXNlOjpjYW5CZVJlcGxhY2Vk
QnlNZWdhbW9ycGhpY0xvYWQoKSBjb25zdAoreworICAgIHJldHVybiB0eXBlKCkgPT0gTG9hZAor
ICAgICAgICAmJiAhdmlhUHJveHkoKQorICAgICAgICAmJiBjb25kaXRpb25TZXQoKS5pc0VtcHR5
KCkKKyAgICAgICAgJiYgIWFkZGl0aW9uYWxTZXQoKQorICAgICAgICAmJiAhY3VzdG9tU2xvdEJh
c2UoKTsKK30KKworYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2Um
IG90aGVyKSBjb25zdAogewogICAgIC8vIFdlIGNvdWxkIGRvIGEgbG90IGJldHRlciBoZXJlLCBi
dXQgZm9yIG5vdyB3ZSBqdXN0IGRvIHNvbWV0aGluZyBvYnZpb3VzLgorICAgIAorICAgIGlmICh0
eXBlKCkgPT0gTWVnYW1vcnBoaWNMb2FkICYmIG90aGVyLmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3Jw
aGljTG9hZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghZ3VhcmRlZEJ5U3Ry
dWN0dXJlQ2hlY2soKSB8fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkgewogICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMhCkBAIC00MDcsMTcgKzQzOSwyNSBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQogewogICAgIEND
YWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSAqc3RhdGUuaWRlbnQ7CisgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHZh
bHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJh
c2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOworICAgIAor
ICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
QXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0
LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgc3RhdGUuc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkOChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAg
ICBqaXQuYnJhbmNoVGVzdDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywg
c3RhdGUuc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CiAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVu
ZCgKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpaZXJvLCBzdGF0ZS5zY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olpl
cm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQyNiwzMyArNDY2LDE0MyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBmYWxsVGhyb3VnaC5h
cHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoU3Ry
aW5nVHlwZSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIE1l
Z2Ftb3JwaGljTG9hZDogeworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5ID0gaWRlbnQu
aW1wbCgpOworICAgICAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpZmllclJlcEhhc2g6Omhhc2go
a2V5KTsKKyAgICAgICAgCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5sb2Nr
KGJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQUikpOworI2VuZGlm
CisgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgICAgIGFsbG9jYXRvci5s
b2NrKHNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGludGVybWVkaWF0ZUdQ
UiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgIEdQUlJlZyBtYXNrR1BSID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgbWFza2VkSGFzaEdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAKKyAgICAgICAg
ZGF0YUxvZygiYmFzZUdQUiA9ICIsIGJhc2VHUFIsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJ2
YWx1ZVJlZ3MgPSAiLCB2YWx1ZVJlZ3MsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJzY3JhdGNo
R1BSID0gIiwgc2NyYXRjaEdQUiwgIlxuIik7CisgICAgICAgIGRhdGFMb2coImludGVybWVkaWF0
ZUdQUiA9ICIsIGludGVybWVkaWF0ZUdQUiwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIm1hc2tH
UFIgPSAiLCBtYXNrR1BSLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygibWFza2VkSGFzaEdQUiA9
ICIsIG1hc2tlZEhhc2hHUFIsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJpbmRleEdQUiA9ICIs
IGluZGV4R1BSLCAiXG4iKTsKKworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlBy
ZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IG15RmFpbEFuZElnbm9yZTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBteUZhbGxUaHJvdWdoOworICAgICAgICAKKyAgICAgICAgaml0LmVtaXRMb2FkU3RydWN0
dXJlKGJhc2VHUFIsIGludGVybWVkaWF0ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5s
b2FkUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGludGVybWVkaWF0ZUdQ
UiwgU3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlVW5zYWZlT2Zmc2V0KCkpLAorICAgICAgICAgICAg
aW50ZXJtZWRpYXRlR1BSKTsKKyAgICAgICAgCisgICAgICAgIG15RmFpbEFuZElnbm9yZS5hcHBl
bmQoaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBpbnRlcm1lZGlhdGVHUFIp
KTsKKyAgICAgICAgCisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGlu
dGVybWVkaWF0ZUdQUiwgUHJvcGVydHlUYWJsZTo6b2Zmc2V0T2ZJbmRleE1hc2soKSksIG1hc2tH
UFIpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoaW50ZXJtZWRp
YXRlR1BSLCBQcm9wZXJ0eVRhYmxlOjpvZmZzZXRPZkluZGV4KCkpLCBpbmRleEdQUik7CisgICAg
ICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoaW50ZXJt
ZWRpYXRlR1BSLCBQcm9wZXJ0eVRhYmxlOjpvZmZzZXRPZkluZGV4U2l6ZSgpKSwKKyAgICAgICAg
ICAgIGludGVybWVkaWF0ZUdQUik7CisKKyAgICAgICAgaml0Lm1vdmUobWFza0dQUiwgbWFza2Vk
SGFzaEdQUik7CisgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMiho
YXNoKSwgbWFza2VkSGFzaEdQUik7CisgICAgICAgIGppdC5sc2hpZnQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigyKSwgaW50ZXJtZWRpYXRlR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihp
bmRleEdQUiwgaW50ZXJtZWRpYXRlR1BSKTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBVTlVTRURfUEFSQU0obG9vcCk7
CisgICAgICAgIAorICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QmFzZUluZGV4KGlu
ZGV4R1BSLCBtYXNrZWRIYXNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91ciksIHNjcmF0Y2hH
UFIpOworICAgICAgICAKKyAgICAgICAgbXlGYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAg
ICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpFcXVhbCwKKyAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRleCkpKTsKKyAgICAgICAg
CisgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGppdC5tdWwzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXpl
b2YoUHJvcGVydHlNYXBFbnRyeSkpLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aml0LmFkZFB0cihpbnRlcm1lZGlhdGVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbGxpc2lvbiA9ICBqaXQuYnJhbmNoUHRyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlNYXBFbnRyeSwga2V5
KSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoa2V5KSk7CisgICAg
ICAgIAorICAgICAgICAvLyBzY3JhdGNoR1BSIGN1cnJlbnRseSBob2xkcyBhIHBvaW50ZXIgdG8g
dGhlIFByb3BlcnR5TWFwRW50cnksIHdoaWNoIGhhcyB0aGUgb2Zmc2V0IGFuZCBhdHRyaWJ1dGVz
LgorICAgICAgICAvLyBDaGVjayB0aGVtIGFuZCB0aGVuIGF0dGVtcHQgdGhlIGxvYWQuCisgICAg
ICAgIAorICAgICAgICBteUZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFu
Y2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoUHJvcGVydHlNYXBFbnRyeSwgYXR0cmlidXRlcykpLAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEFjY2Vzc29yIHwgQ3VzdG9tQWNjZXNzb3IpKSk7CisgICAg
ICAgIAorICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlNYXBFbnRyeSwgb2Zmc2V0KSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAKKyAgICAgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlR1BSLCBzY3JhdGNoR1BS
LCB2YWx1ZVJlZ3MpOworICAgICAgICAKKyAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN1
Y2NlZWQoKTsKKyAgICAgICAgCisgICAgICAgIGNvbGxpc2lvbi5saW5rKCZqaXQpOworCisgICAg
ICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgbWFza2VkSGFzaEdQ
Uik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYmUgc21hcnRlciBhYm91
dCB0aGlzLiBDdXJyZW50bHkgd2UncmUgYnVybmluZyBhIEdQUiBmb3IgdGhlIG1hc2suIEJ1dCBs
b29waW5nCisgICAgICAgIC8vIGFyb3VuZCBpc24ndCBzdXBlciBjb21tb24gc28gd2UgY291bGQs
IGZvciBleGFtcGxlLCByZWNvbXB1dGUgdGhlIG1hc2sgZnJvbSB0aGUgZGlmZmVyZW5jZSBiZXR3
ZWVuCisgICAgICAgIC8vIHRoZSB0YWJsZSBhbmQgaW5kZXguIEJ1dCBiZWZvcmUgd2UgZG8gdGhh
dCB3ZSBzaG91bGQgcHJvYmFibHkgbWFrZSBpdCBlYXNpZXIgdG8gbXVsdGlwbHkgYW5kCisgICAg
ICAgIC8vIGRpdmlkZSBieSB0aGUgc2l6ZSBvZiBQcm9wZXJ0eU1hcEVudHJ5LiBUaGF0IHByb2Jh
Ymx5IGludm9sdmVzIG1ha2luZyBQcm9wZXJ0eU1hcEVudHJ5IGJlIGFycmFuZ2VkCisgICAgICAg
IC8vIHRvIGhhdmUgYSBwb3dlci1vZi0yIHNpemUuCisgICAgICAgIGppdC5hbmQzMihtYXNrR1BS
LCBtYXNrZWRIYXNoR1BSKTsKKyAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7
CisgICAgICAgIAorICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsK
KyAgICAgICAgICAgIG15RmFpbEFuZElnbm9yZS5saW5rKCZqaXQpOworICAgICAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0
ZSk7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbXlGYWxsVGhyb3VnaC5saW5rKCZqaXQpOworICAg
ICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBw
cmVzZXJ2ZWRTdGF0ZSk7CisgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFw
cGVuZChteUZhaWxBbmRJZ25vcmUpOworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKG15
RmFsbFRocm91Z2gpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBk
ZWZhdWx0OiB7CiAgICAgICAgIGlmICh2aWFQcm94eSgpKSB7CiAgICAgICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgaml0LmJyYW5jaDgoCiAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKIAotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0YXRlLmJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5zY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwogCiAgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICAgICAg
aml0LmJyYW5jaFN0cnVjdHVyZSgKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRl
LnNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAogICAgICAgICAgICAg
ICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dGF0ZS5iYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKQEAgLTEwOTEsNyArMTI0MSwxNCBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAKICAgICAgICAgZW1pdEludHJpbnNpY0dldHRlcihz
dGF0ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9IH0KKyAgICB9CisgICAgCisgICAgY2FzZSBN
ZWdhbW9ycGhpY0xvYWQ6CisgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBn
ZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUgbWVnYW1v
cnBoaWMgbG9hZAorICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBzdXJlIHRoYXQgbm9i
b2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciBNZWdhbW9ycGhpY0xvYWQgc2lu
Y2UKKyAgICAgICAgLy8gTWVnYW1vcnBoaWNMb2FkIGlzIG5vdCBndWFyZGVkIGJ5IGEgc3RydWN0
dXJlIGNoZWNrLgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
ICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpAQCAtMTA5OSw3ICsx
MjU2LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogUG9seW1v
cnBoaWNBY2Nlc3M6OlBvbHltb3JwaGljQWNjZXNzKCkgeyB9CiBQb2x5bW9ycGhpY0FjY2Vzczo6
flBvbHltb3JwaGljQWNjZXNzKCkgeyB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9y
cGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcygKK0FjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMoCiAgICAgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBv
cmlnaW5hbENhc2VzVG9BZGQpCiB7CkBAIC0xMTE0LDggKzEyNzEsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6CiAgICAgLy8gICBhbmQgdGhlIHByZXZpb3VzIHN0
dWIgYXJlIGtlcHQgaW50YWN0IGFuZCB0aGUgbmV3IGNhc2VzIGFyZSBkZXN0cm95ZWQuIEl0J3Mg
T0sgdG8gYXR0ZW1wdCB0bwogICAgIC8vICAgYWRkIG1vcmUgdGhpbmdzIGFmdGVyIGZhaWx1cmUu
CiAgICAgCi0gICAgLy8gRmlyc3QsIHZlcmlmeSB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBjb2RlIGZv
ciBhbGwgb2YgdGhlIG5ldyBjYXNlcyB3aGlsZSBlbGltaW5hdGluZyBhbnkgb2YgdGhlCi0gICAg
Ly8gbmV3IGNhc2VzIHRoYXQgcmVwbGFjZSBlYWNoIG90aGVyLgorICAgIC8vIEZpcnN0IGVuc3Vy
ZSB0aGF0IHRoZSBvcmlnaW5hbENhc2VzVG9BZGQgZG9lc24ndCBjb250YWluIGR1cGxpY2F0ZXMu
CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPj4gY2FzZXNUb0FkZDsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luYWxDYXNlc1RvQWRkLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBteUNhc2UgPSBXVEZNb3Zl
KG9yaWdpbmFsQ2FzZXNUb0FkZFtpXSk7CkBAIC0xMTQyLDcgKzEyOTgsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6CiAgICAgLy8gbmV3IHN0dWIgdGhhdCB3aWxs
IGJlIGlkZW50aWNhbCB0byB0aGUgb2xkIG9uZS4gUmV0dXJuaW5nIG51bGwgc2hvdWxkIHRlbGwg
dGhlIGNhbGxlciB0byBqdXN0CiAgICAgLy8ga2VlcCBkb2luZyB3aGF0IHRoZXkgd2VyZSBkb2lu
ZyBiZWZvcmUuCiAgICAgaWYgKGNhc2VzVG9BZGQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0OjpNYWRlTm9DaGFuZ2VzOwogCiAgICAgLy8gTm93IGNvbnN0cnVjdCB0aGUgbGlzdCBv
ZiBjYXNlcyBhcyB0aGV5IHNob3VsZCBhcHBlYXIgaWYgd2UgYXJlIHN1Y2Nlc3NmdWwuIFRoaXMg
bWVhbnMgcHV0dGluZwogICAgIC8vIGFsbCBvZiB0aGUgcHJldmlvdXMgY2FzZXMgaW4gdGhpcyBs
aXN0IGluIG9yZGVyIGJ1dCBleGNsdWRpbmcgdGhvc2UgdGhhdCBjYW4gYmUgcmVwbGFjZWQsIGFu
ZApAQCAtMTE3MSwyMiArMTMyNyw0MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgUG9seW1vcnBo
aWNBY2Nlc3M6CiAKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygibmV3Q2FzZXM6
ICIsIGxpc3REdW1wKG5ld0Nhc2VzKSwgIlxuIik7CisgICAgCisgICAgLy8gU2VlIGlmIHdlIGFy
ZSBjbG9zZSB0byBoYXZpbmcgdG9vIG1hbnkgY2FzZXMgYW5kIGlmIHNvbWUgb2YgdGhvc2UgY2Fz
ZXMgY2FuIGJlIHN1YnN1bWVkIGJ5IGEKKyAgICAvLyBtZWdhbW9ycGhpYyBsb2FkLgorICAgIGlm
IChuZXdDYXNlcy5zaXplKCkgPj0gT3B0aW9uczo6bWF4QWNjZXNzVmFyaWFudExpc3RTaXplKCkp
IHsKKyAgICAgICAgdW5zaWduZWQgbnVtU2VsZkxvYWRzID0gMDsKKyAgICAgICAgZm9yIChhdXRv
JiBuZXdDYXNlIDogbmV3Q2FzZXMpIHsKKyAgICAgICAgICAgIGlmIChuZXdDYXNlLT5jYW5CZVJl
cGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKSkKKyAgICAgICAgICAgICAgICBudW1TZWxmTG9hZHMr
KzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG51bVNlbGZMb2FkcyA+PSBPcHRp
b25zOjptZWdhbW9ycGhpY0xvYWRDb3N0KCkpIHsKKyAgICAgICAgICAgIG5ld0Nhc2VzLnJlbW92
ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+JiBuZXdDYXNlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5l
d0Nhc2UtPmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBuZXdDYXNlcy5hcHBlbmQoQWNjZXNzQ2Fz
ZTo6bWVnYW1vcnBoaWNMb2FkKHZtLCBjb2RlQmxvY2spKTsKKyAgICAgICAgfQorICAgIH0KIAog
ICAgIGlmIChuZXdDYXNlcy5zaXplKCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNp
emUoKSkgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIlRvbyBt
YW55IGNhc2VzLlxuIik7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsK
KyAgICAgICAgcmV0dXJuIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdhdmVVcDsKICAgICB9CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwgY29kZUJs
b2NrLCBzdHViSW5mbywgaWRlbnQsIG5ld0Nhc2VzKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICByZXR1cm4gQWNjZXNz
R2VuZXJhdGlvblJlc3VsdDo6R2F2ZVVwOwogCiAgICAgbV9saXN0ID0gV1RGTW92ZShuZXdDYXNl
cyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHlt
b3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2UoCitBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2UoCiAgICAgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3QWNjZXNz
KQogewpAQCAtMTQwMywxMiArMTU3OCwzMiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQ6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICBjYXNlIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6Ok1hZGVOb0NoYW5nZXM6CisgICAgICAgIG91
dC5wcmludCgiTWFkZU5vQ2hhbmdlcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0OjpHYXZlVXA6CisgICAgICAgIG91dC5wcmludCgiR2F2ZVVwIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdlbmVy
YXRlZE5ld0NvZGU6CisgICAgICAgIG91dC5wcmludCgiR2VuZXJhdGVkTmV3Q29kZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNl
OjpBY2Nlc3NUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpMb2FkOgogICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKICAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWVnYW1vcnBoaWNMb2FkOgorICAgICAgICBvdXQucHJp
bnQoIk1lZ2Ftb3JwaGljTG9hZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpUcmFuc2l0aW9uOgogICAgICAgICBvdXQucHJpbnQoIlRyYW5zaXRpb24iKTsKICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUzLDYgKzUzLDcgQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiBwdWJsaWM6CiAgICAgZW51bSBBY2Nl
c3NUeXBlIHsKICAgICAgICAgTG9hZCwKKyAgICAgICAgTWVnYW1vcnBoaWNMb2FkLAogICAgICAg
ICBUcmFuc2l0aW9uLAogICAgICAgICBSZXBsYWNlLAogICAgICAgICBNaXNzLApAQCAtODEsNiAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSW5NaXNzOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWVnYW1vcnBoaWNMb2Fk
OgogICAgICAgICBjYXNlIE1pc3M6CiAgICAgICAgIGNhc2UgR2V0dGVyOgogICAgICAgICBjYXNl
IEN1c3RvbVZhbHVlR2V0dGVyOgpAQCAtOTYsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1l
Z2Ftb3JwaGljTG9hZDoKICAgICAgICAgY2FzZSBNaXNzOgogICAgICAgICBjYXNlIEdldHRlcjoK
ICAgICAgICAgY2FzZSBDdXN0b21WYWx1ZUdldHRlcjoKQEAgLTExOSw2ICsxMjIsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBMb2FkOgor
ICAgICAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKICAgICAgICAgY2FzZSBNaXNzOgogICAgICAg
ICBjYXNlIEdldHRlcjoKICAgICAgICAgY2FzZSBDdXN0b21WYWx1ZUdldHRlcjoKQEAgLTE0NSw3
ICsxNDksOSBAQCBwdWJsaWM6CiAgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQg
PSBudWxscHRyLAogICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIs
CiAgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOwotCisgICAgCisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBtZWdhbW9ycGhpY0xvYWQoVk0m
LCBKU0NlbGwqIG93bmVyKTsKKyAgICAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IHJlcGxhY2UoVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9m
ZnNldCk7CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyYW5zaXRp
b24oCkBAIC0yNDcsMTMgKzI1MywxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJcyBpdCBzdGlsbCBw
b3NzaWJsZSBmb3IgdGhpcyBjYXNlIHRvIGV2ZXIgYmUgdGFrZW4/CiAgICAgYm9vbCBjb3VsZFN0
aWxsU3VjY2VlZCgpIGNvbnN0OwotCisgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJp
bnNpY0dldHRlcihKU0Z1bmN0aW9uKiwgU3RydWN0dXJlKik7CiAKKyAgICBib29sIGNhbkJlUmVw
bGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpIGNvbnN0OworCiAgICAgLy8gSWYgdGhpcyBtZXRob2Qg
cmV0dXJucyB0cnVlLCB0aGVuIGl0J3MgYSBnb29kIGlkZWEgdG8gcmVtb3ZlICdvdGhlcicgZnJv
bSB0aGUgYWNjZXNzIG9uY2UgJ3RoaXMnCiAgICAgLy8gaXMgYWRkZWQuIFRoaXMgbWV0aG9kIGFz
c3VtZXMgdGhhdCBpbiBjYXNlIG9mIGNvbnRyYWRpY3Rpb25zLCAndGhpcycgcmVwcmVzZW50cyBh
IG5ld2VyLCBhbmQgc28KICAgICAvLyBtb3JlIHVzZWZ1bCwgdHJ1dGguIFRoaXMgbWV0aG9kIGNh
biBiZSBjb25zZXJ2YXRpdmU7IGl0IHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gaXQgZG91YnQuCi0g
ICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKTsKKyAgICBib29sIGNh
blJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0OwogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIApAQCAtMzA4LDYgKzMxNiw2MSBAQCBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKK2Ns
YXNzIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgeworcHVibGljOgorICAgIGVudW0gS2luZCB7Cisg
ICAgICAgIE1hZGVOb0NoYW5nZXMsCisgICAgICAgIEdhdmVVcCwKKyAgICAgICAgR2VuZXJhdGVk
TmV3Q29kZQorICAgIH07CisgICAgCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCkKKyAg
ICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kICE9IEdlbmVy
YXRlZE5ld0NvZGUpOworICAgIH0KKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlKQorICAgICAgICA6IG1fa2luZChHZW5lcmF0ZWROZXdD
b2RlKQorICAgICAgICAsIG1fY29kZShjb2RlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29kZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tp
bmQgPT0gb3RoZXIubV9raW5kICYmIG1fY29kZSA9PSBvdGhlci5tX2NvZGU7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9
CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKnRoaXMgIT0gQWNjZXNzR2VuZXJhdGlvblJlc3VsdCgpOworICAgIH0KKyAgICAK
KyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0K
KyAgICAKKyAgICBib29sIG1hZGVOb0NoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0g
TWFkZU5vQ2hhbmdlczsgfQorICAgIGJvb2wgZ2F2ZVVwKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
ID09IEdhdmVVcDsgfQorICAgIGJvb2wgZ2VuZXJhdGVkTmV3Q29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZCA9PSBHZW5lcmF0ZWROZXdDb2RlOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7Cit9OworCiBjbGFzcyBQb2x5bW9ycGhpY0FjY2Vz
cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNBY2Nlc3MpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMzE4LDEwICszODEsMTAgQEAgcHVibGljOgogICAg
IC8vIFRoaXMgbWF5IHJldHVybiBudWxsLCBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0
aW5lIGlzIGxlZnQgaW50YWN0LiBZb3UgYXJlIHJlcXVpcmVkIHRvCiAgICAgLy8gcGFzcyBhIHZl
Y3RvciBvZiBub24tbnVsbCBhY2Nlc3MgY2FzZXMuIFRoaXMgd2lsbCBwcnVuZSB0aGUgYWNjZXNz
IGNhc2VzIGJ5IHJlamVjdGluZyBhbnkgY2FzZQogICAgIC8vIGluIHRoZSBsaXN0IHRoYXQgaXMg
c3Vic3VtZWQgYnkgYSBsYXRlciBjYXNlIGluIHRoZSBsaXN0LgotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciByZWdlbmVyYXRlV2l0aENhc2VzKAorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVnZW5lcmF0ZVdpdGhDYXNlcygKICAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIGNvbnN0IElkZW50aWZpZXImLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+Pik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNl
KAorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZVdpdGhDYXNlKAogICAgICAg
ICBWTSYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYs
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQpAQCAtMzYyLDkgKzQyNSw5IEBAIHBy
aXZhdGU6CiAKIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSgpCi0gICAgOiBtX2NhbGN1bGF0ZWRSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcoZmFsc2UpCi0gICAgLCBtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNl
cHRpb24oZmFsc2UpCi0gICAgLCBtX2NhbGN1bGF0ZWRDYWxsU2l0ZUluZGV4KGZhbHNlKQorICAg
ICAgICA6IG1fY2FsY3VsYXRlZFJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZyhm
YWxzZSkKKyAgICAgICAgLCBtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oZmFs
c2UpCisgICAgICAgICwgbV9jYWxjdWxhdGVkQ2FsbFNpdGVJbmRleChmYWxzZSkKICAgICB7CiAg
ICAgfQogICAgIENDYWxsSGVscGVycyogaml0IHsgbnVsbHB0ciB9OwpAQCAtNDQxLDYgKzUwNCw3
IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBXVEYgewogCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OktpbmQpOwogdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA0LDEzICsxMDQsMTMgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6YWJvdXRUb0RpZSgpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nl
c3NDYXNlKAorQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNj
ZXNzQ2FzZSgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQogewogICAgIFZNJiB2
bSA9ICpjb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAgaWYgKCFhY2Nlc3NDYXNlKQotICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIHJldHVybiBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0OjpNYWRlTm9DaGFuZ2VzOwogICAgIAogICAgIGlmIChjYWNoZVR5cGUg
PT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICByZXR1cm4gdS5zdHViLT5yZWdlbmVyYXRlV2l0
aENhc2Uodm0sIGNvZGVCbG9jaywgKnRoaXMsIGlkZW50LCBXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsK
QEAgLTEyNiwxMSArMTI2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHVi
SW5mbzoKIAogICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgcmVzdWx0ID0KICAgICAgICAgYWNjZXNzLT5yZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBj
b2RlQmxvY2ssICp0aGlzLCBpZGVudCwgV1RGTW92ZShhY2Nlc3NDYXNlcykpOwogCi0gICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBp
ZiAoIXJlc3VsdC5nZW5lcmF0ZWROZXdDb2RlKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
ICAgICBpbml0U3R1Yihjb2RlQmxvY2ssIFdURk1vdmUoYWNjZXNzKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRl
ICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5oIgpAQCAtNDIsNiArNDEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQp
CiAKK2NsYXNzIEFjY2Vzc0Nhc2U7CitjbGFzcyBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OwogY2xh
c3MgUG9seW1vcnBoaWNBY2Nlc3M7CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7
CkBAIC02OCw4ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
KTsKICAgICB2b2lkIGluaXRTdHViKENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9y
cGhpY0FjY2Vzcz4pOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFkZEFjY2Vzc0Nhc2Uo
Ci0gICAgICAgIENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4pOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgYWRkQWNjZXNzQ2FzZShD
b2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
KTsKIAogICAgIHZvaWQgcmVzZXQoQ29kZUJsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDE5LDYgKzQxOSwzMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3Jl
U3RydWN0dXJlCiAjZW5kaWYKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0
eShHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpCit7Cisg
ICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0z
MihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmpl
Y3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdC5wYXlsb2FkR1BSKCkpOwor
ICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQp
OworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlz
KTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCByZXN1bHQu
cGF5bG9hZEdQUigpKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIGxv
YWRWYWx1ZSgKKyAgICAgICAgQmFzZUluZGV4KAorICAgICAgICAgICAgcmVzdWx0LnBheWxvYWRH
UFIoKSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLAorICAgICAgICByZXN1bHQpOworfQorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKIHRlbXBsYXRlPHR5cGVuYW1lIExvYWRGcm9tSGlnaCwgdHlwZW5hbWUgU3RvcmVU
b0hpZ2gsIHR5cGVuYW1lIExvYWRGcm9tTG93LCB0eXBlbmFtZSBTdG9yZVRvTG93Pgogdm9pZCBl
bWl0UmFuZG9tVGh1bmtJbXBsKEFzc2VtYmx5SGVscGVycyYgaml0LCBHUFJSZWcgc2NyYXRjaDAs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBGUFJSZWcgcmVzdWx0LCBjb25zdCBM
b2FkRnJvbUhpZ2gmIGxvYWRGcm9tSGlnaCwgY29uc3QgU3RvcmVUb0hpZ2gmIHN0b3JlVG9IaWdo
LCBjb25zdCBMb2FkRnJvbUxvdyYgbG9hZEZyb21Mb3csIGNvbnN0IFN0b3JlVG9Mb3cmIHN0b3Jl
VG9Mb3cpCkBAIC00OTIsNiArNTE2LDE4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFu
ZG9tVGh1bmsoSlMKICAgICBlbWl0UmFuZG9tVGh1bmtJbXBsKCp0aGlzLCBzY3JhdGNoMCwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCByZXN1bHQsIGxvYWRGcm9tSGlnaCwgc3RvcmVUb0hpZ2gsIGxvYWRG
cm9tTG93LCBzdG9yZVRvTG93KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2Fk
U3RydWN0dXJlKFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIGRlc3QpOwor
ICAgIGxvYWRQdHIodm0oKS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYmFzZSgpLCBzY3JhdGNo
KTsKKyAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgZGVzdCwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBkZXN0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc291cmNl
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBkZXN0KTsKKyNlbmRpZgorfQorCiB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3Vs
dCkKIHsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZWUs
IHNjcmF0Y2gzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGNsb2JiZXJzIG9mZnNldC4KKyAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVS
ZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAg
LTEyMDksMjkgKzEyMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcmd1bWVudHNTdGFy
dChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZW1p
dExvYWRTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0
ZXJJRCBzY3JhdGNoKQotICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBsb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc291cmNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBkZXN0KTsKLSAgICAgICAgbG9hZFB0cih2bSgpLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5iYXNlKCksIHNjcmF0Y2gpOwotICAgICAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc2NyYXRjaCwgZGVzdCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBkZXN0KTsK
LSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKLSAgICAgICAgbG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIGRlc3QpOwotI2VuZGlmCi0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZW1pdExvYWRTdHJ1
Y3R1cmUoQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBk
ZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCi0gICAgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgZGVzdCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKGppdC52bSgpLT5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCksIHNjcmF0Y2gpOwotICAgICAgICBqaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gsIGRlc3QsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0KSwgZGVzdCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc2Ny
YXRjaCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIGRlc3QpOwotI2VuZGlmCi0gICAgfQorICAg
IHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVz
dCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogICAgIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJlV2l0
aFR5cGVJbmZvKFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lz
dGVySUQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uY3BwCShy
ZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
dm9pZCBKU1ZhbHVlUmVnczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgb3V0LnByaW50KG1fZ3ByKTsKKyNlbHNlCisgICAgb3V0LnByaW50
KCIodGFnOiIsIHRhZ0dQUigpLCAiLCBwYXlsb2FkOiIsIHBheWxvYWRHUFIoKSwgIikiKTsKKyNl
bmRpZgorfQorCiAvLyBUaGlzIGlzIGluIHRoZSAuY3BwIGZpbGUgdG8gd29yayBhcm91bmQgY2xh
bmcgaXNzdWVzLgogI2lmIENQVShYODZfNjQpCiBjb25zdCBHUFJSZWcgR1BSSW5mbzo6cGF0Y2hw
b2ludFNjcmF0Y2hSZWdpc3RlciA9IE1hY3JvQXNzZW1ibGVyOjpzX3NjcmF0Y2hSZWdpc3RlcjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxOTkwMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB1c2VzKEdQUlJlZyBncHIpIGNv
bnN0IHsgcmV0dXJuIG1fZ3ByID09IGdwcjsgfQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHI7CiB9OwpAQCAt
MjAyLDYgKzIwNCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdXNlcyhHUFJSZWcgZ3ByKSBjb25z
dCB7IHJldHVybiBtX3RhZ0dQUiA9PSBncHIgfHwgbV9wYXlsb2FkR1BSID09IGdwcjsgfQogICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAg
ICBpbnQ4X3QgbV90YWdHUFI7CiAgICAgaW50OF90IG1fcGF5bG9hZEdQUjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MSw2
ICsxNjEsOCBAQCBzdGF0aWMgdm9pZCByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoU3RyCiAKIHN0
YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQo
dGFyZ2V0KTsKKyAgICAKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0
Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFi
bGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcygKQEAgLTMxNSwxMyArMzE3LDE1IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgfQogICAgIH0KIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0KLSAgICAgICAgc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAotICAgIGlmICgh
Y29kZVB0cikKKyAgICBpZiAocmVzdWx0LmdhdmVVcCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7CisgICAg
aWYgKHJlc3VsdC5tYWRlTm9DaGFuZ2VzKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgcmVwbGFj
ZVdpdGhKdW1wKHN0dWJJbmZvLCByZXN1bHQuY29kZSgpKTsKICAgICAKICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwogfQpAQCAtNDU3LDE2ICs0NjEsMTkgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICB9CiAgICAgfQogCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywg
aWRlbnQsIFdURk1vdmUobmV3Q2FzZSkpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3ZlKG5l
d0Nhc2UpKTsKICAgICAKLSAgICBpZiAoIWNvZGVQdHIpCisgICAgaWYgKHJlc3VsdC5nYXZlVXAo
KSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgaWYgKHJlc3VsdC5tYWRlTm9D
aGFuZ2VzKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAKKyAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKICAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1
YkluZm8pOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQ
dHIpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIAog
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CkBAIC01MTQsMTMgKzUyMSwxNiBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6aW4oCiAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3ZlKG5l
d0Nhc2UpKTsKLSAgICBpZiAoIWNvZGVQdHIpCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBy
ZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRlbnQsIFdURk1vdmUo
bmV3Q2FzZSkpOworICAgIGlmIChyZXN1bHQuZ2F2ZVVwKCkpCiAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgIGlmIChyZXN1bHQubWFkZU5vQ2hhbmdlcygpKQorICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogCisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVt
cCksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIpKTsKKyAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIAogICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNCiAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAgICBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmVtaXRMb2FkU3RydWN0dXJlKEdQ
UkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUNCwgR1BSSW5mbzo6cmVnVDEpOwogICAgIHNsb3dD
YXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsNyBAQCB0eXBlZGVmIGNvbnN0
IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGNsb2JiZXJBbGxSZWdzSW5GVExJQ1Ns
b3dQYXRoLCAhQVNTRVJUX0RJU0FCTEVELCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VBY2Nl
c3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG1heEFjY2Vzc1Zh
cmlhbnRMaXN0U2l6ZSwgOCwgbnVsbHB0cikgXAorICAgIHYodW5zaWduZWQsIG1lZ2Ftb3JwaGlj
TG9hZENvc3QsIDUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZVBvbHl2YXJpYW50RGV2aXJ0
dWFsaXphdGlvbiwgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBoaWNB
Y2Nlc3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBo
aWNDYWxsSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24g
MTk5MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNo
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSwxMiBAQCBwdWJsaWM6CiAgICAg
c2l6ZV90IHNpemVJbk1lbW9yeSgpOwogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogI2Vu
ZGlmCisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4U2l6ZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eVRhYmxlLCBtX2luZGV4U2l6ZSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhNYXNrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFByb3BlcnR5VGFibGUsIG1faW5kZXhNYXNrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZJbmRleCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eVRhYmxlLCBt
X2luZGV4KTsgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9
IDA7CiAKIHByaXZhdGU6CiAgICAgUHJvcGVydHlUYWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxD
YXBhY2l0eSk7CkBAIC0yNDQsNyArMjUwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPFByb3BlcnR5T2Zmc2V0Pj4gbV9kZWxldGVkT2Zmc2V0czsKIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBNaW5pbXVtVGFibGVTaXplID0gMTY7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7CiB9OwogCiBpbmxpbmUgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6YmVnaW4oKQpAQCAtMjcyLDcgKzI3Nyw2IEBAIGlu
bGluZSBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIFByb3AKICAgICBBU1NFUlQoa2V5KTsK
ICAgICBBU1NFUlQoa2V5LT5pc0F0b21pYygpIHx8IGtleS0+aXNTeW1ib2woKSk7CiAgICAgdW5z
aWduZWQgaGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKGtleSk7Ci0gICAgdW5zaWduZWQg
c3RlcCA9IDA7CiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAgICAgKytwcm9wZXJ0eU1h
cEhhc2hUYWJsZVN0YXRzLT5udW1GaW5kczsKQEAgLTI4NSwxOSArMjg5LDE2IEBAIGlubGluZSBQ
cm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIFByb3AKICAgICAgICAgaWYgKGtleSA9PSB0YWJs
ZSgpW2VudHJ5SW5kZXggLSAxXS5rZXkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoJnRhYmxlKClbZW50cnlJbmRleCAtIDFdLCBoYXNoICYgbV9pbmRleE1hc2spOwogCi0gICAg
ICAgIGlmICghc3RlcCkKLSAgICAgICAgICAgIHN0ZXAgPSBXVEY6OmRvdWJsZUhhc2goSWRlbnRp
ZmllclJlcEhhc2g6Omhhc2goa2V5KSkgfCAxOwotCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFU
UwogICAgICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUNvbGxpc2lvbnM7CiAj
ZW5kaWYKIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUwotICAgICAgICBkYXRhTG9n
KCJQcm9wZXJ0eVRhYmxlIGNvbGxpc2lvbiBmb3IgIiwga2V5LCAiICgiLCBoYXNoLCAiKSB3aXRo
IHN0ZXAgIiwgc3RlcCwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIlByb3BlcnR5VGFibGUgY29s
bGlzaW9uIGZvciAiLCBrZXksICIgKCIsIGhhc2gsICIpXG4iKTsKICAgICAgICAgZGF0YUxvZygi
Q29sbGlkZWQgd2l0aCAiLCB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5rZXksICIoIiwgSWRlbnRp
ZmllclJlcEhhc2g6Omhhc2godGFibGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KSwgIilcbiIpOwog
I2VuZGlmCiAKLSAgICAgICAgaGFzaCArPSBzdGVwOworICAgICAgICBoYXNoKys7CiAgICAgfQog
fQogCkBAIC0zMTAsNyArMzExLDYgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSog
UHJvcGVydAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHVuc2lnbmVkIGhhc2ggPSBJ
ZGVudGlmaWVyUmVwSGFzaDo6aGFzaChrZXkpOwotICAgIHVuc2lnbmVkIHN0ZXAgPSAwOwogCiAj
aWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0
cy0+bnVtTG9va3VwczsKQEAgLTMyNyw5ICszMjcsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6
VmFsdWVUeXBlKiBQcm9wZXJ0CiAgICAgICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+
bnVtTG9va3VwUHJvYmluZzsKICNlbmRpZgogCi0gICAgICAgIGlmICghc3RlcCkKLSAgICAgICAg
ICAgIHN0ZXAgPSBXVEY6OmRvdWJsZUhhc2goSWRlbnRpZmllclJlcEhhc2g6Omhhc2goa2V5KSkg
fCAxOwotICAgICAgICBoYXNoICs9IHN0ZXA7CisgICAgICAgIGhhc2grKzsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIwLDYgKzQyMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlT2Zmc2V0KCk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKKyAgICB9
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mKTsKICAgICAgICAg
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275628</attachid>
            <date>2016-04-04 20:35:19 -0700</date>
            <delta_ts>2016-04-05 11:07:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48245</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBA
QAorMjAxNi0wNC0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzIHNob3VsZCBoYXZlIGEgTWVnYW1vcnBoaWNMb2FkIGNhc2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjE4MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9k
dWNlcyBhIG5ldyBjYXNlIHRvIFBvbHltb3JwaGljQWNjZXNzIGNhbGxlZCBNZWdhbW9ycGhpY0xv
YWQuIFRoaXMgaW5saW5lcyB0aGUgbG9va3VwIGluCisgICAgICAgIHRoZSBQcm9wZXJ0eVRhYmxl
LiBJdCdzIGNoZWFwZXIgdGhhbiBzd2l0Y2hpbmcgb24gYSBodWdlIG51bWJlciBvZiBjYXNlcyBh
bmQgaXQncyBjaGVhcGVyIHRoYW4KKyAgICAgICAgY2FsbGluZyBpbnRvIEMrKyB0byBkbyB0aGUg
c2FtZSBqb2IgLSBwYXJ0aWN1bGFybHkgc2luY2UgaW5saW5pbmcgdGhlIGxvb2t1cCBpbnRvIGFu
IGFjY2VzcyBtZWFucworICAgICAgICB0aGF0IHdlIGNhbiBwcmVjb21wdXRlIHRoZSBoYXNoIGNv
ZGUuCisKKyAgICAgICAgV2hlbiB3cml0aW5nIHRoZSBpbmxpbmUgY29kZSBmb3IgdGhlIGhhc2h0
YWJsZSBsb29rdXAsIEkgZm91bmQgdGhhdCBvdXIgaGFzaGluZyBhbGdvcml0aG0gd2FzIG5vdAor
ICAgICAgICBvcHRpbWFsLiBJdCB1c2VkIGEgZG91YmxlLWhhc2hpbmcgbWV0aG9kIGZvciByZWR1
Y2luZyBjb2xsaXNpb24gcGF0aG9sb2dpZXMuIFRoaXMgaXMgZ3JlYXQgZm9yCisgICAgICAgIGlt
cHJvdmluZyB0aGUgcGVyZm9ybWFuY2Ugb2Ygc29tZSB3b3JzdC1jYXNlIHNjZW5hcmlvcy4gQnV0
IHRoaXMgbWlzc2VzIHRoZSBwb2ludCBvZiBhIGhhc2h0YWJsZTogd2UKKyAgICAgICAgd2FudCB0
byBvcHRpbWl6ZSB0aGUgYXZlcmFnZS1jYXNlIHBlcmZvcm1hbmNlLiBXaGVuIG9wdGltaXppbmcg
Zm9yIGF2ZXJhZ2UtY2FzZSwgd2UgY2FuIGNob29zZSB0bworICAgICAgICBlaXRoZXIgZm9jdXMg
b24gbWF4aW1pemluZyB0aGUgbGlrZWxpaG9vZCBvZiB0aGUgZmFzdCBjYXNlIGhhcHBlbmluZywg
b3IgdG8gbWluaW1pemUgdGhlIGNvc3Qgb2YgdGhlCisgICAgICAgIHdvcnN0LWNhc2UsIG9yIHRv
IG1pbmltaXplIHRoZSBjb3N0IG9mIHRoZSBmYXN0IGNhc2UuIEV2ZW4gYSB2ZXJ5IGJhc2ljIGhh
c2h0YWJsZSB3aWxsIGFjaGlldmUgYSBoaWdoCisgICAgICAgIHByb2JhYmlsaXR5IG9mIGhpdHRp
bmcgdGhlIGZhc3QgY2FzZS4gU28sIGRvaW5nIHdvcmsgdG8gcmVkdWNlIHRoZSBsaWtlbGlob29k
IG9mIGEgd29yc3QtY2FzZQorICAgICAgICBwYXRob2xvZ3kgb25seSBtYWtlcyBzZW5zZSBpZiBp
dCBhbHNvIHByZXNlcnZlcyB0aGUgZ29vZCBwZXJmb3JtYW5jZSBvZiB0aGUgZmFzdCBjYXNlLCBv
ciByZWR1Y2VzIHRoZQorICAgICAgICBsaWtlbGlob29kIG9mIHRoZSB3b3JzdC1jYXNlIGJ5IHNv
IG11Y2ggdGhhdCBpdCdzIGEgd2luIGZvciB0aGUgYXZlcmFnZSBjYXNlIGV2ZW4gd2l0aCBhIHNs
b3ctZG93biBpbgorICAgICAgICB0aGUgZmFzdCBjYXNlLgorCisgICAgICAgIEkgZG9uJ3QgYmVs
aWV2ZSwgYmFzZWQgb24gbG9va2luZyBhdCBob3cgdGhlIGRvdWJsZS1oYXNoaW5nIGlzIGltcGxl
bWVudGVkLCB0aGF0IGl0J3MgcG9zc2libGUgdGhhdAorICAgICAgICB0aGlzIHByZXNlcnZlcyB0
aGUgZ29vZCBwZXJmb3JtYW5jZSBvZiB0aGUgZmFzdCBjYXNlLiBJdCByZXF1aXJlcyBhdCBsZWFz
dCBvbmUgbW9yZSB2YWx1ZSB0byBiZSBsaXZlCisgICAgICAgIGFyb3VuZCB0aGUgbG9vcCwgYW5k
IGRyYW1hdGljYWxseSBpbmNyZWFzZXMgdGhlIHJlZ2lzdGVyIHByZXNzdXJlIGF0IGtleSBwb2lu
dHMgaW5zaWRlIHRoZSBsb29wLiBUaGUKKyAgICAgICAgYmlnZ2VzdCBvZmZlbmRlciBpcyB0aGUg
ZG91YmxlSGFzaCgpIG1ldGhvZCBpdHNlbGYuIFRoZXJlIGlzIG5vIGdldHRpbmcgYXJvdW5kIGhv
dyBiYWQgdGhpcyBpczogaWYKKyAgICAgICAgdGhlIGNvbXBpbGVyIGxpdmUtcmFuZ2Utc3BsaXRz
IHRoYXQgbWV0aG9kIHRvIGRlYXRoIHRvIGF2b2lkIGRlZ3JhZGluZyByZWdpc3RlciBwcmVzc3Vy
ZSBlbHNld2hlcmUKKyAgICAgICAgdGhlbiB3ZSB3aWxsIHBheSBhIHN0ZWVwIHByaWNlIGFueXRp
bWUgd2UgdGFrZSB0aGUgc2Vjb25kIGl0ZXJhdGlvbiBhcm91bmQgdGhlIGxvb3A7IGJ1dCBpZiB0
aGUKKyAgICAgICAgY29tcGlsZXIgZG9lc24ndCBzcGxpdCBhcm91bmQgdGhlIGNhbGwgdGhlbiB0
aGUgaGFzaHRhYmxlIGxvb2t1cCBmYXN0IHBhdGggd2lsbCBiZSBmdWxsIG9mIHNwaWxscyBvbgor
ICAgICAgICBzb21lIGFyY2hpdGVjdHVyZXMgKEkgcGVyZm9ybWVkIGJpb2xvZ2ljYWwgcmVnaXN0
ZXIgYWxsb2NhdGlvbiBhbmQgZm91bmQgdGhhdCBJIG5lZWRlZCA5IHJlZ2lzdGVycworICAgICAg
ICBmb3IgY29tcGxldGUgbG9va3VwLCB3aGlsZSB4ODYtNjQgaGFzIG9ubHkgNiBjYWxsZWUtc2F2
ZXM7IE9UT0ggQVJNNjQgaGFzIDEwIGNhbGxlZS1zYXZlcyBzbyBpdCBtaWdodAorICAgICAgICBi
ZSBiZXR0ZXIgb2ZmKS4KKworICAgICAgICBIZW5jZSwgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBo
YXNodGFibGUgbG9va3VwIHRvIHVzZSBzaW1wbGUgbGluZWFyIHByb2JpbmcuIFRoaXMgd2FzIG5v
dCBhIHNsb3ctZG93bgorICAgICAgICBvbiBhbnl0aGluZywgYW5kIGl0IG1hZGUgTWVnYW1vcnBo
aWNMb2FkIG11Y2ggbW9yZSBzZW5zaWJsZSBzaW5jZSBpdCBpcyBsZXNzIGxpa2VseSB0byBoYXZl
IHRvIHNwaWxsLgorCisgICAgICAgIFRoZXJlIGFyZSBzb21lIG90aGVyIHNtYWxsIGNoYW5nZXMg
aW4gdGhpcyBwYXRjaCwgbGlrZSByYXRpb25hbGl6aW5nIHRoZSBJQydzIGNob2ljZSBiZXR3ZWVu
IGdpdmluZworICAgICAgICB1cCBhZnRlciBhIHJlcGF0Y2ggKGkuZS4gbmV2ZXIgdHJ5aW5nIGFn
YWluKSBhbmQganVzdCBwcmV0ZW5kaW5nIHRoYXQgbm90aGluZyBoYXBwZW5lZCAoc28gd2UgY2Fu
CisgICAgICAgIHRyeSB0byByZXBhdGNoIGFnYWluIGluIHRoZSBmdXR1cmUpLiBJdCBsb29rZWQg
bGlrZSB0aGUgY29kZSBpbiBSZXBhdGNoLmNwcCB3YXMgc2V0IHVwIHRvIGJlIGFibGUgdG8KKyAg
ICAgICAgY2hvb3NlIGJldHdlZW4gdGhvc2Ugb3B0aW9ucywgYnV0IHdlIHdlcmVuJ3QgZnVsbHkg
dGFraW5nIGFkdmFudGFnZSBvZiBpdCBiZWNhdXNlIHRoZQorICAgICAgICByZWdlbmVyYXRlV2l0
aENhc2UoKSBtZXRob2QganVzdCByZXR1cm5lZCBudWxsIGZvciBhbnkgZmFpbHVyZSwgYW5kIGRp
ZG4ndCBzYXkgd2hldGhlciBpdCB3YXMgdGhlCisgICAgICAgIHNvcnQgb2YgZmFpbHVyZSB0aGF0
IHJlbmRlcnMgdGhlIGlubGluZSBjYWNoZSB1bnJlcGF0Y2hhYmxlIChsaWtlIG1lbW9yeSBhbGxv
Y2F0aW9uIGZhaWx1cmUpLiBOb3cKKyAgICAgICAgdGhpcyBpcyBhbGwgbWFkZSBleHBsaWNpdC4g
SSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGhhcHBlbmVkIGluIHRoaXMgcGF0Y2gg
c2luY2UgdGhlCisgICAgICAgIE1lZ2Ftb3JwaGljTG9hZCBjb2RlIGF1dG9tYWdpY2FsbHkgZ2Vu
ZXJhdGVzIGEgTWVnYW1vcnBoaWNMb2FkIGNhc2UgYnkgY29hbGVzY2luZyBvdGhlciBjYXNlcy4g
U2luY2UKKyAgICAgICAgdGhpcyBpcyBpbnRlbmRlZCB0byBhdm9pZCBibG93aW5nIG91dCB0aGUg
Y2FjaGUgYW5kIG1ha2luZyBpdCB1bnJlcGF0Y2hhYmxlLCBJIHdhbnRlZCB0byBtYWtlIHN1cmUK
KyAgICAgICAgdGhhdCB0aGUgcnVsZXMgZm9yIGdpdmluZyB1cCB3ZXJlIHNvbWV0aGluZyB0aGF0
IG1hZGUgc2Vuc2UgdG8gbWUuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgYmlnIHdpbiBv
biBtaWNyb2JlbmNobWFya3MuIEknbSBub3QgZG9uZSBydW5uaW5nIGJpZ2dlciBiZW5jaG1hcmtz
IHlldC4KKworICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmdldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZCk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmNvdWxkU3RpbGxTdWNjZWVkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuQmVS
ZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6flBvbHltb3JwaGljQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5h
bCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6aXNHZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc1B1dCk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzSW4pOgorICAgICAgICAoSlNDOjpBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0OjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0OjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJh
dGlvblJlc3VsdDo6a2luZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6
OmNvZGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjptYWRlTm9DaGFu
Z2VzKToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6Z2F2ZVVwKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6Z2VuZXJhdGVkTmV3Q29kZSk6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmFib3V0VG9EaWUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6
YWRkQWNjZXNzQ2FzZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OmVtaXRSYW5k
b21UaHVua0ltcGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21U
aHVuayk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpsb2FkVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Om1v
dmVWYWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0
YXJ0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVX
aXRoVHlwZUluZm8pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3Ry
dWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvR1BSSW5mby5jcHA6CisgICAgICAgIChK
U0M6OkpTVmFsdWVSZWdzOjpkdW1wKToKKyAgICAgICAgKiBqaXQvR1BSSW5mby5oOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlUmVnczo6dXNlcyk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgor
ICAgICAgICAoSlNDOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdl
dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0
cnlSZXBhdGNoSW4pOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAg
ICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlUYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpmaW5k
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorCiAyMDE2LTA0LTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxOTg3OTIpOiBbR1RLXSBJbnNw
ZWN0b3IgY3Jhc2hlcyBpbiBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSBzaW5jZSByMTk4NzkyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDYsNiArNDYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBjb25z
dCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAordm9pZCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7Cisg
ICAgaWYgKG1fY29kZSkKKyAgICAgICAgb3V0LnByaW50KCI6IiwgbV9jb2RlKTsKK30KKwogV2F0
Y2hwb2ludCogQWNjZXNzR2VuZXJhdGlvblN0YXRlOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCiB7CiAgICAgcmV0dXJuIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKQEAg
LTE3NSw2ICsxODIsMjEgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6
OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBB
Y2Nlc3NDYXNlOjptZWdhbW9ycGhpY0xvYWQoVk0mIHZtLCBKU0NlbGwqIG93bmVyKQoreworICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICAKKyAgICBp
ZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA5KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nl
c3NDYXNlKCkpOworICAgIAorICAgIHJlc3VsdC0+bV90eXBlID0gTWVnYW1vcnBoaWNMb2FkOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBBY2Nlc3NDYXNlOjpyZXBsYWNlKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKQEAgLTMyMiw2ICszNDQs
NyBAQCBib29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBNZWdhbW9ycGhp
Y0xvYWQ6CiAgICAgY2FzZSBBcnJheUxlbmd0aDoKICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQyLDkgKzM2NSwyMSBAQCBib29sIEFjY2Vzc0Nhc2U6
OmNvdWxkU3RpbGxTdWNjZWVkKCkgY29uCiAgICAgcmV0dXJuIG1fY29uZGl0aW9uU2V0LnN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CiB9
CiAKLWJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikK
K2Jvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdHlwZSgpID09IExvYWQKKyAgICAgICAgJiYgIXZpYVByb3h5KCkKKyAg
ICAgICAgJiYgY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpCisgICAgICAgICYmICFhZGRpdGlvbmFs
U2V0KCkKKyAgICAgICAgJiYgIWN1c3RvbVNsb3RCYXNlKCk7Cit9CisKK2Jvb2wgQWNjZXNzQ2Fz
ZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKIHsKICAgICAvLyBX
ZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBzb21l
dGhpbmcgb2J2aW91cy4KKyAgICAKKyAgICBpZiAodHlwZSgpID09IE1lZ2Ftb3JwaGljTG9hZCAm
JiBvdGhlci5jYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBpZiAoIWd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkpIHsKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIQpAQCAtNDA3LDE3ICs0NDIsMjUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKICAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5q
aXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gKnN0YXRlLmlkZW50OworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0
ZS5zdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0odm0pOwogCiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CiAgICAgICAgIEFT
U0VSVCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0YXRlLnNj
cmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ZmFsbFRocm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
KSkpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNo
VGVzdDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUuc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Cisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC00MjYsMzMgKzQ2OSwxNDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdp
dGhHdWFyZCgKICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJy
YW5jaDgoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBNZWdhbW9ycGhpY0xvYWQ6IHsKKyAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIGtleSA9IGlkZW50LmltcGwoKTsKKyAgICAgICAgdW5zaWduZWQg
aGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKGtleSk7CisgICAgICAgIAorICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdp
c3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VUYWdHUFIpKTsKKyNlbmRpZgorICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAg
CisgICAgICAgIEdQUlJlZyBpbnRlcm1lZGlhdGVHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICBH
UFJSZWcgbWFza0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
R1BSUmVnIG1hc2tlZEhhc2hHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Cisg
ICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
KyAgICAgICAgR1BSUmVnIG9mZnNldEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCJiYXNlR1BSID0gIiwgYmFzZUdQUiwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJ2YWx1
ZVJlZ3MgPSAiLCB2YWx1ZVJlZ3MsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygic2NyYXRj
aEdQUiA9ICIsIHNjcmF0Y2hHUFIsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiaW50ZXJt
ZWRpYXRlR1BSID0gIiwgaW50ZXJtZWRpYXRlR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coIm1hc2tHUFIgPSAiLCBtYXNrR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIm1h
c2tlZEhhc2hHUFIgPSAiLCBtYXNrZWRIYXNoR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coImluZGV4R1BSID0gIiwgaW5kZXhHUFIsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygi
b2Zmc2V0R1BSID0gIiwgb2Zmc2V0R1BSLCAiXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQor
ICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGpp
dCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0Nh
bGwpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbXlGYWlsQW5kSWdub3JlOwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG15RmFsbFRocm91Z2g7CisgICAgICAgIAor
ICAgICAgICBqaXQuZW1pdExvYWRTdHJ1Y3R1cmUoYmFzZUdQUiwgaW50ZXJtZWRpYXRlR1BSLCBt
YXNrR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoaW50ZXJtZWRpYXRlR1BSLCBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGVVbnNhZmVP
ZmZzZXQoKSksCisgICAgICAgICAgICBpbnRlcm1lZGlhdGVHUFIpOworICAgICAgICAKKyAgICAg
ICAgbXlGYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Olplcm8sIGludGVybWVkaWF0ZUdQUikpOworICAgICAgICAKKyAgICAgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoaW50ZXJtZWRpYXRlR1BSLCBQcm9wZXJ0eVRhYmxlOjpvZmZz
ZXRPZkluZGV4TWFzaygpKSwgbWFza0dQUik7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIsIFByb3BlcnR5VGFibGU6Om9mZnNldE9mSW5k
ZXgoKSksIGluZGV4R1BSKTsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIsIFByb3BlcnR5VGFibGU6Om9mZnNldE9m
SW5kZXhTaXplKCkpLAorICAgICAgICAgICAgaW50ZXJtZWRpYXRlR1BSKTsKKworICAgICAgICBq
aXQubW92ZShtYXNrR1BSLCBtYXNrZWRIYXNoR1BSKTsKKyAgICAgICAgaml0LmFuZDMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGhhc2gpLCBtYXNrZWRIYXNoR1BSKTsKKyAgICAgICAgaml0
LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIpLCBpbnRlcm1lZGlhdGVHUFIp
OworICAgICAgICBqaXQuYWRkUHRyKGluZGV4R1BSLCBpbnRlcm1lZGlhdGVHUFIpOworICAgICAg
ICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShsb29wKTsKKyAgICAgICAgCisgICAgICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoaW5kZXhHUFIsIG1hc2tlZEhhc2hHUFIsIENDYWxsSGVscGVy
czo6VGltZXNGb3VyKSwgb2Zmc2V0R1BSKTsKKyAgICAgICAgCisgICAgICAgIG15RmFsbFRocm91
Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6RXF1YWwsCisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByb3BlcnR5VGFibGU6OkVtcHR5RW50
cnlJbmRleCkpKTsKKyAgICAgICAgCisgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgb2Zmc2V0R1BSKTsKKyAgICAgICAgaml0Lm11bDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHNpemVvZihQcm9wZXJ0eU1hcEVudHJ5KSksIG9mZnNldEdQUiwgb2Zm
c2V0R1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihpbnRlcm1lZGlhdGVHUFIsIG9mZnNldEdQUik7
CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29sbGlzaW9uID0gIGppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9mZnNldEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3Bl
cnR5TWFwRW50cnksIGtleSkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGtleSkpOworICAgICAgICAKKyAgICAgICAgLy8gb2Zmc2V0R1BSIGN1cnJlbnRseSBob2xk
cyBhIHBvaW50ZXIgdG8gdGhlIFByb3BlcnR5TWFwRW50cnksIHdoaWNoIGhhcyB0aGUgb2Zmc2V0
IGFuZCBhdHRyaWJ1dGVzLgorICAgICAgICAvLyBDaGVjayB0aGVtIGFuZCB0aGVuIGF0dGVtcHQg
dGhlIGxvYWQuCisgICAgICAgIAorICAgICAgICBteUZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAg
ICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhvZmZzZXRHUFIs
IE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eU1hcEVudHJ5LCBhdHRyaWJ1dGVzKSksCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQWNjZXNzb3IgfCBDdXN0b21BY2Nl
c3NvcikpKTsKKyAgICAgICAgCisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG9mZnNldEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5TWFwRW50cnksIG9mZnNldCkp
LCBvZmZzZXRHUFIpOworICAgICAgICAKKyAgICAgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlR1BS
LCBvZmZzZXRHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIAorICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAg
ICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICAKKyAgICAgICAgY29sbGlzaW9uLmxpbmsoJmpp
dCk7CisKKyAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBt
YXNrZWRIYXNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBiZSBz
bWFydGVyIGFib3V0IHRoaXMuIEN1cnJlbnRseSB3ZSdyZSBidXJuaW5nIGEgR1BSIGZvciB0aGUg
bWFzay4gQnV0IGxvb3BpbmcKKyAgICAgICAgLy8gYXJvdW5kIGlzbid0IHN1cGVyIGNvbW1vbiBz
byB3ZSBjb3VsZCwgZm9yIGV4YW1wbGUsIHJlY29tcHV0ZSB0aGUgbWFzayBmcm9tIHRoZSBkaWZm
ZXJlbmNlIGJldHdlZW4KKyAgICAgICAgLy8gdGhlIHRhYmxlIGFuZCBpbmRleC4gQnV0IGJlZm9y
ZSB3ZSBkbyB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBtYWtlIGl0IGVhc2llciB0byBtdWx0aXBs
eSBhbmQKKyAgICAgICAgLy8gZGl2aWRlIGJ5IHRoZSBzaXplIG9mIFByb3BlcnR5TWFwRW50cnku
IFRoYXQgcHJvYmFibHkgaW52b2x2ZXMgbWFraW5nIFByb3BlcnR5TWFwRW50cnkgYmUgYXJyYW5n
ZWQKKyAgICAgICAgLy8gdG8gaGF2ZSBhIHBvd2VyLW9mLTIgc2l6ZS4KKyAgICAgICAgaml0LmFu
ZDMyKG1hc2tHUFIsIG1hc2tlZEhhc2hHUFIpOworICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhs
b29wLCAmaml0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkgeworICAgICAgICAgICAgbXlGYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHBy
ZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBteUZhbGxUaHJvdWdoLmxpbmso
JmppdCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKG15RmFpbEFuZElnbm9yZSk7CisgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQobXlGYWxsVGhyb3VnaCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKICAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCiAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBl
KSkpOwogCi0gICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAot
ICAgICAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKICAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAogICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAg
ICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTA5MSw3ICsxMjQ4LDE0IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKIAogICAgICAgICBlbWl0SW50cmlu
c2ljR2V0dGVyKHN0YXRlKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0gfQorICAgIH0KKyAgICAK
KyAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBo
YW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRoZSBndWFyZCBpcyBwYXJ0IG9m
IHRoZSBtZWdhbW9ycGhpYyBsb2FkCisgICAgICAgIC8vIGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1
cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRlKCkgZGlyZWN0bHkgZm9yIE1lZ2Ftb3Jw
aGljTG9hZCBzaW5jZQorICAgICAgICAvLyBNZWdhbW9ycGhpY0xvYWQgaXMgbm90IGd1YXJkZWQg
YnkgYSBzdHJ1Y3R1cmUgY2hlY2suCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkBA
IC0xMDk5LDcgKzEyNjMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVy
YXRpCiBQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIFBvbHltb3Jw
aGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2VzKAorQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcygKICAgICBW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4+IG9yaWdpbmFsQ2FzZXNUb0FkZCkKIHsKQEAgLTExMTQsOCArMTI3OCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAvLyAgIGFuZCB0aGUg
cHJldmlvdXMgc3R1YiBhcmUga2VwdCBpbnRhY3QgYW5kIHRoZSBuZXcgY2FzZXMgYXJlIGRlc3Ry
b3llZC4gSXQncyBPSyB0byBhdHRlbXB0IHRvCiAgICAgLy8gICBhZGQgbW9yZSB0aGluZ3MgYWZ0
ZXIgZmFpbHVyZS4KICAgICAKLSAgICAvLyBGaXJzdCwgdmVyaWZ5IHRoYXQgd2UgY2FuIGdlbmVy
YXRlIGNvZGUgZm9yIGFsbCBvZiB0aGUgbmV3IGNhc2VzIHdoaWxlIGVsaW1pbmF0aW5nIGFueSBv
ZiB0aGUKLSAgICAvLyBuZXcgY2FzZXMgdGhhdCByZXBsYWNlIGVhY2ggb3RoZXIuCisgICAgLy8g
Rmlyc3QgZW5zdXJlIHRoYXQgdGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCBkb2Vzbid0IGNvbnRhaW4g
ZHVwbGljYXRlcy4KICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBjYXNl
c1RvQWRkOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENhc2VzVG9BZGQu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG15Q2Fz
ZSA9IFdURk1vdmUob3JpZ2luYWxDYXNlc1RvQWRkW2ldKTsKQEAgLTExNDIsNyArMTMwNSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAvLyBuZXcgc3R1
YiB0aGF0IHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBvbGQgb25lLiBSZXR1cm5pbmcgbnVsbCBz
aG91bGQgdGVsbCB0aGUgY2FsbGVyIHRvIGp1c3QKICAgICAvLyBrZWVwIGRvaW5nIHdoYXQgdGhl
eSB3ZXJlIGRvaW5nIGJlZm9yZS4KICAgICBpZiAoY2FzZXNUb0FkZC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQ6Ok1hZGVOb0NoYW5nZXM7CiAKICAgICAvLyBOb3cgY29uc3RydWN0
IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkgc2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUgc3VjY2Vz
c2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCiAgICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91cyBjYXNl
cyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZSBy
ZXBsYWNlZCwgYW5kCkBAIC0xMTcxLDIyICsxMzM0LDQzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBQb2x5bW9ycGhpY0FjY2VzczoKIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9n
KCJuZXdDYXNlczogIiwgbGlzdER1bXAobmV3Q2FzZXMpLCAiXG4iKTsKKyAgICAKKyAgICAvLyBT
ZWUgaWYgd2UgYXJlIGNsb3NlIHRvIGhhdmluZyB0b28gbWFueSBjYXNlcyBhbmQgaWYgc29tZSBv
ZiB0aG9zZSBjYXNlcyBjYW4gYmUgc3Vic3VtZWQgYnkgYQorICAgIC8vIG1lZ2Ftb3JwaGljIGxv
YWQuCisgICAgaWYgKG5ld0Nhc2VzLnNpemUoKSA+PSBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50
TGlzdFNpemUoKSkgeworICAgICAgICB1bnNpZ25lZCBudW1TZWxmTG9hZHMgPSAwOworICAgICAg
ICBmb3IgKGF1dG8mIG5ld0Nhc2UgOiBuZXdDYXNlcykgeworICAgICAgICAgICAgaWYgKG5ld0Nh
c2UtPmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpKQorICAgICAgICAgICAgICAgIG51
bVNlbGZMb2FkcysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobnVtU2VsZkxv
YWRzID49IE9wdGlvbnM6Om1lZ2Ftb3JwaGljTG9hZENvc3QoKSkgeworICAgICAgICAgICAgaWYg
KGF1dG8gbWVnYSA9IEFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZCh2bSwgY29kZUJsb2NrKSkg
eworICAgICAgICAgICAgICAgIG5ld0Nhc2VzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiYgbmV3Q2FzZSkgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3Q2FzZS0+Y2FuQmVSZXBs
YWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5ld0Nhc2VzLmFwcGVuZChXVEZNb3ZlKG1lZ2Ep
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChuZXdDYXNlcy5z
aXplKCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUoKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIlRvbyBtYW55IGNhc2VzLlxuIik7Ci0g
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgcmV0dXJuIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdhdmVVcDsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgaWRl
bnQsIG5ld0Nhc2VzKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpOworICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6
R2F2ZVVwOwogCiAgICAgbV9saXN0ID0gV1RGTW92ZShuZXdDYXNlcyk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlV2l0aENhc2UoCitBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNz
OjpyZWdlbmVyYXRlV2l0aENhc2UoCiAgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3QWNjZXNzKQogewpAQCAtMTQwMywxMiAr
MTU4NywzMiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6
OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQ6Ok1hZGVOb0NoYW5nZXM6CisgICAgICAgIG91dC5wcmludCgiTWFkZU5vQ2hh
bmdlcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
OjpHYXZlVXA6CisgICAgICAgIG91dC5wcmludCgiR2F2ZVVwIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdlbmVyYXRlZE5ld0NvZGU6CisgICAg
ICAgIG91dC5wcmludCgiR2VuZXJhdGVkTmV3Q29kZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUp
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpMb2FkOgogICAg
ICAgICBvdXQucHJpbnQoIkxvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6TWVnYW1vcnBoaWNMb2FkOgorICAgICAgICBvdXQucHJpbnQoIk1lZ2Ftb3JwaGljTG9h
ZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOgog
ICAgICAgICBvdXQucHJpbnQoIlRyYW5zaXRpb24iKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmgJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDYgKzUzLDcgQEAgY2xh
c3MgQWNjZXNzQ2FzZSB7CiBwdWJsaWM6CiAgICAgZW51bSBBY2Nlc3NUeXBlIHsKICAgICAgICAg
TG9hZCwKKyAgICAgICAgTWVnYW1vcnBoaWNMb2FkLAogICAgICAgICBUcmFuc2l0aW9uLAogICAg
ICAgICBSZXBsYWNlLAogICAgICAgICBNaXNzLApAQCAtODEsNiArODIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgSW5NaXNzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBj
YXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWVnYW1vcnBoaWNMb2FkOgogICAgICAgICBjYXNlIE1p
c3M6CiAgICAgICAgIGNhc2UgR2V0dGVyOgogICAgICAgICBjYXNlIEN1c3RvbVZhbHVlR2V0dGVy
OgpAQCAtOTYsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKICAg
ICAgICAgY2FzZSBNaXNzOgogICAgICAgICBjYXNlIEdldHRlcjoKICAgICAgICAgY2FzZSBDdXN0
b21WYWx1ZUdldHRlcjoKQEAgLTExOSw2ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1lZ2Ft
b3JwaGljTG9hZDoKICAgICAgICAgY2FzZSBNaXNzOgogICAgICAgICBjYXNlIEdldHRlcjoKICAg
ICAgICAgY2FzZSBDdXN0b21WYWx1ZUdldHRlcjoKQEAgLTE0NSw3ICsxNDksOSBAQCBwdWJsaWM6
CiAgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLAogICAgICAg
ICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIsCiAgICAgICAgIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOwotCisgICAgCisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBtZWdhbW9ycGhpY0xvYWQoVk0mLCBKU0NlbGwqIG93bmVyKTsK
KyAgICAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlcGxhY2UoVk0m
LCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CiAKICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyYW5zaXRpb24oCkBAIC0yNDcsMTMgKzI1
MywxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJcyBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgdGhpcyBj
YXNlIHRvIGV2ZXIgYmUgdGFrZW4/CiAgICAgYm9vbCBjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0
OwotCisgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJpbnNpY0dldHRlcihKU0Z1bmN0
aW9uKiwgU3RydWN0dXJlKik7CiAKKyAgICBib29sIGNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGlj
TG9hZCgpIGNvbnN0OworCiAgICAgLy8gSWYgdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCB0aGVu
IGl0J3MgYSBnb29kIGlkZWEgdG8gcmVtb3ZlICdvdGhlcicgZnJvbSB0aGUgYWNjZXNzIG9uY2Ug
J3RoaXMnCiAgICAgLy8gaXMgYWRkZWQuIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBpbiBjYXNl
IG9mIGNvbnRyYWRpY3Rpb25zLCAndGhpcycgcmVwcmVzZW50cyBhIG5ld2VyLCBhbmQgc28KICAg
ICAvLyBtb3JlIHVzZWZ1bCwgdHJ1dGguIFRoaXMgbWV0aG9kIGNhbiBiZSBjb25zZXJ2YXRpdmU7
IGl0IHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gaXQgZG91YnQuCi0gICAgYm9vbCBjYW5SZXBsYWNl
KGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKTsKKyAgICBib29sIGNhblJlcGxhY2UoY29uc3QgQWNj
ZXNzQ2FzZSYgb3RoZXIpIGNvbnN0OwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OwogICAgIApAQCAtMzA4LDYgKzMxNiw2MSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKK2NsYXNzIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE1hZGVOb0NoYW5n
ZXMsCisgICAgICAgIEdhdmVVcCwKKyAgICAgICAgR2VuZXJhdGVkTmV3Q29kZQorICAgIH07Cisg
ICAgCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCkKKyAgICAgICAgOiBtX2tpbmQoa2lu
ZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kICE9IEdlbmVyYXRlZE5ld0NvZGUpOworICAg
IH0KKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlKQorICAgICAgICA6IG1fa2luZChHZW5lcmF0ZWROZXdDb2RlKQorICAgICAgICAsIG1f
Y29kZShjb2RlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5k
ICYmIG1fY29kZSA9PSBvdGhlci5tX2NvZGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0g
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCgpOworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICAKKyAgICBib29sIG1h
ZGVOb0NoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gTWFkZU5vQ2hhbmdlczsgfQor
ICAgIGJvb2wgZ2F2ZVVwKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEdhdmVVcDsgfQorICAg
IGJvb2wgZ2VuZXJhdGVkTmV3Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBHZW5lcmF0
ZWROZXdDb2RlOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBtX2NvZGU7Cit9OworCiBjbGFzcyBQb2x5bW9ycGhpY0FjY2VzcyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUG9seW1vcnBoaWNBY2Nlc3MpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtMzE4LDEwICszODEsMTAgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWF5IHJldHVy
biBudWxsLCBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlzIGxlZnQgaW50YWN0
LiBZb3UgYXJlIHJlcXVpcmVkIHRvCiAgICAgLy8gcGFzcyBhIHZlY3RvciBvZiBub24tbnVsbCBh
Y2Nlc3MgY2FzZXMuIFRoaXMgd2lsbCBwcnVuZSB0aGUgYWNjZXNzIGNhc2VzIGJ5IHJlamVjdGlu
ZyBhbnkgY2FzZQogICAgIC8vIGluIHRoZSBsaXN0IHRoYXQgaXMgc3Vic3VtZWQgYnkgYSBsYXRl
ciBjYXNlIGluIHRoZSBsaXN0LgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdlbmVyYXRl
V2l0aENhc2VzKAorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZVdpdGhDYXNl
cygKICAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElk
ZW50aWZpZXImLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgcmVnZW5lcmF0ZVdpdGhDYXNlKAogICAgICAgICBWTSYsIENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQpAQCAtMzYyLDkgKzQyNSw5IEBAIHByaXZhdGU6CiAKIHN0cnVjdCBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSgpCi0gICAg
OiBtX2NhbGN1bGF0ZWRSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoZmFsc2Up
Ci0gICAgLCBtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oZmFsc2UpCi0gICAg
LCBtX2NhbGN1bGF0ZWRDYWxsU2l0ZUluZGV4KGZhbHNlKQorICAgICAgICA6IG1fY2FsY3VsYXRl
ZFJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZyhmYWxzZSkKKyAgICAgICAgLCBt
X25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oZmFsc2UpCisgICAgICAgICwgbV9j
YWxjdWxhdGVkQ2FsbFNpdGVJbmRleChmYWxzZSkKICAgICB7CiAgICAgfQogICAgIENDYWxsSGVs
cGVycyogaml0IHsgbnVsbHB0ciB9OwpAQCAtNDQxLDYgKzUwNCw3IEBAIHByaXZhdGU6CiAKIG5h
bWVzcGFjZSBXVEYgewogCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQ6OktpbmQpOwogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RG
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTA0LDEzICsxMDQsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRU
b0RpZSgpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKAorQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQogewogICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZt
KCk7CiAgICAgCiAgICAgaWYgKCFhY2Nlc3NDYXNlKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCk7CisgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpN
YWRlTm9DaGFuZ2VzOwogICAgIAogICAgIGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHVi
KQogICAgICAgICByZXR1cm4gdS5zdHViLT5yZWdlbmVyYXRlV2l0aENhc2Uodm0sIGNvZGVCbG9j
aywgKnRoaXMsIGlkZW50LCBXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsKQEAgLTEyNiwxMSArMTI2LDEx
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHViSW5mbzoKIAogICAgIGFjY2Vz
c0Nhc2VzLmFwcGVuZChXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciByZXN1bHQgPQorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0ID0KICAg
ICAgICAgYWNjZXNzLT5yZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ssICp0aGlzLCBp
ZGVudCwgV1RGTW92ZShhY2Nlc3NDYXNlcykpOwogCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBpZiAoIXJlc3VsdC5nZW5lcmF0
ZWROZXdDb2RlKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICBpbml0U3R1Yihjb2Rl
QmxvY2ssIFdURk1vdmUoYWNjZXNzKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDYg
QEAKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9w
Y29kZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgpAQCAtNDIsNiArNDEs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKK2NsYXNzIEFjY2Vzc0Nh
c2U7CitjbGFzcyBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OwogY2xhc3MgUG9seW1vcnBoaWNBY2Nl
c3M7CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CkBAIC02OCw4ICs2OSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGluaXRT
dHViKENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4pOwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFkZEFjY2Vzc0Nhc2UoCi0gICAgICAgIENvZGVCbG9j
ayosIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4pOworICAg
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgYWRkQWNjZXNzQ2FzZShDb2RlQmxvY2sqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KTsKIAogICAgIHZvaWQgcmVz
ZXQoQ29kZUJsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE5LDYgKzQx
OSwzMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlCiAjZW5kaWYK
IH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpCit7CisgICAgSnVtcCBpc0lubGluZSA9
IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9m
ZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgIG5lZzMyKG9mZnNldCk7
CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkg
PSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisg
ICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNp
emVvZihKU09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJz
dE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCByZXN1bHQucGF5bG9hZEdQUigpKTsKKyAg
ICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIGxvYWRWYWx1ZSgKKyAgICAgICAg
QmFzZUluZGV4KAorICAgICAgICAgICAgcmVzdWx0LnBheWxvYWRHUFIoKSwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLAorICAgICAgICByZXN1bHQpOworfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKIHRlbXBsYXRl
PHR5cGVuYW1lIExvYWRGcm9tSGlnaCwgdHlwZW5hbWUgU3RvcmVUb0hpZ2gsIHR5cGVuYW1lIExv
YWRGcm9tTG93LCB0eXBlbmFtZSBTdG9yZVRvTG93Pgogdm9pZCBlbWl0UmFuZG9tVGh1bmtJbXBs
KEFzc2VtYmx5SGVscGVycyYgaml0LCBHUFJSZWcgc2NyYXRjaDAsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyLCBGUFJSZWcgcmVzdWx0LCBjb25zdCBMb2FkRnJvbUhpZ2gmIGxvYWRG
cm9tSGlnaCwgY29uc3QgU3RvcmVUb0hpZ2gmIHN0b3JlVG9IaWdoLCBjb25zdCBMb2FkRnJvbUxv
dyYgbG9hZEZyb21Mb3csIGNvbnN0IFN0b3JlVG9Mb3cmIHN0b3JlVG9Mb3cpCkBAIC00OTIsNiAr
NTE2LDE4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoSlMKICAgICBl
bWl0UmFuZG9tVGh1bmtJbXBsKCp0aGlzLCBzY3JhdGNoMCwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBy
ZXN1bHQsIGxvYWRGcm9tSGlnaCwgc3RvcmVUb0hpZ2gsIGxvYWRGcm9tTG93LCBzdG9yZVRvTG93
KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKFJlZ2lzdGVy
SUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3VyY2Us
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIGRlc3QpOworICAgIGxvYWRQdHIodm0oKS0+
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYmFzZSgpLCBzY3JhdGNoKTsKKyAgICBsb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgZGVzdCwgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQpLCBkZXN0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworICAg
IGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc291cmNlLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBkZXN0KTsKKyNlbmRpZgorfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdFJhbmRvbVRodW5rKEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCkKIHsKICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZWUsIHNjcmF0Y2gzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MTk5MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogI2Vu
ZGlmCiAgICAgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNsb2JiZXJzIG9mZnNldC4K
KyAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1Zh
bHVlUmVncyByZXN1bHQpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNy
Y1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTEyMDksMjkgKzEyMTIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcmd1bWVudHNTdGFydChjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoUmVn
aXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQotICAg
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc291cmNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBkZXN0KTsKLSAgICAg
ICAgbG9hZFB0cih2bSgpLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCksIHNjcmF0Y2gp
OwotICAgICAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgZGVz
dCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgIFVO
VVNFRF9QQVJBTShzY3JhdGNoKTsKLSAgICAgICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIGRlc3QpOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoQXNzZW1ibHlIZWxw
ZXJzJiBqaXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNj
cmF0Y2gpCi0gICAgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
ZGVzdCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKGppdC52bSgpLT5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5iYXNlKCksIHNjcmF0Y2gpOwotICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHNjcmF0Y2gsIGRlc3QsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
ZGVzdCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7Ci0gICAgICAgIGpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIGRlc3QpOwotI2VuZGlmCi0gICAgfQorICAgIHZvaWQgZW1pdExvYWRTdHJ1
Y3R1cmUoUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKTsKIAogICAgIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKFRydXN0ZWRJ
bW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uY3BwCShyZXZpc2lvbiAxOTkwMTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAordm9pZCBKU1ZhbHVlUmVnczo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
b3V0LnByaW50KG1fZ3ByKTsKKyNlbHNlCisgICAgb3V0LnByaW50KCIodGFnOiIsIHRhZ0dQUigp
LCAiLCBwYXlsb2FkOiIsIHBheWxvYWRHUFIoKSwgIikiKTsKKyNlbmRpZgorfQorCiAvLyBUaGlz
IGlzIGluIHRoZSAuY3BwIGZpbGUgdG8gd29yayBhcm91bmQgY2xhbmcgaXNzdWVzLgogI2lmIENQ
VShYODZfNjQpCiBjb25zdCBHUFJSZWcgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3Rl
ciA9IE1hY3JvQXNzZW1ibGVyOjpzX3NjcmF0Y2hSZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCB1c2VzKEdQUlJlZyBncHIpIGNvbnN0IHsgcmV0dXJuIG1fZ3By
ID09IGdwcjsgfQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IAogcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHI7CiB9OwpAQCAtMjAyLDYgKzIwNCw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgdXNlcyhHUFJSZWcgZ3ByKSBjb25zdCB7IHJldHVybiBtX3RhZ0dQ
UiA9PSBncHIgfHwgbV9wYXlsb2FkR1BSID09IGdwcjsgfQogICAgIAorICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBpbnQ4X3QgbV90YWdHUFI7
CiAgICAgaW50OF90IG1fcGF5bG9hZEdQUjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MSw2ICsxNjEsOCBAQCBzdGF0aWMg
dm9pZCByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoU3RyCiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VX
aXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciB0YXJnZXQpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0KTsKKyAgICAKICAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoMzJXaXRo
UGF0Y2goKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2gzMldpdGhQYXRj
aE9uQWRkcmVzcygKQEAgLTMxNSwxMyArMzE3LDE1IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgfQogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyID0KLSAgICAgICAgc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShjb2RlQmxv
Y2ssIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CisgICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgcHJvcGVy
dHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAotICAgIGlmICghY29kZVB0cikKKyAgICBpZiAo
cmVzdWx0LmdhdmVVcCgpKQogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIHJl
cGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7CisgICAgaWYgKHJlc3VsdC5tYWRlTm9D
aGFuZ2VzKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgcmVwbGFjZVdpdGhKdW1wKHN0dWJJbmZv
LCByZXN1bHQuY29kZSgpKTsKICAgICAKICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQpA
QCAtNDU3LDE2ICs0NjEsMTkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRAogICAgICAgICB9CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRlbnQsIFdURk1vdmUobmV3
Q2FzZSkpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0ID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKICAgICAKLSAg
ICBpZiAoIWNvZGVQdHIpCisgICAgaWYgKHJlc3VsdC5nYXZlVXAoKSkKICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgaWYgKHJlc3VsdC5tYWRlTm9DaGFuZ2VzKCkpCisgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29k
ZSgpKTsKICAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoc3R1YkluZm8pOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldCgKICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIpKTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIAogICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CiB9CkBAIC01MTQsMTMgKzUyMSwxNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6aW4oCiAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNj
ZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLSAgICBpZiAo
IWNvZGVQdHIpCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRlbnQsIFdURk1vdmUobmV3Q2FzZSkpOworICAgIGlm
IChyZXN1bHQuZ2F2ZVVwKCkpCiAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgIGlm
IChyZXN1bHQubWFkZU5vQ2hhbmdlcygpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OwogCisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKGNvZGVQdHIpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0
LmNvZGUoKSkpOwogICAgIAogICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbFRodW5rRm9yKFZNCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAgICBBc3NlbWJseUhlbHBlcnM6OmVtaXRM
b2FkU3RydWN0dXJlKGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Q0LCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgaml0LmVtaXRMb2FkU3RydWN0dXJlKEdQUkluZm86OnJlZ1QwLCBHUFJJ
bmZvOjpyZWdUNCwgR1BSSW5mbzo6cmVnVDEpOwogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAg
ICAgaml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTkw
MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Nyw3ICsxODcsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmlu
ZzsKICAgICB2KGJvb2wsIGZ0bENyYXNoZXMsIGZhbHNlLCBudWxscHRyKSAvKiBmb29sLXByb29m
IHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBlbmRlZCB1cCBpbiB0aGUgRlRMLiA7LSkgKi9cCiAg
ICAgdihib29sLCBjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCwgIUFTU0VSVF9ESVNBQkxF
RCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQWNjZXNzSW5saW5pbmcsIHRydWUsIG51bGxw
dHIpIFwKLSAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUsIDgsIG51bGxw
dHIpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUsIDEzLCBudWxs
cHRyKSBcCisgICAgdih1bnNpZ25lZCwgbWVnYW1vcnBoaWNMb2FkQ29zdCwgMTAsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIHVzZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbiwgdHJ1ZSwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZywgdHJ1ZSwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcsIHRydWUs
IG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkxLDYgKzE5MSwxMiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVJbk1lbW9yeSgp
OwogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogI2VuZGlmCisgICAgCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4U2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihQ
cm9wZXJ0eVRhYmxlLCBtX2luZGV4U2l6ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5kZXhNYXNrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5VGFibGUsIG1f
aW5kZXhNYXNrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eVRhYmxlLCBtX2luZGV4KTsgfQorCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7CiAKIHByaXZhdGU6CiAgICAg
UHJvcGVydHlUYWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CkBAIC0yNDQsNyAr
MjUwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFByb3BlcnR5T2Zm
c2V0Pj4gbV9kZWxldGVkT2Zmc2V0czsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNaW5p
bXVtVGFibGVTaXplID0gMTY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEVtcHR5RW50cnlJ
bmRleCA9IDA7CiB9OwogCiBpbmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlU
YWJsZTo6YmVnaW4oKQpAQCAtMjcyLDcgKzI3Nyw2IEBAIGlubGluZSBQcm9wZXJ0eVRhYmxlOjpm
aW5kX2l0ZXJhdG9yIFByb3AKICAgICBBU1NFUlQoa2V5KTsKICAgICBBU1NFUlQoa2V5LT5pc0F0
b21pYygpIHx8IGtleS0+aXNTeW1ib2woKSk7CiAgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aWZp
ZXJSZXBIYXNoOjpoYXNoKGtleSk7Ci0gICAgdW5zaWduZWQgc3RlcCA9IDA7CiAKICNpZiBEVU1Q
X1BST1BFUlRZTUFQX1NUQVRTCiAgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1G
aW5kczsKQEAgLTI4NSwxOSArMjg5LDE2IEBAIGlubGluZSBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0
ZXJhdG9yIFByb3AKICAgICAgICAgaWYgKGtleSA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5r
ZXkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoJnRhYmxlKClbZW50cnlJbmRl
eCAtIDFdLCBoYXNoICYgbV9pbmRleE1hc2spOwogCi0gICAgICAgIGlmICghc3RlcCkKLSAgICAg
ICAgICAgIHN0ZXAgPSBXVEY6OmRvdWJsZUhhc2goSWRlbnRpZmllclJlcEhhc2g6Omhhc2goa2V5
KSkgfCAxOwotCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICAgICArK3Byb3BlcnR5
TWFwSGFzaFRhYmxlU3RhdHMtPm51bUNvbGxpc2lvbnM7CiAjZW5kaWYKIAogI2lmIERVTVBfUFJP
UEVSVFlNQVBfQ09MTElTSU9OUwotICAgICAgICBkYXRhTG9nKCJQcm9wZXJ0eVRhYmxlIGNvbGxp
c2lvbiBmb3IgIiwga2V5LCAiICgiLCBoYXNoLCAiKSB3aXRoIHN0ZXAgIiwgc3RlcCwgIlxuIik7
CisgICAgICAgIGRhdGFMb2coIlByb3BlcnR5VGFibGUgY29sbGlzaW9uIGZvciAiLCBrZXksICIg
KCIsIGhhc2gsICIpXG4iKTsKICAgICAgICAgZGF0YUxvZygiQ29sbGlkZWQgd2l0aCAiLCB0YWJs
ZSgpW2VudHJ5SW5kZXggLSAxXS5rZXksICIoIiwgSWRlbnRpZmllclJlcEhhc2g6Omhhc2godGFi
bGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KSwgIilcbiIpOwogI2VuZGlmCiAKLSAgICAgICAgaGFz
aCArPSBzdGVwOworICAgICAgICBoYXNoKys7CiAgICAgfQogfQogCkBAIC0zMTAsNyArMzExLDYg
QEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydAogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHVuc2lnbmVkIGhhc2ggPSBJZGVudGlmaWVyUmVwSGFzaDo6aGFz
aChrZXkpOwotICAgIHVuc2lnbmVkIHN0ZXAgPSAwOwogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9T
VEFUUwogICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtTG9va3VwczsKQEAgLTMy
Nyw5ICszMjcsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6VmFsdWVUeXBlKiBQcm9wZXJ0CiAg
ICAgICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+bnVtTG9va3VwUHJvYmluZzsKICNl
bmRpZgogCi0gICAgICAgIGlmICghc3RlcCkKLSAgICAgICAgICAgIHN0ZXAgPSBXVEY6OmRvdWJs
ZUhhc2goSWRlbnRpZmllclJlcEhhc2g6Omhhc2goa2V5KSkgfCAxOwotICAgICAgICBoYXNoICs9
IHN0ZXA7CisgICAgICAgIGhhc2grKzsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIw
LDYgKzQyMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgcHJvcGVydHlUYWJsZVVu
c2FmZU9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKKyAgICB9CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mKTsKICAgICAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
OTkwMTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNiBAQAorMjAxNi0wNC0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIFBvbHltb3JwaGljQWNjZXNzIHNob3VsZCBoYXZlIGEgTWVnYW1vcnBoaWNMb2FkIGNh
c2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjE4
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMv
cmVncmVzcy9tZWdhbW9ycGhpYy1sb2FkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9tZWdhbW9ycGhpYy1sb2FkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL21lZ2Ftb3JwaGljLWxvYWQuanM6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc3RyaW5nLXJlcGVhdC1ub3QtcmVzb2x2aW5nLW5vLWlubGluZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc3RyaW5nLXJlcGVhdC1ub3QtcmVz
b2x2aW5nLW5vLWlubGluZS5odG1sOiBBZGRlZC4KKwogMjAxNi0wNC0wNCAgUnlhbiBIYWRkYWQg
IDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJraW5nIHBsdWdpbnMvZm9jdXMu
aHRtbCBhcyBmbGFreSBvbiBtYWMKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWVnYW1v
cnBoaWMtbG9hZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9tZWdhbW9ycGhpYy1sb2FkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvbWVnYW1vcnBoaWMtbG9hZC1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL21lZ2Ftb3JwaGljLWxvYWQKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWVnYW1vcnBoaWMtbG9hZC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWVnYW1vcnBoaWMtbG9hZC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tZWdhbW9ycGhpYy1sb2FkLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvbWVnYW1vcnBoaWMtbG9hZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmluZy1yZXBlYXQtbm90
LXJlc29sdmluZy1uby1pbmxpbmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc3RyaW5nLXJlcGVhdC1ub3QtcmVzb2x2aW5nLW5vLWlubGluZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmluZy1y
ZXBlYXQtbm90LXJlc29sdmluZy1uby1pbmxpbmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zdHJpbmctcmVwZWF0LW5vdC1yZXNvbHZpbmct
bm8taW5saW5lCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2Vw
dGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmluZy1yZXBlYXQtbm90LXJl
c29sdmluZy1uby1pbmxpbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3N0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZy1uby1pbmxpbmUuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyaW5nLXJlcGVhdC1ub3QtcmVzb2x2aW5n
LW5vLWlubGluZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N0cmluZy1yZXBlYXQtbm90
LXJlc29sdmluZy1uby1pbmxpbmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWVnYW1vcnBoaWMtbG9hZC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tZWdh
bW9ycGhpYy1sb2FkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvbWVnYW1vcnBoaWMtbG9hZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIG8gPSB7fTsKKyAgICAgICAgb1si
aSIgKyBpXSA9IGk7CisgICAgICAgIG8uZiA9IDQyOworICAgICAgICBhcnJheS5wdXNoKG8pOwor
ICAgIH0KKyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gYXJyYXlbaSAlIGFycmF5Lmxlbmd0aF0uZjsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKKyAgICB9Cit9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275676</attachid>
            <date>2016-04-05 11:07:33 -0700</date>
            <delta_ts>2016-04-05 12:48:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47867</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBA
QAorMjAxNi0wNC0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzIHNob3VsZCBoYXZlIGEgTWVnYW1vcnBoaWNMb2FkIGNhc2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjE4MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9k
dWNlcyBhIG5ldyBjYXNlIHRvIFBvbHltb3JwaGljQWNjZXNzIGNhbGxlZCBNZWdhbW9ycGhpY0xv
YWQuIFRoaXMgaW5saW5lcyB0aGUgbG9va3VwIGluCisgICAgICAgIHRoZSBQcm9wZXJ0eVRhYmxl
LiBJdCdzIGNoZWFwZXIgdGhhbiBzd2l0Y2hpbmcgb24gYSBodWdlIG51bWJlciBvZiBjYXNlcyBh
bmQgaXQncyBjaGVhcGVyIHRoYW4KKyAgICAgICAgY2FsbGluZyBpbnRvIEMrKyB0byBkbyB0aGUg
c2FtZSBqb2IgLSBwYXJ0aWN1bGFybHkgc2luY2UgaW5saW5pbmcgdGhlIGxvb2t1cCBpbnRvIGFu
IGFjY2VzcyBtZWFucworICAgICAgICB0aGF0IHdlIGNhbiBwcmVjb21wdXRlIHRoZSBoYXNoIGNv
ZGUuCisKKyAgICAgICAgV2hlbiB3cml0aW5nIHRoZSBpbmxpbmUgY29kZSBmb3IgdGhlIGhhc2h0
YWJsZSBsb29rdXAsIEkgZm91bmQgdGhhdCBvdXIgaGFzaGluZyBhbGdvcml0aG0gd2FzIG5vdAor
ICAgICAgICBvcHRpbWFsLiBJdCB1c2VkIGEgZG91YmxlLWhhc2hpbmcgbWV0aG9kIGZvciByZWR1
Y2luZyBjb2xsaXNpb24gcGF0aG9sb2dpZXMuIFRoaXMgaXMgZ3JlYXQgZm9yCisgICAgICAgIGlt
cHJvdmluZyB0aGUgcGVyZm9ybWFuY2Ugb2Ygc29tZSB3b3JzdC1jYXNlIHNjZW5hcmlvcy4gQnV0
IHRoaXMgbWlzc2VzIHRoZSBwb2ludCBvZiBhIGhhc2h0YWJsZTogd2UKKyAgICAgICAgd2FudCB0
byBvcHRpbWl6ZSB0aGUgYXZlcmFnZS1jYXNlIHBlcmZvcm1hbmNlLiBXaGVuIG9wdGltaXppbmcg
Zm9yIGF2ZXJhZ2UtY2FzZSwgd2UgY2FuIGNob29zZSB0bworICAgICAgICBlaXRoZXIgZm9jdXMg
b24gbWF4aW1pemluZyB0aGUgbGlrZWxpaG9vZCBvZiB0aGUgZmFzdCBjYXNlIGhhcHBlbmluZywg
b3IgdG8gbWluaW1pemUgdGhlIGNvc3Qgb2YgdGhlCisgICAgICAgIHdvcnN0LWNhc2UsIG9yIHRv
IG1pbmltaXplIHRoZSBjb3N0IG9mIHRoZSBmYXN0IGNhc2UuIEV2ZW4gYSB2ZXJ5IGJhc2ljIGhh
c2h0YWJsZSB3aWxsIGFjaGlldmUgYSBoaWdoCisgICAgICAgIHByb2JhYmlsaXR5IG9mIGhpdHRp
bmcgdGhlIGZhc3QgY2FzZS4gU28sIGRvaW5nIHdvcmsgdG8gcmVkdWNlIHRoZSBsaWtlbGlob29k
IG9mIGEgd29yc3QtY2FzZQorICAgICAgICBwYXRob2xvZ3kgb25seSBtYWtlcyBzZW5zZSBpZiBp
dCBhbHNvIHByZXNlcnZlcyB0aGUgZ29vZCBwZXJmb3JtYW5jZSBvZiB0aGUgZmFzdCBjYXNlLCBv
ciByZWR1Y2VzIHRoZQorICAgICAgICBsaWtlbGlob29kIG9mIHRoZSB3b3JzdC1jYXNlIGJ5IHNv
IG11Y2ggdGhhdCBpdCdzIGEgd2luIGZvciB0aGUgYXZlcmFnZSBjYXNlIGV2ZW4gd2l0aCBhIHNs
b3ctZG93biBpbgorICAgICAgICB0aGUgZmFzdCBjYXNlLgorCisgICAgICAgIEkgZG9uJ3QgYmVs
aWV2ZSwgYmFzZWQgb24gbG9va2luZyBhdCBob3cgdGhlIGRvdWJsZS1oYXNoaW5nIGlzIGltcGxl
bWVudGVkLCB0aGF0IGl0J3MgcG9zc2libGUgdGhhdAorICAgICAgICB0aGlzIHByZXNlcnZlcyB0
aGUgZ29vZCBwZXJmb3JtYW5jZSBvZiB0aGUgZmFzdCBjYXNlLiBJdCByZXF1aXJlcyBhdCBsZWFz
dCBvbmUgbW9yZSB2YWx1ZSB0byBiZSBsaXZlCisgICAgICAgIGFyb3VuZCB0aGUgbG9vcCwgYW5k
IGRyYW1hdGljYWxseSBpbmNyZWFzZXMgdGhlIHJlZ2lzdGVyIHByZXNzdXJlIGF0IGtleSBwb2lu
dHMgaW5zaWRlIHRoZSBsb29wLiBUaGUKKyAgICAgICAgYmlnZ2VzdCBvZmZlbmRlciBpcyB0aGUg
ZG91YmxlSGFzaCgpIG1ldGhvZCBpdHNlbGYuIFRoZXJlIGlzIG5vIGdldHRpbmcgYXJvdW5kIGhv
dyBiYWQgdGhpcyBpczogaWYKKyAgICAgICAgdGhlIGNvbXBpbGVyIGxpdmUtcmFuZ2Utc3BsaXRz
IHRoYXQgbWV0aG9kIHRvIGRlYXRoIHRvIGF2b2lkIGRlZ3JhZGluZyByZWdpc3RlciBwcmVzc3Vy
ZSBlbHNld2hlcmUKKyAgICAgICAgdGhlbiB3ZSB3aWxsIHBheSBhIHN0ZWVwIHByaWNlIGFueXRp
bWUgd2UgdGFrZSB0aGUgc2Vjb25kIGl0ZXJhdGlvbiBhcm91bmQgdGhlIGxvb3A7IGJ1dCBpZiB0
aGUKKyAgICAgICAgY29tcGlsZXIgZG9lc24ndCBzcGxpdCBhcm91bmQgdGhlIGNhbGwgdGhlbiB0
aGUgaGFzaHRhYmxlIGxvb2t1cCBmYXN0IHBhdGggd2lsbCBiZSBmdWxsIG9mIHNwaWxscyBvbgor
ICAgICAgICBzb21lIGFyY2hpdGVjdHVyZXMgKEkgcGVyZm9ybWVkIGJpb2xvZ2ljYWwgcmVnaXN0
ZXIgYWxsb2NhdGlvbiBhbmQgZm91bmQgdGhhdCBJIG5lZWRlZCA5IHJlZ2lzdGVycworICAgICAg
ICBmb3IgY29tcGxldGUgbG9va3VwLCB3aGlsZSB4ODYtNjQgaGFzIG9ubHkgNiBjYWxsZWUtc2F2
ZXM7IE9UT0ggQVJNNjQgaGFzIDEwIGNhbGxlZS1zYXZlcyBzbyBpdCBtaWdodAorICAgICAgICBi
ZSBiZXR0ZXIgb2ZmKS4KKworICAgICAgICBIZW5jZSwgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBo
YXNodGFibGUgbG9va3VwIHRvIHVzZSBzaW1wbGUgbGluZWFyIHByb2JpbmcuIFRoaXMgd2FzIG5v
dCBhIHNsb3ctZG93bgorICAgICAgICBvbiBhbnl0aGluZywgYW5kIGl0IG1hZGUgTWVnYW1vcnBo
aWNMb2FkIG11Y2ggbW9yZSBzZW5zaWJsZSBzaW5jZSBpdCBpcyBsZXNzIGxpa2VseSB0byBoYXZl
IHRvIHNwaWxsLgorCisgICAgICAgIFRoZXJlIGFyZSBzb21lIG90aGVyIHNtYWxsIGNoYW5nZXMg
aW4gdGhpcyBwYXRjaCwgbGlrZSByYXRpb25hbGl6aW5nIHRoZSBJQydzIGNob2ljZSBiZXR3ZWVu
IGdpdmluZworICAgICAgICB1cCBhZnRlciBhIHJlcGF0Y2ggKGkuZS4gbmV2ZXIgdHJ5aW5nIGFn
YWluKSBhbmQganVzdCBwcmV0ZW5kaW5nIHRoYXQgbm90aGluZyBoYXBwZW5lZCAoc28gd2UgY2Fu
CisgICAgICAgIHRyeSB0byByZXBhdGNoIGFnYWluIGluIHRoZSBmdXR1cmUpLiBJdCBsb29rZWQg
bGlrZSB0aGUgY29kZSBpbiBSZXBhdGNoLmNwcCB3YXMgc2V0IHVwIHRvIGJlIGFibGUgdG8KKyAg
ICAgICAgY2hvb3NlIGJldHdlZW4gdGhvc2Ugb3B0aW9ucywgYnV0IHdlIHdlcmVuJ3QgZnVsbHkg
dGFraW5nIGFkdmFudGFnZSBvZiBpdCBiZWNhdXNlIHRoZQorICAgICAgICByZWdlbmVyYXRlV2l0
aENhc2UoKSBtZXRob2QganVzdCByZXR1cm5lZCBudWxsIGZvciBhbnkgZmFpbHVyZSwgYW5kIGRp
ZG4ndCBzYXkgd2hldGhlciBpdCB3YXMgdGhlCisgICAgICAgIHNvcnQgb2YgZmFpbHVyZSB0aGF0
IHJlbmRlcnMgdGhlIGlubGluZSBjYWNoZSB1bnJlcGF0Y2hhYmxlIChsaWtlIG1lbW9yeSBhbGxv
Y2F0aW9uIGZhaWx1cmUpLiBOb3cKKyAgICAgICAgdGhpcyBpcyBhbGwgbWFkZSBleHBsaWNpdC4g
SSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGhhcHBlbmVkIGluIHRoaXMgcGF0Y2gg
c2luY2UgdGhlCisgICAgICAgIE1lZ2Ftb3JwaGljTG9hZCBjb2RlIGF1dG9tYWdpY2FsbHkgZ2Vu
ZXJhdGVzIGEgTWVnYW1vcnBoaWNMb2FkIGNhc2UgYnkgY29hbGVzY2luZyBvdGhlciBjYXNlcy4g
U2luY2UKKyAgICAgICAgdGhpcyBpcyBpbnRlbmRlZCB0byBhdm9pZCBibG93aW5nIG91dCB0aGUg
Y2FjaGUgYW5kIG1ha2luZyBpdCB1bnJlcGF0Y2hhYmxlLCBJIHdhbnRlZCB0byBtYWtlIHN1cmUK
KyAgICAgICAgdGhhdCB0aGUgcnVsZXMgZm9yIGdpdmluZyB1cCB3ZXJlIHNvbWV0aGluZyB0aGF0
IG1hZGUgc2Vuc2UgdG8gbWUuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgYmlnIHdpbiBv
biBtaWNyb2JlbmNobWFya3MuIEknbSBub3QgZG9uZSBydW5uaW5nIGJpZ2dlciBiZW5jaG1hcmtz
IHlldC4KKworICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmdldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZCk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmNvdWxkU3RpbGxTdWNjZWVkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuQmVS
ZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2Fu
UmVwbGFjZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0FjY2Vzczo6flBvbHltb3JwaGljQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNBY2Nlc3M6OnJlZ2VuZXJhdGVXaXRoQ2FzZXMpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5h
bCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6aXNHZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc1B1dCk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzSW4pOgorICAgICAgICAoSlNDOjpBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0OjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0OjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJh
dGlvblJlc3VsdDo6a2luZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6
OmNvZGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjptYWRlTm9DaGFu
Z2VzKToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6Z2F2ZVVwKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6Z2VuZXJhdGVkTmV3Q29kZSk6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmFib3V0VG9EaWUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6
YWRkQWNjZXNzQ2FzZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OmVtaXRSYW5k
b21UaHVua0ltcGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21U
aHVuayk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpsb2FkVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6Om1v
dmVWYWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0
YXJ0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVX
aXRoVHlwZUluZm8pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3Ry
dWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvR1BSSW5mby5jcHA6CisgICAgICAgIChK
U0M6OkpTVmFsdWVSZWdzOjpkdW1wKToKKyAgICAgICAgKiBqaXQvR1BSSW5mby5oOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlUmVnczo6dXNlcyk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgor
ICAgICAgICAoSlNDOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdl
dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0
cnlSZXBhdGNoSW4pOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAg
ICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlUYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpmaW5k
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorCiAyMDE2LTA0LTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxOTg3OTIpOiBbR1RLXSBJbnNw
ZWN0b3IgY3Jhc2hlcyBpbiBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSBzaW5jZSByMTk4NzkyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDYsNiArNDYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBjb25z
dCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAordm9pZCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7Cisg
ICAgaWYgKG1fY29kZSkKKyAgICAgICAgb3V0LnByaW50KCI6IiwgbV9jb2RlKTsKK30KKwogV2F0
Y2hwb2ludCogQWNjZXNzR2VuZXJhdGlvblN0YXRlOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24pCiB7CiAgICAgcmV0dXJuIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKQEAg
LTE3NSw2ICsxODIsMjEgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6
OgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBB
Y2Nlc3NDYXNlOjptZWdhbW9ycGhpY0xvYWQoVk0mIHZtLCBKU0NlbGwqIG93bmVyKQoreworICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICAKKyAgICBp
ZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA5KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nl
c3NDYXNlKCkpOworICAgIAorICAgIHJlc3VsdC0+bV90eXBlID0gTWVnYW1vcnBoaWNMb2FkOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBBY2Nlc3NDYXNlOjpyZXBsYWNlKAogICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKQEAgLTMyMiw2ICszNDQs
NyBAQCBib29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBNZWdhbW9ycGhp
Y0xvYWQ6CiAgICAgY2FzZSBBcnJheUxlbmd0aDoKICAgICBjYXNlIFN0cmluZ0xlbmd0aDoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQyLDkgKzM2NSwyMSBAQCBib29sIEFjY2Vzc0Nhc2U6
OmNvdWxkU3RpbGxTdWNjZWVkKCkgY29uCiAgICAgcmV0dXJuIG1fY29uZGl0aW9uU2V0LnN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CiB9
CiAKLWJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikK
K2Jvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdHlwZSgpID09IExvYWQKKyAgICAgICAgJiYgIXZpYVByb3h5KCkKKyAg
ICAgICAgJiYgY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpCisgICAgICAgICYmICFhZGRpdGlvbmFs
U2V0KCkKKyAgICAgICAgJiYgIWN1c3RvbVNsb3RCYXNlKCk7Cit9CisKK2Jvb2wgQWNjZXNzQ2Fz
ZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKIHsKICAgICAvLyBX
ZSBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgaGVyZSwgYnV0IGZvciBub3cgd2UganVzdCBkbyBzb21l
dGhpbmcgb2J2aW91cy4KKyAgICAKKyAgICBpZiAodHlwZSgpID09IE1lZ2Ftb3JwaGljTG9hZCAm
JiBvdGhlci5jYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBpZiAoIWd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1
YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkpIHsKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIQpAQCAtNDA3LDE3ICs0NDIsMjUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0JiBmYWxsVGhyb3VnaCkKIHsKICAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5q
aXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gKnN0YXRlLmlkZW50OworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0
ZS5zdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0odm0pOwogCiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CiAgICAgICAgIEFT
U0VSVCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0YXRlLnNj
cmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ZmFsbFRocm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHN0YXRlLnNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
KSkpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNo
VGVzdDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc3RhdGUuc2NyYXRj
aEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spKSk7Cisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC00MjYsMzMgKzQ2OSwxNDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdp
dGhHdWFyZCgKICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJy
YW5jaDgoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBNZWdhbW9ycGhpY0xvYWQ6IHsKKyAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIGtleSA9IGlkZW50LmltcGwoKTsKKyAgICAgICAgdW5zaWduZWQg
aGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKGtleSk7CisgICAgICAgIAorICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdp
c3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VUYWdHUFIpKTsKKyNlbmRpZgorICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKyAgICAgICAg
CisgICAgICAgIEdQUlJlZyBpbnRlcm1lZGlhdGVHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICBH
UFJSZWcgbWFza0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
R1BSUmVnIG1hc2tlZEhhc2hHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Cisg
ICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
KyAgICAgICAgR1BSUmVnIG9mZnNldEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCJiYXNlR1BSID0gIiwgYmFzZUdQUiwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJ2YWx1
ZVJlZ3MgPSAiLCB2YWx1ZVJlZ3MsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygic2NyYXRj
aEdQUiA9ICIsIHNjcmF0Y2hHUFIsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiaW50ZXJt
ZWRpYXRlR1BSID0gIiwgaW50ZXJtZWRpYXRlR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coIm1hc2tHUFIgPSAiLCBtYXNrR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIm1h
c2tlZEhhc2hHUFIgPSAiLCBtYXNrZWRIYXNoR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coImluZGV4R1BSID0gIiwgaW5kZXhHUFIsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygi
b2Zmc2V0R1BSID0gIiwgb2Zmc2V0R1BSLCAiXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQor
ICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGpp
dCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0Nh
bGwpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbXlGYWlsQW5kSWdub3JlOwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG15RmFsbFRocm91Z2g7CisgICAgICAgIAor
ICAgICAgICBqaXQuZW1pdExvYWRTdHJ1Y3R1cmUoYmFzZUdQUiwgaW50ZXJtZWRpYXRlR1BSLCBt
YXNrR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoaW50ZXJtZWRpYXRlR1BSLCBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGVVbnNhZmVP
ZmZzZXQoKSksCisgICAgICAgICAgICBpbnRlcm1lZGlhdGVHUFIpOworICAgICAgICAKKyAgICAg
ICAgbXlGYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Olplcm8sIGludGVybWVkaWF0ZUdQUikpOworICAgICAgICAKKyAgICAgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoaW50ZXJtZWRpYXRlR1BSLCBQcm9wZXJ0eVRhYmxlOjpvZmZz
ZXRPZkluZGV4TWFzaygpKSwgbWFza0dQUik7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIsIFByb3BlcnR5VGFibGU6Om9mZnNldE9mSW5k
ZXgoKSksIGluZGV4R1BSKTsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIsIFByb3BlcnR5VGFibGU6Om9mZnNldE9m
SW5kZXhTaXplKCkpLAorICAgICAgICAgICAgaW50ZXJtZWRpYXRlR1BSKTsKKworICAgICAgICBq
aXQubW92ZShtYXNrR1BSLCBtYXNrZWRIYXNoR1BSKTsKKyAgICAgICAgaml0LmFuZDMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGhhc2gpLCBtYXNrZWRIYXNoR1BSKTsKKyAgICAgICAgaml0
LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIpLCBpbnRlcm1lZGlhdGVHUFIp
OworICAgICAgICBqaXQuYWRkUHRyKGluZGV4R1BSLCBpbnRlcm1lZGlhdGVHUFIpOworICAgICAg
ICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShsb29wKTsKKyAgICAgICAgCisgICAgICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoaW5kZXhHUFIsIG1hc2tlZEhhc2hHUFIsIENDYWxsSGVscGVy
czo6VGltZXNGb3VyKSwgb2Zmc2V0R1BSKTsKKyAgICAgICAgCisgICAgICAgIG15RmFsbFRocm91
Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6RXF1YWwsCisgICAgICAgICAgICAgICAgb2Zmc2V0R1BSLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByb3BlcnR5VGFibGU6OkVtcHR5RW50
cnlJbmRleCkpKTsKKyAgICAgICAgCisgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgb2Zmc2V0R1BSKTsKKyAgICAgICAgaml0Lm11bDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHNpemVvZihQcm9wZXJ0eU1hcEVudHJ5KSksIG9mZnNldEdQUiwgb2Zm
c2V0R1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihpbnRlcm1lZGlhdGVHUFIsIG9mZnNldEdQUik7
CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29sbGlzaW9uID0gIGppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9mZnNldEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3Bl
cnR5TWFwRW50cnksIGtleSkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGtleSkpOworICAgICAgICAKKyAgICAgICAgLy8gb2Zmc2V0R1BSIGN1cnJlbnRseSBob2xk
cyBhIHBvaW50ZXIgdG8gdGhlIFByb3BlcnR5TWFwRW50cnksIHdoaWNoIGhhcyB0aGUgb2Zmc2V0
IGFuZCBhdHRyaWJ1dGVzLgorICAgICAgICAvLyBDaGVjayB0aGVtIGFuZCB0aGVuIGF0dGVtcHQg
dGhlIGxvYWQuCisgICAgICAgIAorICAgICAgICBteUZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAg
ICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhvZmZzZXRHUFIs
IE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eU1hcEVudHJ5LCBhdHRyaWJ1dGVzKSksCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQWNjZXNzb3IgfCBDdXN0b21BY2Nl
c3NvcikpKTsKKyAgICAgICAgCisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG9mZnNldEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5TWFwRW50cnksIG9mZnNldCkp
LCBvZmZzZXRHUFIpOworICAgICAgICAKKyAgICAgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlR1BS
LCBvZmZzZXRHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIAorICAgICAgICBhbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAg
ICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICAKKyAgICAgICAgY29sbGlzaW9uLmxpbmsoJmpp
dCk7CisKKyAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBt
YXNrZWRIYXNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBiZSBz
bWFydGVyIGFib3V0IHRoaXMuIEN1cnJlbnRseSB3ZSdyZSBidXJuaW5nIGEgR1BSIGZvciB0aGUg
bWFzay4gQnV0IGxvb3BpbmcKKyAgICAgICAgLy8gYXJvdW5kIGlzbid0IHN1cGVyIGNvbW1vbiBz
byB3ZSBjb3VsZCwgZm9yIGV4YW1wbGUsIHJlY29tcHV0ZSB0aGUgbWFzayBmcm9tIHRoZSBkaWZm
ZXJlbmNlIGJldHdlZW4KKyAgICAgICAgLy8gdGhlIHRhYmxlIGFuZCBpbmRleC4gQnV0IGJlZm9y
ZSB3ZSBkbyB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBtYWtlIGl0IGVhc2llciB0byBtdWx0aXBs
eSBhbmQKKyAgICAgICAgLy8gZGl2aWRlIGJ5IHRoZSBzaXplIG9mIFByb3BlcnR5TWFwRW50cnku
IFRoYXQgcHJvYmFibHkgaW52b2x2ZXMgbWFraW5nIFByb3BlcnR5TWFwRW50cnkgYmUgYXJyYW5n
ZWQKKyAgICAgICAgLy8gdG8gaGF2ZSBhIHBvd2VyLW9mLTIgc2l6ZS4KKyAgICAgICAgaml0LmFu
ZDMyKG1hc2tHUFIsIG1hc2tlZEhhc2hHUFIpOworICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhs
b29wLCAmaml0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdp
c3RlcnMoKSkgeworICAgICAgICAgICAgbXlGYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7CisgICAg
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHBy
ZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBteUZhbGxUaHJvdWdoLmxpbmso
JmppdCk7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRJZ25vcmUuYXBwZW5kKG15RmFpbEFuZElnbm9yZSk7CisgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQobXlGYWxsVGhyb3VnaCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKICAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCiAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBl
KSkpOwogCi0gICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3RhdGUuYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAot
ICAgICAgICAgICAgICAgIHN0YXRlLnNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKICAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAogICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RhdGUuc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAg
ICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0YXRlLmJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTA5MSw3ICsxMjQ4LDE0IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKIAogICAgICAgICBlbWl0SW50cmlu
c2ljR2V0dGVyKHN0YXRlKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0gfQorICAgIH0KKyAgICAK
KyAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBo
YW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRoZSBndWFyZCBpcyBwYXJ0IG9m
IHRoZSBtZWdhbW9ycGhpYyBsb2FkCisgICAgICAgIC8vIGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1
cmUgdGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRlKCkgZGlyZWN0bHkgZm9yIE1lZ2Ftb3Jw
aGljTG9hZCBzaW5jZQorICAgICAgICAvLyBNZWdhbW9ycGhpY0xvYWQgaXMgbm90IGd1YXJkZWQg
YnkgYSBzdHJ1Y3R1cmUgY2hlY2suCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkBA
IC0xMDk5LDcgKzEyNjMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVy
YXRpCiBQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIFBvbHltb3Jw
aGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlV2l0aENhc2VzKAorQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZVdpdGhDYXNlcygKICAgICBW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4+IG9yaWdpbmFsQ2FzZXNUb0FkZCkKIHsKQEAgLTExMTQsOCArMTI3OCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAvLyAgIGFuZCB0aGUg
cHJldmlvdXMgc3R1YiBhcmUga2VwdCBpbnRhY3QgYW5kIHRoZSBuZXcgY2FzZXMgYXJlIGRlc3Ry
b3llZC4gSXQncyBPSyB0byBhdHRlbXB0IHRvCiAgICAgLy8gICBhZGQgbW9yZSB0aGluZ3MgYWZ0
ZXIgZmFpbHVyZS4KICAgICAKLSAgICAvLyBGaXJzdCwgdmVyaWZ5IHRoYXQgd2UgY2FuIGdlbmVy
YXRlIGNvZGUgZm9yIGFsbCBvZiB0aGUgbmV3IGNhc2VzIHdoaWxlIGVsaW1pbmF0aW5nIGFueSBv
ZiB0aGUKLSAgICAvLyBuZXcgY2FzZXMgdGhhdCByZXBsYWNlIGVhY2ggb3RoZXIuCisgICAgLy8g
Rmlyc3QgZW5zdXJlIHRoYXQgdGhlIG9yaWdpbmFsQ2FzZXNUb0FkZCBkb2Vzbid0IGNvbnRhaW4g
ZHVwbGljYXRlcy4KICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+PiBjYXNl
c1RvQWRkOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbENhc2VzVG9BZGQu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG15Q2Fz
ZSA9IFdURk1vdmUob3JpZ2luYWxDYXNlc1RvQWRkW2ldKTsKQEAgLTExNDIsNyArMTMwNSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAvLyBuZXcgc3R1
YiB0aGF0IHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBvbGQgb25lLiBSZXR1cm5pbmcgbnVsbCBz
aG91bGQgdGVsbCB0aGUgY2FsbGVyIHRvIGp1c3QKICAgICAvLyBrZWVwIGRvaW5nIHdoYXQgdGhl
eSB3ZXJlIGRvaW5nIGJlZm9yZS4KICAgICBpZiAoY2FzZXNUb0FkZC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQ6Ok1hZGVOb0NoYW5nZXM7CiAKICAgICAvLyBOb3cgY29uc3RydWN0
IHRoZSBsaXN0IG9mIGNhc2VzIGFzIHRoZXkgc2hvdWxkIGFwcGVhciBpZiB3ZSBhcmUgc3VjY2Vz
c2Z1bC4gVGhpcyBtZWFucyBwdXR0aW5nCiAgICAgLy8gYWxsIG9mIHRoZSBwcmV2aW91cyBjYXNl
cyBpbiB0aGlzIGxpc3QgaW4gb3JkZXIgYnV0IGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZSBy
ZXBsYWNlZCwgYW5kCkBAIC0xMTcxLDIyICsxMzM0LDQzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBQb2x5bW9ycGhpY0FjY2VzczoKIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9n
KCJuZXdDYXNlczogIiwgbGlzdER1bXAobmV3Q2FzZXMpLCAiXG4iKTsKKyAgICAKKyAgICAvLyBT
ZWUgaWYgd2UgYXJlIGNsb3NlIHRvIGhhdmluZyB0b28gbWFueSBjYXNlcyBhbmQgaWYgc29tZSBv
ZiB0aG9zZSBjYXNlcyBjYW4gYmUgc3Vic3VtZWQgYnkgYQorICAgIC8vIG1lZ2Ftb3JwaGljIGxv
YWQuCisgICAgaWYgKG5ld0Nhc2VzLnNpemUoKSA+PSBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50
TGlzdFNpemUoKSkgeworICAgICAgICB1bnNpZ25lZCBudW1TZWxmTG9hZHMgPSAwOworICAgICAg
ICBmb3IgKGF1dG8mIG5ld0Nhc2UgOiBuZXdDYXNlcykgeworICAgICAgICAgICAgaWYgKG5ld0Nh
c2UtPmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpKQorICAgICAgICAgICAgICAgIG51
bVNlbGZMb2FkcysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobnVtU2VsZkxv
YWRzID49IE9wdGlvbnM6Om1lZ2Ftb3JwaGljTG9hZENvc3QoKSkgeworICAgICAgICAgICAgaWYg
KGF1dG8gbWVnYSA9IEFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZCh2bSwgY29kZUJsb2NrKSkg
eworICAgICAgICAgICAgICAgIG5ld0Nhc2VzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiYgbmV3Q2FzZSkgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3Q2FzZS0+Y2FuQmVSZXBs
YWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5ld0Nhc2VzLmFwcGVuZChXVEZNb3ZlKG1lZ2Ep
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChuZXdDYXNlcy5z
aXplKCkgPiBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUoKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIlRvbyBtYW55IGNhc2VzLlxuIik7Ci0g
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgcmV0dXJuIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdhdmVVcDsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcmVzdWx0ID0gcmVnZW5lcmF0ZSh2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgaWRl
bnQsIG5ld0Nhc2VzKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpOworICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6
R2F2ZVVwOwogCiAgICAgbV9saXN0ID0gV1RGTW92ZShuZXdDYXNlcyk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlV2l0aENhc2UoCitBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNz
OjpyZWdlbmVyYXRlV2l0aENhc2UoCiAgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3QWNjZXNzKQogewpAQCAtMTQwMywxMiAr
MTU4NywzMiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6
OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQ6Ok1hZGVOb0NoYW5nZXM6CisgICAgICAgIG91dC5wcmludCgiTWFkZU5vQ2hh
bmdlcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
OjpHYXZlVXA6CisgICAgICAgIG91dC5wcmludCgiR2F2ZVVwIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OkdlbmVyYXRlZE5ld0NvZGU6CisgICAg
ICAgIG91dC5wcmludCgiR2VuZXJhdGVkTmV3Q29kZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGUp
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpMb2FkOgogICAg
ICAgICBvdXQucHJpbnQoIkxvYWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWNjZXNz
Q2FzZTo6TWVnYW1vcnBoaWNMb2FkOgorICAgICAgICBvdXQucHJpbnQoIk1lZ2Ftb3JwaGljTG9h
ZCIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOgog
ICAgICAgICBvdXQucHJpbnQoIlRyYW5zaXRpb24iKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmgJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDYgKzUzLDcgQEAgY2xh
c3MgQWNjZXNzQ2FzZSB7CiBwdWJsaWM6CiAgICAgZW51bSBBY2Nlc3NUeXBlIHsKICAgICAgICAg
TG9hZCwKKyAgICAgICAgTWVnYW1vcnBoaWNMb2FkLAogICAgICAgICBUcmFuc2l0aW9uLAogICAg
ICAgICBSZXBsYWNlLAogICAgICAgICBNaXNzLApAQCAtODEsNiArODIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgSW5NaXNzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBj
YXNlIExvYWQ6CisgICAgICAgIGNhc2UgTWVnYW1vcnBoaWNMb2FkOgogICAgICAgICBjYXNlIE1p
c3M6CiAgICAgICAgIGNhc2UgR2V0dGVyOgogICAgICAgICBjYXNlIEN1c3RvbVZhbHVlR2V0dGVy
OgpAQCAtOTYsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKICAg
ICAgICAgY2FzZSBNaXNzOgogICAgICAgICBjYXNlIEdldHRlcjoKICAgICAgICAgY2FzZSBDdXN0
b21WYWx1ZUdldHRlcjoKQEAgLTExOSw2ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIE1lZ2Ft
b3JwaGljTG9hZDoKICAgICAgICAgY2FzZSBNaXNzOgogICAgICAgICBjYXNlIEdldHRlcjoKICAg
ICAgICAgY2FzZSBDdXN0b21WYWx1ZUdldHRlcjoKQEAgLTE0NSw3ICsxNDksOSBAQCBwdWJsaWM6
CiAgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLAogICAgICAg
ICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIsCiAgICAgICAgIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOwotCisgICAgCisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBtZWdhbW9ycGhpY0xvYWQoVk0mLCBKU0NlbGwqIG93bmVyKTsK
KyAgICAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlcGxhY2UoVk0m
LCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CiAKICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyYW5zaXRpb24oCkBAIC0yNDcsMTMgKzI1
MywxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJcyBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgdGhpcyBj
YXNlIHRvIGV2ZXIgYmUgdGFrZW4/CiAgICAgYm9vbCBjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0
OwotCisgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJpbnNpY0dldHRlcihKU0Z1bmN0
aW9uKiwgU3RydWN0dXJlKik7CiAKKyAgICBib29sIGNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGlj
TG9hZCgpIGNvbnN0OworCiAgICAgLy8gSWYgdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCB0aGVu
IGl0J3MgYSBnb29kIGlkZWEgdG8gcmVtb3ZlICdvdGhlcicgZnJvbSB0aGUgYWNjZXNzIG9uY2Ug
J3RoaXMnCiAgICAgLy8gaXMgYWRkZWQuIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBpbiBjYXNl
IG9mIGNvbnRyYWRpY3Rpb25zLCAndGhpcycgcmVwcmVzZW50cyBhIG5ld2VyLCBhbmQgc28KICAg
ICAvLyBtb3JlIHVzZWZ1bCwgdHJ1dGguIFRoaXMgbWV0aG9kIGNhbiBiZSBjb25zZXJ2YXRpdmU7
IGl0IHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gaXQgZG91YnQuCi0gICAgYm9vbCBjYW5SZXBsYWNl
KGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKTsKKyAgICBib29sIGNhblJlcGxhY2UoY29uc3QgQWNj
ZXNzQ2FzZSYgb3RoZXIpIGNvbnN0OwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OwogICAgIApAQCAtMzA4LDYgKzMxNiw2MSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKK2NsYXNzIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE1hZGVOb0NoYW5n
ZXMsCisgICAgICAgIEdhdmVVcCwKKyAgICAgICAgR2VuZXJhdGVkTmV3Q29kZQorICAgIH07Cisg
ICAgCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KEtpbmQga2luZCkKKyAgICAgICAgOiBtX2tpbmQoa2lu
ZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kICE9IEdlbmVyYXRlZE5ld0NvZGUpOworICAg
IH0KKyAgICAKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0KE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlKQorICAgICAgICA6IG1fa2luZChHZW5lcmF0ZWROZXdDb2RlKQorICAgICAgICAsIG1f
Y29kZShjb2RlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5k
ICYmIG1fY29kZSA9PSBvdGhlci5tX2NvZGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0g
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCgpOworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICAKKyAgICBib29sIG1h
ZGVOb0NoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gTWFkZU5vQ2hhbmdlczsgfQor
ICAgIGJvb2wgZ2F2ZVVwKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEdhdmVVcDsgfQorICAg
IGJvb2wgZ2VuZXJhdGVkTmV3Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBHZW5lcmF0
ZWROZXdDb2RlOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBtX2NvZGU7Cit9OworCiBjbGFzcyBQb2x5bW9ycGhpY0FjY2VzcyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUG9seW1vcnBoaWNBY2Nlc3MpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtMzE4LDEwICszODEsMTAgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWF5IHJldHVy
biBudWxsLCBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3R1YiByb3V0aW5lIGlzIGxlZnQgaW50YWN0
LiBZb3UgYXJlIHJlcXVpcmVkIHRvCiAgICAgLy8gcGFzcyBhIHZlY3RvciBvZiBub24tbnVsbCBh
Y2Nlc3MgY2FzZXMuIFRoaXMgd2lsbCBwcnVuZSB0aGUgYWNjZXNzIGNhc2VzIGJ5IHJlamVjdGlu
ZyBhbnkgY2FzZQogICAgIC8vIGluIHRoZSBsaXN0IHRoYXQgaXMgc3Vic3VtZWQgYnkgYSBsYXRl
ciBjYXNlIGluIHRoZSBsaXN0LgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZWdlbmVyYXRl
V2l0aENhc2VzKAorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVnZW5lcmF0ZVdpdGhDYXNl
cygKICAgICAgICAgVk0mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGNvbnN0IElk
ZW50aWZpZXImLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+Pik7CiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVnZW5lcmF0ZVdpdGhDYXNlKAorICAgIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgcmVnZW5lcmF0ZVdpdGhDYXNlKAogICAgICAgICBWTSYsIENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgY29uc3QgSWRlbnRpZmllciYsIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPik7CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsgfQpAQCAtMzYyLDkgKzQyNSw5IEBAIHByaXZhdGU6CiAKIHN0cnVjdCBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSgpCi0gICAg
OiBtX2NhbGN1bGF0ZWRSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoZmFsc2Up
Ci0gICAgLCBtX25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oZmFsc2UpCi0gICAg
LCBtX2NhbGN1bGF0ZWRDYWxsU2l0ZUluZGV4KGZhbHNlKQorICAgICAgICA6IG1fY2FsY3VsYXRl
ZFJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZyhmYWxzZSkKKyAgICAgICAgLCBt
X25lZWRzVG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24oZmFsc2UpCisgICAgICAgICwgbV9j
YWxjdWxhdGVkQ2FsbFNpdGVJbmRleChmYWxzZSkKICAgICB7CiAgICAgfQogICAgIENDYWxsSGVs
cGVycyogaml0IHsgbnVsbHB0ciB9OwpAQCAtNDQxLDYgKzUwNCw3IEBAIHByaXZhdGU6CiAKIG5h
bWVzcGFjZSBXVEYgewogCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQ6OktpbmQpOwogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RG
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTA0LDEzICsxMDQsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWJvdXRU
b0RpZSgpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIFN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKAorQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBhY2Nlc3NDYXNlKQogewogICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZt
KCk7CiAgICAgCiAgICAgaWYgKCFhY2Nlc3NDYXNlKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCk7CisgICAgICAgIHJldHVybiBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpN
YWRlTm9DaGFuZ2VzOwogICAgIAogICAgIGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHVi
KQogICAgICAgICByZXR1cm4gdS5zdHViLT5yZWdlbmVyYXRlV2l0aENhc2Uodm0sIGNvZGVCbG9j
aywgKnRoaXMsIGlkZW50LCBXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsKQEAgLTEyNiwxMSArMTI2LDEx
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHViSW5mbzoKIAogICAgIGFjY2Vz
c0Nhc2VzLmFwcGVuZChXVEZNb3ZlKGFjY2Vzc0Nhc2UpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciByZXN1bHQgPQorICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0ID0KICAg
ICAgICAgYWNjZXNzLT5yZWdlbmVyYXRlV2l0aENhc2VzKHZtLCBjb2RlQmxvY2ssICp0aGlzLCBp
ZGVudCwgV1RGTW92ZShhY2Nlc3NDYXNlcykpOwogCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICBpZiAoIXJlc3VsdC5nZW5lcmF0
ZWROZXdDb2RlKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICBpbml0U3R1Yihjb2Rl
QmxvY2ssIFdURk1vdmUoYWNjZXNzKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDcgKzMzLDYg
QEAKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIk9w
Y29kZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgpAQCAtNDIsNiArNDEs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAKK2NsYXNzIEFjY2Vzc0Nh
c2U7CitjbGFzcyBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OwogY2xhc3MgUG9seW1vcnBoaWNBY2Nl
c3M7CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CkBAIC02OCw4ICs2OSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGluaXRQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmUqIGJhc2VPYmplY3RTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGluaXRT
dHViKENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxQb2x5bW9ycGhpY0FjY2Vzcz4pOwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFkZEFjY2Vzc0Nhc2UoCi0gICAgICAgIENvZGVCbG9j
ayosIGNvbnN0IElkZW50aWZpZXImLCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4pOworICAg
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgYWRkQWNjZXNzQ2FzZShDb2RlQmxvY2sqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KTsKIAogICAgIHZvaWQgcmVz
ZXQoQ29kZUJsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE5OTAxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE5LDYgKzQx
OSw0MiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlCiAjZW5kaWYK
IH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpCit7CisgICAgSnVtcCBpc0lubGluZSA9
IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9m
ZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgIG5lZzMyKG9mZnNldCk7
CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkg
PSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisg
ICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNp
emVvZihKU09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJz
dE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCByZXN1bHQucGF5bG9hZEdQUigpKTsKKyAg
ICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIGxvYWRWYWx1ZSgKKyAgICAgICAg
QmFzZUluZGV4KAorICAgICAgICAgICAgcmVzdWx0LnBheWxvYWRHUFIoKSwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLAorICAgICAgICByZXN1bHQpOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExv
YWRTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNvdXJjZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgZGVzdCk7
CisgICAgbG9hZFB0cih2bSgpLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCksIHNjcmF0
Y2gpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBkZXN0
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIGRlc3QpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaCk7CisgICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3Vy
Y2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIGRlc3QpOworI2VuZGlmCit9CisKICNp
ZiBVU0UoSlNWQUxVRTY0KQogdGVtcGxhdGU8dHlwZW5hbWUgTG9hZEZyb21IaWdoLCB0eXBlbmFt
ZSBTdG9yZVRvSGlnaCwgdHlwZW5hbWUgTG9hZEZyb21Mb3csIHR5cGVuYW1lIFN0b3JlVG9Mb3c+
CiB2b2lkIGVtaXRSYW5kb21UaHVua0ltcGwoQXNzZW1ibHlIZWxwZXJzJiBqaXQsIEdQUlJlZyBz
Y3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIEZQUlJlZyByZXN1bHQs
IGNvbnN0IExvYWRGcm9tSGlnaCYgbG9hZEZyb21IaWdoLCBjb25zdCBTdG9yZVRvSGlnaCYgc3Rv
cmVUb0hpZ2gsIGNvbnN0IExvYWRGcm9tTG93JiBsb2FkRnJvbUxvdywgY29uc3QgU3RvcmVUb0xv
dyYgc3RvcmVUb0xvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMTk5MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSw5IEBAIHB1
YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGNsb2JiZXJzIG9mZnNldC4KKyAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0
LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOwogCiAgICAgdm9pZCBtb3ZlVmFs
dWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsK
QEAgLTEyMDksMjkgKzEyMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcmd1bWVudHNT
dGFydChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
ZW1pdExvYWRTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVn
aXN0ZXJJRCBzY3JhdGNoKQotICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBsb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc291cmNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBkZXN0KTsKLSAgICAgICAgbG9hZFB0cih2bSgpLT5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5iYXNlKCksIHNjcmF0Y2gpOwotICAgICAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc2NyYXRjaCwgZGVzdCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBkZXN0
KTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKLSAgICAgICAgbG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIGRlc3QpOwotI2VuZGlmCi0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZW1pdExvYWRT
dHJ1Y3R1cmUoQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCi0gICAgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgZGVzdCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKGppdC52bSgp
LT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCksIHNjcmF0Y2gpOwotICAgICAgICBqaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gsIGRlc3QsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0KSwgZGVzdCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0o
c2NyYXRjaCk7Ci0gICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIGRlc3QpOwotI2VuZGlmCi0gICAgfQor
ICAgIHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQg
ZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogICAgIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJl
V2l0aFR5cGVJbmZvKFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QsIFJl
Z2lzdGVySUQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uY3Bw
CShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAordm9pZCBKU1ZhbHVlUmVnczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgb3V0LnByaW50KG1fZ3ByKTsKKyNlbHNlCisgICAgb3V0LnBy
aW50KCIodGFnOiIsIHRhZ0dQUigpLCAiLCBwYXlsb2FkOiIsIHBheWxvYWRHUFIoKSwgIikiKTsK
KyNlbmRpZgorfQorCiAvLyBUaGlzIGlzIGluIHRoZSAuY3BwIGZpbGUgdG8gd29yayBhcm91bmQg
Y2xhbmcgaXNzdWVzLgogI2lmIENQVShYODZfNjQpCiBjb25zdCBHUFJSZWcgR1BSSW5mbzo6cGF0
Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IE1hY3JvQXNzZW1ibGVyOjpzX3NjcmF0Y2hSZWdpc3Rl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxOTkwMTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCB1c2VzKEdQUlJlZyBncHIp
IGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IGdwcjsgfQogICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHI7CiB9OwpA
QCAtMjAyLDYgKzIwNCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdXNlcyhHUFJSZWcgZ3ByKSBj
b25zdCB7IHJldHVybiBtX3RhZ0dQUiA9PSBncHIgfHwgbV9wYXlsb2FkR1BSID09IGdwcjsgfQog
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAogcHJpdmF0ZToK
ICAgICBpbnQ4X3QgbV90YWdHUFI7CiAgICAgaW50OF90IG1fcGF5bG9hZEdQUjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTk5MDEzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2
MSw2ICsxNjEsOCBAQCBzdGF0aWMgdm9pZCByZXNldFB1dEJ5SURDaGVja0FuZExvYWQoU3RyCiAK
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCiB7CisgICAgUkVMRUFTRV9BU1NF
UlQodGFyZ2V0KTsKKyAgICAKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNl
UGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2goKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcygKQEAgLTMxNSwxMyArMzE3LDE1IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgfQogICAgIH0K
IAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0KLSAgICAgICAgc3R1YkluZm8u
YWRkQWNjZXNzQ2FzZShjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7
CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAotICAgIGlm
ICghY29kZVB0cikKKyAgICBpZiAocmVzdWx0LmdhdmVVcCgpKQogICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLQotICAgIHJlcGxhY2VXaXRoSnVtcChzdHViSW5mbywgY29kZVB0cik7Cisg
ICAgaWYgKHJlc3VsdC5tYWRlTm9DaGFuZ2VzKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgcmVw
bGFjZVdpdGhKdW1wKHN0dWJJbmZvLCByZXN1bHQuY29kZSgpKTsKICAgICAKICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwogfQpAQCAtNDU3LDE2ICs0NjEsMTkgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICB9CiAgICAgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9j
aywgaWRlbnQsIFdURk1vdmUobmV3Q2FzZSkpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3Zl
KG5ld0Nhc2UpKTsKICAgICAKLSAgICBpZiAoIWNvZGVQdHIpCisgICAgaWYgKHJlc3VsdC5nYXZl
VXAoKSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgaWYgKHJlc3VsdC5tYWRl
Tm9DaGFuZ2VzKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAKKyAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKICAgICByZXNldFB1dEJ5SURDaGVja0FuZExvYWQo
c3R1YkluZm8pOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKICAgICAgICAgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKICAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGNv
ZGVQdHIpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAg
IAogICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiB9CkBAIC01MTQsMTMgKzUyMSwxNiBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6aW4oCiAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3Ms
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3Zl
KG5ld0Nhc2UpKTsKLSAgICBpZiAoIWNvZGVQdHIpCisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRlbnQsIFdURk1v
dmUobmV3Q2FzZSkpOworICAgIGlmIChyZXN1bHQuZ2F2ZVVwKCkpCiAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgIGlmIChyZXN1bHQubWFkZU5vQ2hhbmdlcygpKQorICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogCisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAogICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCksCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIpKTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOwogICAgIAogICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNCiAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAgICBB
c3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQ
UkluZm86OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmVtaXRMb2FkU3RydWN0dXJl
KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUNCwgR1BSSW5mbzo6cmVnVDEpOwogICAgIHNs
b3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCShyZXZpc2lvbiAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsOCBAQCB0eXBlZGVmIGNv
bnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGZ0bENyYXNoZXMsIGZhbHNlLCBu
dWxscHRyKSAvKiBmb29sLXByb29mIHdheSBvZiBjaGVja2luZyB0aGF0IHlvdSBlbmRlZCB1cCBp
biB0aGUgRlRMLiA7LSkgKi9cCiAgICAgdihib29sLCBjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93
UGF0aCwgIUFTU0VSVF9ESVNBQkxFRCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQWNjZXNz
SW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKLSAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJp
YW50TGlzdFNpemUsIDgsIG51bGxwdHIpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJp
YW50TGlzdFNpemUsIDEzLCBudWxscHRyKSBcCisgICAgdih1bnNpZ25lZCwgbWVnYW1vcnBoaWNM
b2FkQ29zdCwgMTAsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZVBvbHl2YXJpYW50RGV2aXJ0
dWFsaXphdGlvbiwgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBoaWNB
Y2Nlc3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBo
aWNDYWxsSW5saW5pbmcsIHRydWUsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24g
MTk5MDEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNo
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSwxMiBAQCBwdWJsaWM6CiAgICAg
c2l6ZV90IHNpemVJbk1lbW9yeSgpOwogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogI2Vu
ZGlmCisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4U2l6ZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eVRhYmxlLCBtX2luZGV4U2l6ZSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhNYXNrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFByb3BlcnR5VGFibGUsIG1faW5kZXhNYXNrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZJbmRleCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eVRhYmxlLCBt
X2luZGV4KTsgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9
IDA7CiAKIHByaXZhdGU6CiAgICAgUHJvcGVydHlUYWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxD
YXBhY2l0eSk7CkBAIC0yNDQsNyArMjUwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPFByb3BlcnR5T2Zmc2V0Pj4gbV9kZWxldGVkT2Zmc2V0czsKIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBNaW5pbXVtVGFibGVTaXplID0gMTY7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7CiB9OwogCiBpbmxpbmUgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6YmVnaW4oKQpAQCAtMjcyLDcgKzI3Nyw2IEBAIGlu
bGluZSBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIFByb3AKICAgICBBU1NFUlQoa2V5KTsK
ICAgICBBU1NFUlQoa2V5LT5pc0F0b21pYygpIHx8IGtleS0+aXNTeW1ib2woKSk7CiAgICAgdW5z
aWduZWQgaGFzaCA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKGtleSk7Ci0gICAgdW5zaWduZWQg
c3RlcCA9IDA7CiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAgICAgKytwcm9wZXJ0eU1h
cEhhc2hUYWJsZVN0YXRzLT5udW1GaW5kczsKQEAgLTI4NSwxOSArMjg5LDE2IEBAIGlubGluZSBQ
cm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIFByb3AKICAgICAgICAgaWYgKGtleSA9PSB0YWJs
ZSgpW2VudHJ5SW5kZXggLSAxXS5rZXkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoJnRhYmxlKClbZW50cnlJbmRleCAtIDFdLCBoYXNoICYgbV9pbmRleE1hc2spOwogCi0gICAg
ICAgIGlmICghc3RlcCkKLSAgICAgICAgICAgIHN0ZXAgPSBXVEY6OmRvdWJsZUhhc2goSWRlbnRp
ZmllclJlcEhhc2g6Omhhc2goa2V5KSkgfCAxOwotCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFU
UwogICAgICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51bUNvbGxpc2lvbnM7CiAj
ZW5kaWYKIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfQ09MTElTSU9OUwotICAgICAgICBkYXRhTG9n
KCJQcm9wZXJ0eVRhYmxlIGNvbGxpc2lvbiBmb3IgIiwga2V5LCAiICgiLCBoYXNoLCAiKSB3aXRo
IHN0ZXAgIiwgc3RlcCwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIlByb3BlcnR5VGFibGUgY29s
bGlzaW9uIGZvciAiLCBrZXksICIgKCIsIGhhc2gsICIpXG4iKTsKICAgICAgICAgZGF0YUxvZygi
Q29sbGlkZWQgd2l0aCAiLCB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5rZXksICIoIiwgSWRlbnRp
ZmllclJlcEhhc2g6Omhhc2godGFibGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KSwgIilcbiIpOwog
I2VuZGlmCiAKLSAgICAgICAgaGFzaCArPSBzdGVwOworICAgICAgICBoYXNoKys7CiAgICAgfQog
fQogCkBAIC0zMTAsNyArMzExLDYgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSog
UHJvcGVydAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHVuc2lnbmVkIGhhc2ggPSBJ
ZGVudGlmaWVyUmVwSGFzaDo6aGFzaChrZXkpOwotICAgIHVuc2lnbmVkIHN0ZXAgPSAwOwogCiAj
aWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0
cy0+bnVtTG9va3VwczsKQEAgLTMyNyw5ICszMjcsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6
VmFsdWVUeXBlKiBQcm9wZXJ0CiAgICAgICAgICsrcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cy0+
bnVtTG9va3VwUHJvYmluZzsKICNlbmRpZgogCi0gICAgICAgIGlmICghc3RlcCkKLSAgICAgICAg
ICAgIHN0ZXAgPSBXVEY6OmRvdWJsZUhhc2goSWRlbnRpZmllclJlcEhhc2g6Omhhc2goa2V5KSkg
fCAxOwotICAgICAgICBoYXNoICs9IHN0ZXA7CisgICAgICAgIGhhc2grKzsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAxOTkwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIwLDYgKzQyMCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlT2Zmc2V0KCk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKKyAgICB9
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mKTsKICAgICAgICAg
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxOTkwMTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wNC0wNCAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzIHNob3VsZCBoYXZl
IGEgTWVnYW1vcnBoaWNMb2FkIGNhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NjE4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9tZWdhbW9ycGhpYy1sb2FkLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9tZWdhbW9ycGhpYy1sb2FkLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21lZ2Ftb3JwaGljLWxvYWQu
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc3RyaW5nLXJlcGVhdC1ub3QtcmVzb2x2
aW5nLW5vLWlubGluZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
c3RyaW5nLXJlcGVhdC1ub3QtcmVzb2x2aW5nLW5vLWlubGluZS5odG1sOiBBZGRlZC4KKwogMjAx
Ni0wNC0wNCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBN
YXJraW5nIHBsdWdpbnMvZm9jdXMuaHRtbCBhcyBmbGFreSBvbiBtYWMKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvbWVnYW1vcnBoaWMtbG9hZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tZWdhbW9ycGhpYy1sb2FkLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWVnYW1vcnBoaWMtbG9hZC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL21l
Z2Ftb3JwaGljLWxvYWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWVnYW1vcnBoaWMtbG9h
ZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWVnYW1vcnBoaWMt
bG9hZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tZWdhbW9y
cGhpYy1sb2FkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbWVnYW1vcnBoaWMtbG9hZC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3N0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZy1uby1pbmxpbmUtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyaW5nLXJlcGVhdC1ub3QtcmVz
b2x2aW5nLW5vLWlubGluZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3N0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZy1uby1pbmxpbmUtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zdHJpbmct
cmVwZWF0LW5vdC1yZXNvbHZpbmctbm8taW5saW5lCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3N0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZy1uby1pbmxpbmUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZy1uby1p
bmxpbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyaW5n
LXJlcGVhdC1ub3QtcmVzb2x2aW5nLW5vLWlubGluZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRl
c3RzL3N0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZy1uby1pbmxpbmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvbWVnYW1vcnBoaWMtbG9hZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9tZWdhbW9ycGhpYy1sb2FkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWVnYW1vcnBoaWMtbG9hZC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGFycmF5
ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgdmFy
IG8gPSB7fTsKKyAgICAgICAgb1siaSIgKyBpXSA9IGk7CisgICAgICAgIG8uZiA9IDQyOworICAg
ICAgICBhcnJheS5wdXNoKG8pOworICAgIH0KKyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gYXJyYXlbaSAlIGFycmF5Lmxl
bmd0aF0uZjsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9Cit9KSgpOwo=
</data>
<flag name="review"
          id="299987"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>