<?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>123267</bug_id>
          
          <creation_ts>2013-10-24 06:13:38 -0700</creation_ts>
          <short_desc>Element iterator functions should take reference</short_desc>
          <delta_ts>2013-10-24 06:24:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>943094</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-24 06:13:38 -0700</bug_when>
    <thetext>The argument has to be non-null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943095</commentid>
    <comment_count>1</comment_count>
      <attachid>215058</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-24 06:15:50 -0700</bug_when>
    <thetext>Created attachment 215058
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943098</commentid>
    <comment_count>2</comment_count>
      <attachid>215058</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-24 06:21:56 -0700</bug_when>
    <thetext>Comment on attachment 215058
patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2712
&gt; +    for (auto area = areaDescendants.begin(), end = areaDescendants.end() ; area != end; ++area) {

One extra space here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943099</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-24 06:24:56 -0700</bug_when>
    <thetext>https://trac.webkit.org/r157924</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215058</attachid>
            <date>2013-10-24 06:15:50 -0700</date>
            <delta_ts>2013-10-24 06:21:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>element-iterator-reference.patch</filename>
            <type>text/plain</type>
            <size>70063</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTEwLTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBFbGVtZW50IGl0ZXJhdG9yIGZ1
bmN0aW9ucyBzaG91bGQgdGFrZSByZWZlcmVuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzI2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBoYXMgdG8gYmUgbm9uLW51bGwuCisK
IDIwMTMtMTAtMjQgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxdIEJ1aWxkIGJyZWFrIHdpdGggbGF0ZXN0IEVGTCAxLjggbGlicmFyaWVzLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTgsNyArMzk4LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuSGF2ZUNo
aQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBMZWdlbmRSb2xlOgogICAgICAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVy
biAhYW5jZXN0b3JzT2ZUeXBlPEhUTUxGaWVsZFNldEVsZW1lbnQ+KGVsZW1lbnQpLmZpcnN0KCk7
CisgICAgICAgICAgICByZXR1cm4gIWFuY2VzdG9yc09mVHlwZTxIVE1MRmllbGRTZXRFbGVtZW50
PigqZWxlbWVudCkuZmlyc3QoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
Y2FudmFzSGFzRgogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAgICAgaWYgKCFub2Rl
IHx8ICFub2RlLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBFbGVtZW50KiBjYW52YXNFbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgIEVsZW1l
bnQmIGNhbnZhc0VsZW1lbnQgPSB0b0VsZW1lbnQoKm5vZGUpOwogICAgIC8vIElmIGl0IGhhcyBh
bnkgY2hpbGRyZW4gdGhhdCBhcmUgZWxlbWVudHMsIHdlJ2xsIGFzc3VtZSBpdCBtaWdodCBiZSBm
YWxsYmFjawogICAgIC8vIGNvbnRlbnQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiBvciBpdHMgb25s
eSBjaGlsZHJlbiBhcmUgbm90IGVsZW1lbnRzCiAgICAgLy8gKGUuZy4ganVzdCB0ZXh0IG5vZGVz
KSwgaXQgZG9lc24ndCBoYXZlIGZhbGxiYWNrIGNvbnRlbnQuCkBAIC0xMTQxLDcgKzExNDEsNyBA
QCBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjCiAgICAgICAgICAgICBy
ZXR1cm4gbGFiZWw7CiAgICAgfQogCi0gICAgcmV0dXJuIGFuY2VzdG9yc09mVHlwZTxIVE1MTGFi
ZWxFbGVtZW50PihlbGVtZW50KS5maXJzdCgpOworICAgIHJldHVybiBhbmNlc3RvcnNPZlR5cGU8
SFRNTExhYmVsRWxlbWVudD4oKmVsZW1lbnQpLmZpcnN0KCk7CiB9CiAKIFN0cmluZyBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6YXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0CkBA
IC0xMTYyLDcgKzExNjIsOCBAQCBzdGF0aWMgRWxlbWVudCogc2libGluZ1dpdGhBcmlhUm9sZShT
dHJpCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAg
IGlmICghcGFyZW50KQogICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKGF1dG8gc2libGluZyA9
IGVsZW1lbnRDaGlsZHJlbihwYXJlbnQpLmJlZ2luKCksIGVuZCA9IGVsZW1lbnRDaGlsZHJlbihw
YXJlbnQpLmVuZCgpOyBzaWJsaW5nICE9IGVuZDsgKytzaWJsaW5nKSB7CisgICAgYXV0byBjaGls
ZHJlbiA9IGVsZW1lbnRDaGlsZHJlbigqcGFyZW50KTsKKyAgICBmb3IgKGF1dG8gc2libGluZyA9
IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBzaWJsaW5nICE9IGVuZDsg
KytzaWJsaW5nKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2libGluZ0FyaWFSb2xl
ID0gc2libGluZy0+ZmFzdEdldEF0dHJpYnV0ZShyb2xlQXR0cik7CiAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShzaWJsaW5nQXJpYVJvbGUsIHJvbGUpKQogICAgICAgICAgICAgcmV0dXJu
ICYqc2libGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTU3OTIzKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwOCw3ICsyNzA4LDggQEAgdm9pZCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjphZGRJbWFnZQogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm47
CiAKLSAgICBmb3IgKGF1dG8gYXJlYSA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVu
dD4obWFwKS5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+
KG1hcCkuZW5kKCkgOyBhcmVhICE9IGVuZDsgKythcmVhKSB7CisgICAgYXV0byBhcmVhRGVzY2Vu
ZGFudHMgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+KCptYXApOworICAgIGZv
ciAoYXV0byBhcmVhID0gYXJlYURlc2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGFyZWFEZXNjZW5k
YW50cy5lbmQoKSA7IGFyZWEgIT0gZW5kOyArK2FyZWEpIHsKICAgICAgICAgLy8gYWRkIGFuIDxh
cmVhPiBlbGVtZW50IGZvciB0aGlzIGNoaWxkIGlmIGl0IGhhcyBhIGxpbmsKICAgICAgICAgaWYg
KCFhcmVhLT5pc0xpbmsoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAkocmV2
aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDggQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgYwogICAgICAgICByZXR1cm4gdHJ1ZTsgICAg
CiAKICAgICAvLyBpZiB0aGVyZSdzIGEgY29sZ3JvdXAgb3IgY29sIGVsZW1lbnQsIGl0J3MgcHJv
YmFibHkgYSBkYXRhIHRhYmxlLgotICAgIGZvciAoYXV0byBjaGlsZCA9IGVsZW1lbnRDaGlsZHJl
bih0YWJsZUVsZW1lbnQpLmJlZ2luKCksIGVuZCA9IGVsZW1lbnRDaGlsZHJlbih0YWJsZUVsZW1l
bnQpLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKKyAgICBhdXRvIHRhYmxlQ2hpbGRy
ZW4gPSBlbGVtZW50Q2hpbGRyZW4oKnRhYmxlRWxlbWVudCk7CisgICAgZm9yIChhdXRvIGNoaWxk
ID0gdGFibGVDaGlsZHJlbi5iZWdpbigpLCBlbmQgPSB0YWJsZUNoaWxkcmVuLmVuZCgpOyBjaGls
ZCAhPSBlbmQ7ICsrY2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGNvbFRh
ZykgfHwgY2hpbGQtPmhhc1RhZ05hbWUoY29sZ3JvdXBUYWcpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNj
ZXNzaWJpbGl0eU9iamVjdE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tCShyZXZpc2lvbiAxNTc5MjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIEFjY2Vzc2liaWxpdHlPYmpl
Y3RJbmNsdXNpb24gQWNjZXNzaWJpbGkKICAgICAgICAgLy8gVGhlIGxlZ2VuZCBlbGVtZW50IGlz
IGlnbm9yZWQgaWYgaXQgbGl2ZXMgaW5zaWRlIG9mIGEgZmllbGRzZXQgZWxlbWVudCB0aGF0IHVz
ZXMgaXQgdG8gZ2VuZXJhdGUgYWx0ZXJuYXRpdmUgdGV4dC4KICAgICAgICAgaWYgKHJlbmRlcmVy
LT5pc0xlZ2VuZCgpKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxl
bWVudCgpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgYW5jZXN0b3JzT2ZUeXBlPEhUTUxG
aWVsZFNldEVsZW1lbnQ+KGVsZW1lbnQpLmZpcnN0KCkpCisgICAgICAgICAgICBpZiAoZWxlbWVu
dCAmJiBhbmNlc3RvcnNPZlR5cGU8SFRNTEZpZWxkU2V0RWxlbWVudD4oKmVsZW1lbnQpLmZpcnN0
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkocmV2aXNp
b24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRGYWNlU28KICAgICAgICAgICAgICAgICBpZiAoIW1fZXh0ZXJuYWxTVkdGb250
RWxlbWVudCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoYXV0byBmaXJzdEZvbnRGYWNlID0gY2hpbGRyZW5PZlR5cGU8U1ZHRm9udEZhY2VFbGVt
ZW50PihtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQuZ2V0KCkpLmZpcnN0KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBmaXJzdEZvbnRGYWNlID0gY2hpbGRyZW5PZlR5cGU8U1ZHRm9udEZh
Y2VFbGVtZW50PigqbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50KS5maXJzdCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9zdmdGb250RmFjZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlJ3JlIGNyZWF0ZWQgdXNpbmcgYSBDU1MgQGZvbnQtZmFjZSBydWxlLCB0
aGF0IG1lYW5zIHdlJ3JlIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBTVkdGb250RmFjZUVsZW1lbnQu
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGltcG9ydGVkIDxmb250LWZhY2U+
IHRhZyBhcyByZWZlcmVuY2luZyBmb250LWZhY2UgZWxlbWVudCBmb3IgdGhlc2UgY2FzZXMuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMu
Y3BwCShyZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0
aWMgYm9vbCBlbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2NvcGVzCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShEb2N1
bWVudCogZG9jdW1lbnQpCit2b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRh
dGVTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxT
dHlsZSk7CiAgICAgaWYgKG1faWRTY29wZXMuaXNFbXB0eSgpICYmIG1fY2xhc3NTY29wZXMuaXNF
bXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlz
aXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcy5oCShyZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1
YmxpYzoKICAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNo
ZWV0Q29udGVudHMqPiYpOwogCiAgICAgYm9vbCBkaXJ0aWVzQWxsU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnRpZXNBbGxTdHlsZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlKERvY3Vt
ZW50Kik7CisgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGUoRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTc5MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcx
LDggQEAgdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjbwogewogICAgIEFT
U0VSVChzY29wZSk7CiAgICAgQ29udGFpbmVyTm9kZSogcm9vdE5vZGUgPSBzY29wZS0+cm9vdE5v
ZGUoKTsKLSAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGVsZW1lbnREZXNjZW5kYW50cyhyb290Tm9k
ZSkuYmVnaW4oKSwgZW5kID0gZWxlbWVudERlc2NlbmRhbnRzKHJvb3ROb2RlKS5lbmQoKTsgZWxl
bWVudCAhPSBlbmQ7ICsrZWxlbWVudCkgeworICAgIGF1dG8gZGVzY2VuZGFudCA9IGVsZW1lbnRE
ZXNjZW5kYW50cygqcm9vdE5vZGUpOworICAgIGZvciAoYXV0byBlbGVtZW50ID0gZGVzY2VuZGFu
dC5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50LmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVt
ZW50KSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5ID0gZWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKICAgICAgICAgaWYgKCFhY2Nlc3NLZXku
aXNFbXB0eSgpKQogICAgICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NL
ZXkuaW1wbCgpLCAmKmVsZW1lbnQpOwpAQCAtNzkxLDcgKzc5Miw3IEBAIHZvaWQgRG9jdW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGkKICAgICB9CiAjZW5kaWYKIAotICAgIEVsZW1lbnQq
IG5ld0RvY3VtZW50RWxlbWVudCA9IGVsZW1lbnRDaGlsZHJlbih0aGlzKS5maXJzdCgpOworICAg
IEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9IGVsZW1lbnRDaGlsZHJlbigqdGhpcykuZmly
c3QoKTsKIAogICAgIGlmIChuZXdEb2N1bWVudEVsZW1lbnQgPT0gbV9kb2N1bWVudEVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKQEAgLTE1MTksNyArMTUyMCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
bW92ZVRpdGxlKEVsZW1lbnQqIHRpdGwKIAogICAgIC8vIFVwZGF0ZSB0aXRsZSBiYXNlZCBvbiBm
aXJzdCB0aXRsZSBlbGVtZW50IGluIHRoZSBoZWFkLCBpZiBvbmUgZXhpc3RzLgogICAgIGlmIChI
VE1MRWxlbWVudCogaGVhZEVsZW1lbnQgPSBoZWFkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gZmly
c3RUaXRsZSA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUaXRsZUVsZW1lbnQ+KGhlYWRFbGVtZW50KS5m
aXJzdCgpKQorICAgICAgICBpZiAoYXV0byBmaXJzdFRpdGxlID0gY2hpbGRyZW5PZlR5cGU8SFRN
TFRpdGxlRWxlbWVudD4oKmhlYWRFbGVtZW50KS5maXJzdCgpKQogICAgICAgICAgICAgc2V0VGl0
bGVFbGVtZW50KGZpcnN0VGl0bGUtPnRleHRXaXRoRGlyZWN0aW9uKCksIGZpcnN0VGl0bGUpOwog
ICAgIH0KIApAQCAtMjI1NCw5ICsyMjU1LDkgQEAgSFRNTEVsZW1lbnQqIERvY3VtZW50Ojpib2R5
KCkgY29uc3QKICAgICBhdXRvIGVsZW1lbnQgPSBkb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAo
IWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChhdXRvIGZyYW1lc2V0
ID0gY2hpbGRyZW5PZlR5cGU8SFRNTEZyYW1lU2V0RWxlbWVudD4oZWxlbWVudCkuZmlyc3QoKSkK
KyAgICBpZiAoYXV0byBmcmFtZXNldCA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxGcmFtZVNldEVsZW1l
bnQ+KCplbGVtZW50KS5maXJzdCgpKQogICAgICAgICByZXR1cm4gZnJhbWVzZXQ7Ci0gICAgcmV0
dXJuIGNoaWxkcmVuT2ZUeXBlPEhUTUxCb2R5RWxlbWVudD4oZWxlbWVudCkuZmlyc3QoKTsKKyAg
ICByZXR1cm4gY2hpbGRyZW5PZlR5cGU8SFRNTEJvZHlFbGVtZW50PigqZWxlbWVudCkuZmlyc3Qo
KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0Qm9keShQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBw
cnBOZXdCb2R5LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTIyODcsNyArMjI4OCw3IEBAIHZvaWQg
RG9jdW1lbnQ6OnNldEJvZHkoUGFzc1JlZlB0cjxIVE1MRWwKIEhUTUxIZWFkRWxlbWVudCogRG9j
dW1lbnQ6OmhlYWQoKQogewogICAgIGlmIChhdXRvIGVsZW1lbnQgPSBkb2N1bWVudEVsZW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuT2ZUeXBlPEhUTUxIZWFkRWxlbWVudD4oZWxlbWVu
dCkuZmlyc3QoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuT2ZUeXBlPEhUTUxIZWFkRWxlbWVu
dD4oKmVsZW1lbnQpLmZpcnN0KCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTI2MDMs
NyArMjYwNCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwoKQogICAgIGlmICghZXF1
YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihvbGRCYXNlVVJMLCBtX2Jhc2VVUkwpKSB7CiAg
ICAgICAgIC8vIEJhc2UgVVJMIGNoYW5nZSBjaGFuZ2VzIGFueSByZWxhdGl2ZSB2aXNpdGVkIGxp
bmtzLgogICAgICAgICAvLyBGSVhNRTogVGhlcmUgYXJlIG90aGVyIFVSTHMgaW4gdGhlIHRyZWUg
dGhhdCB3b3VsZCBuZWVkIHRvIGJlIHJlLWV2YWx1YXRlZCBvbiBkeW5hbWljIGJhc2UgVVJMIGNo
YW5nZS4gU3R5bGUgc2hvdWxkIGJlIGludmFsaWRhdGVkIHRvby4KLSAgICAgICAgYXV0byBhbmNo
b3JEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBbmNob3JFbGVtZW50Pih0aGlz
KTsKKyAgICAgICAgYXV0byBhbmNob3JEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhU
TUxBbmNob3JFbGVtZW50PigqdGhpcyk7CiAgICAgICAgIGZvciAoYXV0byBhbmNob3IgPSBhbmNo
b3JEZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBhbmNob3JEZXNjZW5kYW50cy5lbmQoKTsgYW5j
aG9yICE9IGVuZDsgKythbmNob3IpCiAgICAgICAgICAgICBhbmNob3ItPmludmFsaWRhdGVDYWNo
ZWRWaXNpdGVkTGlua0hhc2goKTsKICAgICB9CkBAIC0yNjIwLDcgKzI2MjEsNyBAQCB2b2lkIERv
Y3VtZW50Ojpwcm9jZXNzQmFzZUVsZW1lbnQoKQogICAgIC8vIEZpbmQgdGhlIGZpcnN0IGhyZWYg
YXR0cmlidXRlIGluIGEgYmFzZSBlbGVtZW50IGFuZCB0aGUgZmlyc3QgdGFyZ2V0IGF0dHJpYnV0
ZSBpbiBhIGJhc2UgZWxlbWVudC4KICAgICBjb25zdCBBdG9taWNTdHJpbmcqIGhyZWYgPSBudWxs
cHRyOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogdGFyZ2V0ID0gbnVsbHB0cjsKLSAgICBhdXRv
IGJhc2VEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxCYXNlRWxlbWVudD4odGhp
cyk7CisgICAgYXV0byBiYXNlRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQmFz
ZUVsZW1lbnQ+KCp0aGlzKTsKICAgICBmb3IgKGF1dG8gYmFzZSA9IGJhc2VEZXNjZW5kYW50cy5i
ZWdpbigpLCBlbmQgPSBiYXNlRGVzY2VuZGFudHMuZW5kKCk7IGJhc2UgIT0gZW5kICYmICghaHJl
ZiB8fCAhdGFyZ2V0KTsgKytiYXNlKSB7CiAgICAgICAgIGlmICghaHJlZikgewogICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2UtPmZhc3RHZXRBdHRyaWJ1dGUoaHJl
ZkF0dHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MDMsNyArNDAzLDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphbmFseQog
ICAgIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoYWRkZWRT
aGVldHMpOwogICAgIGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0aWVzQWxsU3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHls
ZSgmbV9kb2N1bWVudCk7CisgICAgaW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxl
KG1fZG9jdW1lbnQpOwogICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gZmFsc2U7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oCShy
ZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEFuY2VzdG9ySXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBjbGFzcyBFbGVtZW50QW5jZXN0b3JJdGVyYXRvckFk
YXB0ZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yQWRh
cHRlcihFbGVtZW50VHlwZSogZGVzY2VuZGFudCk7CisgICAgZXhwbGljaXQgRWxlbWVudEFuY2Vz
dG9ySXRlcmF0b3JBZGFwdGVyKEVsZW1lbnRUeXBlKiBmaXJzdCk7CiAgICAgRWxlbWVudEFuY2Vz
dG9ySXRlcmF0b3I8RWxlbWVudFR5cGU+IGJlZ2luKCk7CiAgICAgRWxlbWVudEFuY2VzdG9ySXRl
cmF0b3I8RWxlbWVudFR5cGU+IGVuZCgpOwogICAgIEVsZW1lbnRUeXBlKiBmaXJzdCgpIHsgcmV0
dXJuIG1fZmlyc3Q7IH0KQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKIHRlbXBsYXRlIDx0eXBl
bmFtZSBFbGVtZW50VHlwZT4KIGNsYXNzIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFw
dGVyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFbGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9y
QWRhcHRlcihjb25zdCBFbGVtZW50VHlwZSogZGVzY2VuZGFudCk7CisgICAgZXhwbGljaXQgRWxl
bWVudEFuY2VzdG9yQ29uc3RJdGVyYXRvckFkYXB0ZXIoY29uc3QgRWxlbWVudFR5cGUqIGZpcnN0
KTsKICAgICBFbGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdpbigp
IGNvbnN0OwogICAgIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IGVu
ZCgpIGNvbnN0OwogICAgIGNvbnN0IEVsZW1lbnRUeXBlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlyc3Q7IH0KQEAgLTc0LDEwICs3NCwxMCBAQCBFbGVtZW50QW5jZXN0b3JJdGVyYXRvckFk
YXB0ZXI8RWxlbWVudD4gCiBFbGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVt
ZW50PiBlbGVtZW50TGluZWFnZShjb25zdCBFbGVtZW50KiBmaXJzdCk7CiBFbGVtZW50QW5jZXN0
b3JJdGVyYXRvckFkYXB0ZXI8RWxlbWVudD4gZWxlbWVudEFuY2VzdG9ycyhFbGVtZW50KiBkZXNj
ZW5kYW50KTsKIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+IGVs
ZW1lbnRBbmNlc3RvcnMoY29uc3QgRWxlbWVudCogZGVzY2VuZGFudCk7Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50
VHlwZT4gbGluZWFnZU9mVHlwZShFbGVtZW50KiBmaXJzdCk7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlPiBsaW5lYWdlT2ZUeXBlKGNvbnN0IEVsZW1lbnQqIGZpcnN0KTsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlPiBhbmNlc3RvcnNPZlR5cGUoRWxlbWVudCogZGVzY2VuZGFudCk7Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVs
ZW1lbnRUeXBlPiBhbmNlc3RvcnNPZlR5cGUoY29uc3QgRWxlbWVudCogZGVzY2VuZGFudCk7Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yQWRh
cHRlcjxFbGVtZW50VHlwZT4gbGluZWFnZU9mVHlwZShFbGVtZW50JiBmaXJzdCk7Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFw
dGVyPEVsZW1lbnRUeXBlPiBsaW5lYWdlT2ZUeXBlKGNvbnN0IEVsZW1lbnQmIGZpcnN0KTsKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFw
dGVyPEVsZW1lbnRUeXBlPiBhbmNlc3RvcnNPZlR5cGUoRWxlbWVudCYgZGVzY2VuZGFudCk7Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0
b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBhbmNlc3RvcnNPZlR5cGUoY29uc3QgRWxlbWVudCYgZGVz
Y2VuZGFudCk7CiAKIC8vIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yCiAKQEAgLTE4MiwyOCArMTgy
LDI4IEBAIGlubGluZSBFbGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yQWRhcHQKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3Rvckl0ZXJh
dG9yQWRhcHRlcjxFbGVtZW50VHlwZT4gbGluZWFnZU9mVHlwZShFbGVtZW50VHlwZSogZmlyc3Qp
CitpbmxpbmUgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBsaW5l
YWdlT2ZUeXBlKEVsZW1lbnRUeXBlJiBmaXJzdCkKIHsKLSAgICByZXR1cm4gRWxlbWVudEFuY2Vz
dG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPihmaXJzdCk7CisgICAgcmV0dXJuIEVsZW1l
bnRBbmNlc3Rvckl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT4oJmZpcnN0KTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNvbnN0
SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBsaW5lYWdlT2ZUeXBlKGNvbnN0IEVsZW1lbnRU
eXBlKiBmaXJzdCkKK2lubGluZSBFbGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yQWRhcHRlcjxF
bGVtZW50VHlwZT4gbGluZWFnZU9mVHlwZShjb25zdCBFbGVtZW50VHlwZSYgZmlyc3QpCiB7Ci0g
ICAgcmV0dXJuIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBl
PihmaXJzdCk7CisgICAgcmV0dXJuIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVy
PEVsZW1lbnRUeXBlPigmZmlyc3QpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5
cGU+Ci1pbmxpbmUgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBh
bmNlc3RvcnNPZlR5cGUoRWxlbWVudCogZGVzY2VuZGFudCkKK2lubGluZSBFbGVtZW50QW5jZXN0
b3JJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+IGFuY2VzdG9yc09mVHlwZShFbGVtZW50JiBk
ZXNjZW5kYW50KQogewotICAgIEVsZW1lbnRUeXBlKiBmaXJzdCA9IGZpbmRFbGVtZW50QW5jZXN0
b3JPZlR5cGU8RWxlbWVudFR5cGU+KCpkZXNjZW5kYW50KTsKKyAgICBFbGVtZW50VHlwZSogZmly
c3QgPSBmaW5kRWxlbWVudEFuY2VzdG9yT2ZUeXBlPEVsZW1lbnRUeXBlPihkZXNjZW5kYW50KTsK
ICAgICByZXR1cm4gRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPihm
aXJzdCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVt
ZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT4gYW5jZXN0b3JzT2ZU
eXBlKGNvbnN0IEVsZW1lbnQqIGRlc2NlbmRhbnQpCitpbmxpbmUgRWxlbWVudEFuY2VzdG9yQ29u
c3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+IGFuY2VzdG9yc09mVHlwZShjb25zdCBFbGVt
ZW50JiBkZXNjZW5kYW50KQogewotICAgIGNvbnN0IEVsZW1lbnRUeXBlKiBmaXJzdCA9IGZpbmRF
bGVtZW50QW5jZXN0b3JPZlR5cGU8Y29uc3QgRWxlbWVudFR5cGU+KCpkZXNjZW5kYW50KTsKKyAg
ICBjb25zdCBFbGVtZW50VHlwZSogZmlyc3QgPSBmaW5kRWxlbWVudEFuY2VzdG9yT2ZUeXBlPGNv
bnN0IEVsZW1lbnRUeXBlPihkZXNjZW5kYW50KTsKICAgICByZXR1cm4gRWxlbWVudEFuY2VzdG9y
Q29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+KGZpcnN0KTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRDaGlsZEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRDaGlsZEl0ZXJhdG9yLmgJKHJldmlzaW9uIDE1NzkyMykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Q2hpbGRJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2MSArMzMsNjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdGVtcGxhdGUgPHR5
cGVuYW1lIEVsZW1lbnRUeXBlPgogY2xhc3MgRWxlbWVudENoaWxkSXRlcmF0b3IgOiBwdWJsaWMg
RWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiB7CiBwdWJsaWM6Ci0gICAgRWxlbWVudENoaWxk
SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCk7Ci0gICAgRWxlbWVudENoaWxkSXRl
cmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCwgRWxlbWVudFR5cGUqIGN1cnJlbnQpOwor
ICAgIEVsZW1lbnRDaGlsZEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCk7Cisg
ICAgRWxlbWVudENoaWxkSXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcGFyZW50LCBFbGVt
ZW50VHlwZSogY3VycmVudCk7CiAgICAgRWxlbWVudENoaWxkSXRlcmF0b3ImIG9wZXJhdG9yKyso
KTsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIGNsYXNzIEVsZW1lbnRD
aGlsZENvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5
cGU+IHsKIHB1YmxpYzoKLSAgICBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yKGNvbnN0IENvbnRh
aW5lck5vZGUqIHJvb3QpOwotICAgIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3IoY29uc3QgQ29u
dGFpbmVyTm9kZSogcm9vdCwgY29uc3QgRWxlbWVudFR5cGUqIGN1cnJlbnQpOworICAgIEVsZW1l
bnRDaGlsZENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcGFyZW50KTsKKyAgICBF
bGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCwgY29u
c3QgRWxlbWVudFR5cGUqIGN1cnJlbnQpOwogICAgIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3Im
IG9wZXJhdG9yKysoKTsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIGNs
YXNzIEVsZW1lbnRDaGlsZEl0ZXJhdG9yQWRhcHRlciB7CiBwdWJsaWM6Ci0gICAgRWxlbWVudENo
aWxkSXRlcmF0b3JBZGFwdGVyKENvbnRhaW5lck5vZGUqIHJvb3QpOworICAgIEVsZW1lbnRDaGls
ZEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJOb2RlJiBwYXJlbnQpOwogICAgIEVsZW1lbnRDaGls
ZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdpbigpOwogICAgIEVsZW1lbnRDaGlsZEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPiBlbmQoKTsKICAgICBFbGVtZW50VHlwZSogZmlyc3QoKTsKICAgICBFbGVt
ZW50VHlwZSogbGFzdCgpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1f
cm9vdDsKKyAgICBDb250YWluZXJOb2RlJiBtX3BhcmVudDsKIH07CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBFbGVtZW50VHlwZT4KIGNsYXNzIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVy
IHsKIHB1YmxpYzoKLSAgICBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBD
b250YWluZXJOb2RlKiByb290KTsKKyAgICBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRl
cihjb25zdCBDb250YWluZXJOb2RlJiBwYXJlbnQpOwogICAgIEVsZW1lbnRDaGlsZENvbnN0SXRl
cmF0b3I8RWxlbWVudFR5cGU+IGJlZ2luKCkgY29uc3Q7CiAgICAgRWxlbWVudENoaWxkQ29uc3RJ
dGVyYXRvcjxFbGVtZW50VHlwZT4gZW5kKCkgY29uc3Q7CiAgICAgY29uc3QgRWxlbWVudFR5cGUq
IGZpcnN0KCkgY29uc3Q7CiAgICAgY29uc3QgRWxlbWVudFR5cGUqIGxhc3QoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Jvb3Q7CisgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSYgbV9wYXJlbnQ7CiB9OwogCi1FbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8
RWxlbWVudD4gZWxlbWVudENoaWxkcmVuKENvbnRhaW5lck5vZGUqIHJvb3QpOwotRWxlbWVudENo
aWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudD4gZWxlbWVudENoaWxkcmVuKGNvbnN0IENv
bnRhaW5lck5vZGUqIHJvb3QpOwotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVt
ZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+IGNoaWxkcmVuT2ZUeXBlKENvbnRh
aW5lck5vZGUqIHJvb3QpOwotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50
Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT4gY2hpbGRyZW5PZlR5cGUoY29u
c3QgQ29udGFpbmVyTm9kZSogcm9vdCk7CitFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxl
bWVudD4gZWxlbWVudENoaWxkcmVuKENvbnRhaW5lck5vZGUmKTsKK0VsZW1lbnRDaGlsZENvbnN0
SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+IGVsZW1lbnRDaGlsZHJlbihjb25zdCBDb250YWluZXJO
b2RlJik7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRDaGlsZEl0ZXJh
dG9yQWRhcHRlcjxFbGVtZW50VHlwZT4gY2hpbGRyZW5PZlR5cGUoQ29udGFpbmVyTm9kZSYpOwor
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50VHlwZT4gY2hpbGRyZW5PZlR5cGUoY29uc3QgQ29udGFpbmVyTm9kZSYp
OwogCiAvLyBFbGVtZW50Q2hpbGRJdGVyYXRvcgogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dFR5cGU+Ci1pbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50
Q2hpbGRJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlKiByb290KQotICAgIDogRWxlbWVudEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPihyb290KQoraW5saW5lIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPjo6RWxlbWVudENoaWxkSXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcGFy
ZW50KQorICAgIDogRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigmcGFyZW50KQogewogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENoaWxkSXRl
cmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50Q2hpbGRJdGVyYXRvcihjb25zdCBDb250YWluZXJO
b2RlKiByb290LCBFbGVtZW50VHlwZSogY3VycmVudCkKLSAgICA6IEVsZW1lbnRJdGVyYXRvcjxF
bGVtZW50VHlwZT4ocm9vdCwgY3VycmVudCkKK2lubGluZSBFbGVtZW50Q2hpbGRJdGVyYXRvcjxF
bGVtZW50VHlwZT46OkVsZW1lbnRDaGlsZEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHBh
cmVudCwgRWxlbWVudFR5cGUqIGN1cnJlbnQpCisgICAgOiBFbGVtZW50SXRlcmF0b3I8RWxlbWVu
dFR5cGU+KCZwYXJlbnQsIGN1cnJlbnQpCiB7CiB9CiAKQEAgLTEwMCwxNCArMTAwLDE0IEBAIGlu
bGluZSBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT4KIC8vIEVsZW1lbnRDaGlsZENv
bnN0SXRlcmF0b3IKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVs
ZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50Q2hpbGRDb25zdEl0
ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QpCi0gICAgOiBFbGVtZW50Q29uc3RJdGVy
YXRvcjxFbGVtZW50VHlwZT4ocm9vdCkKK2lubGluZSBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPjo6RWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcihjb25zdCBDb250YWluZXJO
b2RlJiBwYXJlbnQpCisgICAgOiBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4oJnBh
cmVudCkKIHsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVs
ZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50Q2hpbGRDb25zdEl0
ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QsIGNvbnN0IEVsZW1lbnRUeXBlKiBjdXJy
ZW50KQotICAgIDogRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+KHJvb3QsIGN1cnJl
bnQpCitpbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT46OkVsZW1l
bnRDaGlsZENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcGFyZW50LCBjb25zdCBF
bGVtZW50VHlwZSogY3VycmVudCkKKyAgICA6IEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRU
eXBlPigmcGFyZW50LCBjdXJyZW50KQogewogfQogCkBAIC0xMjAsODkgKzEyMCw4OSBAQCBpbmxp
bmUgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcjxFbGVtZW50CiAvLyBFbGVtZW50Q2hpbGRJdGVy
YXRvckFkYXB0ZXIKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVs
ZW1lbnRDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OkVsZW1lbnRDaGlsZEl0ZXJh
dG9yQWRhcHRlcihDb250YWluZXJOb2RlKiByb290KQotICAgIDogbV9yb290KHJvb3QpCitpbmxp
bmUgRWxlbWVudENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6RWxlbWVudENoaWxk
SXRlcmF0b3JBZGFwdGVyKENvbnRhaW5lck5vZGUmIHBhcmVudCkKKyAgICA6IG1fcGFyZW50KHBh
cmVudCkKIHsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5lIEVs
ZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0
ZXI8RWxlbWVudFR5cGU+OjpiZWdpbigpCiB7Ci0gICAgcmV0dXJuIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0Q2hp
bGQobV9yb290KSk7CisgICAgcmV0dXJuIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBl
PihtX3BhcmVudCwgVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZCgmbV9wYXJlbnQp
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5lIEVsZW1lbnRD
aGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxl
bWVudFR5cGU+OjplbmQoKQogewotICAgIHJldHVybiBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVt
ZW50VHlwZT4obV9yb290KTsKKyAgICByZXR1cm4gRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVu
dFR5cGU+KG1fcGFyZW50KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgog
aW5saW5lIEVsZW1lbnRUeXBlKiBFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5
cGU+OjpmaXJzdCgpCiB7Ci0gICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0
Q2hpbGQobV9yb290KTsKKyAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RD
aGlsZCgmbV9wYXJlbnQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBp
bmxpbmUgRWxlbWVudFR5cGUqIEVsZW1lbnRDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlw
ZT46Omxhc3QoKQogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpsYXN0Q2hp
bGQobV9yb290KTsKKyAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bGFzdENoaWxk
KCZtX3BhcmVudCk7CiB9CiAKIC8vIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVyCiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50Q2hpbGRDb25z
dEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OkVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JB
ZGFwdGVyKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QpCi0gICAgOiBtX3Jvb3Qocm9vdCkKK2lu
bGluZSBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OkVsZW1l
bnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVyKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCkK
KyAgICA6IG1fcGFyZW50KHBhcmVudCkKIHsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1l
bnRUeXBlPgogaW5saW5lIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IEVs
ZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6YmVnaW4oKSBjb25z
dAogewotICAgIHJldHVybiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiht
X3Jvb3QsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0Q2hpbGQobV9yb290KSk7CisgICAg
cmV0dXJuIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcGFyZW50LCBU
cmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdENoaWxkKCZtX3BhcmVudCkpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJdGVy
YXRvcjxFbGVtZW50VHlwZT4gRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVu
dFR5cGU+OjplbmQoKSBjb25zdAogewotICAgIHJldHVybiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QpOworICAgIHJldHVybiBFbGVtZW50Q2hpbGRDb25zdEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3BhcmVudCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50VHlwZT4KIGlubGluZSBjb25zdCBFbGVtZW50VHlwZSogRWxlbWVudENoaWxkQ29uc3RJ
dGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+OjpmaXJzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0Q2hpbGQobV9yb290KTsKKyAgICByZXR1cm4g
VHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RDaGlsZCgmbV9wYXJlbnQpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgY29uc3QgRWxlbWVudFR5cGUqIEVs
ZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6bGFzdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxhc3RDaGlsZChtX3Jvb3Qp
OworICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpsYXN0Q2hpbGQoJm1fcGFyZW50
KTsKIH0KIAogLy8gU3RhbmRhbG9uZSBmdW5jdGlvbnMKIAotaW5saW5lIEVsZW1lbnRDaGlsZEl0
ZXJhdG9yQWRhcHRlcjxFbGVtZW50PiBlbGVtZW50Q2hpbGRyZW4oQ29udGFpbmVyTm9kZSogcm9v
dCkKK2lubGluZSBFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudD4gZWxlbWVudENo
aWxkcmVuKENvbnRhaW5lck5vZGUmIHBhcmVudCkKIHsKLSAgICByZXR1cm4gRWxlbWVudENoaWxk
SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+KHJvb3QpOworICAgIHJldHVybiBFbGVtZW50Q2hpbGRJ
dGVyYXRvckFkYXB0ZXI8RWxlbWVudD4ocGFyZW50KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50
VHlwZT4gY2hpbGRyZW5PZlR5cGUoQ29udGFpbmVyTm9kZSogcm9vdCkKK2lubGluZSBFbGVtZW50
Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+IGNoaWxkcmVuT2ZUeXBlKENvbnRhaW5l
ck5vZGUmIHBhcmVudCkKIHsKLSAgICByZXR1cm4gRWxlbWVudENoaWxkSXRlcmF0b3JBZGFwdGVy
PEVsZW1lbnRUeXBlPihyb290KTsKKyAgICByZXR1cm4gRWxlbWVudENoaWxkSXRlcmF0b3JBZGFw
dGVyPEVsZW1lbnRUeXBlPihwYXJlbnQpOwogfQogCi1pbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJ
dGVyYXRvckFkYXB0ZXI8RWxlbWVudD4gZWxlbWVudENoaWxkcmVuKGNvbnN0IENvbnRhaW5lck5v
ZGUqIHJvb3QpCitpbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVu
dD4gZWxlbWVudENoaWxkcmVuKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCkKIHsKLSAgICBy
ZXR1cm4gRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudD4ocm9vdCk7Cisg
ICAgcmV0dXJuIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+KHBhcmVu
dCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50
Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT4gY2hpbGRyZW5PZlR5cGUoY29u
c3QgQ29udGFpbmVyTm9kZSogcm9vdCkKK2lubGluZSBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50VHlwZT4gY2hpbGRyZW5PZlR5cGUoY29uc3QgQ29udGFpbmVyTm9kZSYg
cGFyZW50KQogewotICAgIHJldHVybiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcjxF
bGVtZW50VHlwZT4ocm9vdCk7CisgICAgcmV0dXJuIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JB
ZGFwdGVyPEVsZW1lbnRUeXBlPihwYXJlbnQpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgJKHJldmlzaW9uIDE1NzkyMykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYxICszMyw2MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBjbGFzcyBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
IDogcHVibGljIEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gewogcHVibGljOgotICAgIEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCk7Ci0gICAg
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlKiByb290LCBFbGVt
ZW50VHlwZSogY3VycmVudCk7CisgICAgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcihjb25zdCBD
b250YWluZXJOb2RlJiByb290KTsKKyAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yKGNvbnN0
IENvbnRhaW5lck5vZGUmIHJvb3QsIEVsZW1lbnRUeXBlKiBjdXJyZW50KTsKICAgICBFbGVtZW50
RGVzY2VuZGFudEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudFR5cGU+CiBjbGFzcyBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IgOiBw
dWJsaWMgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+ICB7CiBwdWJsaWM6Ci0gICAg
RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3Qp
OwotICAgIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2Rl
KiByb290LCBjb25zdCBFbGVtZW50VHlwZSogY3VycmVudCk7CisgICAgRWxlbWVudERlc2NlbmRh
bnRDb25zdEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QpOworICAgIEVsZW1lbnRE
ZXNjZW5kYW50Q29uc3RJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlJiByb290LCBjb25zdCBF
bGVtZW50VHlwZSogY3VycmVudCk7CiAgICAgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9y
JiBvcGVyYXRvcisrKCk7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBj
bGFzcyBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlciB7CiBwdWJsaWM6Ci0gICAgRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIoQ29udGFpbmVyTm9kZSogcm9vdCk7CisgICAg
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIoQ29udGFpbmVyTm9kZSYgcm9vdCk7CiAg
ICAgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gYmVnaW4oKTsKICAgICBF
bGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBlbmQoKTsKICAgICBFbGVtZW50
VHlwZSogZmlyc3QoKTsKICAgICBFbGVtZW50VHlwZSogbGFzdCgpOwogCiBwcml2YXRlOgotICAg
IENvbnRhaW5lck5vZGUqIG1fcm9vdDsKKyAgICBDb250YWluZXJOb2RlJiBtX3Jvb3Q7CiB9Owog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBjbGFzcyBFbGVtZW50RGVzY2VuZGFu
dENvbnN0SXRlcmF0b3JBZGFwdGVyIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50RGVzY2VuZGFudENv
bnN0SXRlcmF0b3JBZGFwdGVyKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QpOworICAgIEVsZW1l
bnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9v
dCk7CiAgICAgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdp
bigpIGNvbnN0OwogICAgIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlw
ZT4gZW5kKCkgY29uc3Q7CiAgICAgY29uc3QgRWxlbWVudFR5cGUqIGZpcnN0KCkgY29uc3Q7CiAg
ICAgY29uc3QgRWxlbWVudFR5cGUqIGxhc3QoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBjb25z
dCBDb250YWluZXJOb2RlKiBtX3Jvb3Q7CisgICAgY29uc3QgQ29udGFpbmVyTm9kZSYgbV9yb290
OwogfTsKIAotRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudD4gZWxlbWVu
dERlc2NlbmRhbnRzKENvbnRhaW5lck5vZGUqIHJvb3QpOwotRWxlbWVudERlc2NlbmRhbnRDb25z
dEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50PiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3QgQ29udGFp
bmVyTm9kZSogcm9vdCk7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBkZXNjZW5kYW50c09mVHlwZShD
b250YWluZXJOb2RlKiByb290KTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxl
bWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT4gZGVzY2VuZGFu
dHNPZlR5cGUoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCk7CitFbGVtZW50RGVzY2VuZGFudEl0
ZXJhdG9yQWRhcHRlcjxFbGVtZW50PiBlbGVtZW50RGVzY2VuZGFudHMoQ29udGFpbmVyTm9kZSYp
OworRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50PiBlbGVtZW50
RGVzY2VuZGFudHMoY29uc3QgQ29udGFpbmVyTm9kZSYpOwordGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlPiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT4g
ZGVzY2VuZGFudHNPZlR5cGUoQ29udGFpbmVyTm9kZSYpOwordGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlPiBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlPiBkZXNjZW5kYW50c09mVHlwZShjb25zdCBDb250YWluZXJOb2RlJik7CiAKIC8vIEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgot
aW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50RGVz
Y2VuZGFudEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QpCi0gICAgOiBFbGVtZW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+KHJvb3QpCitpbmxpbmUgRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvcjxFbGVtZW50VHlwZT46OkVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IoY29uc3QgQ29udGFp
bmVyTm9kZSYgcm9vdCkKKyAgICA6IEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4oJnJvb3Qp
CiB7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50
RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
cihjb25zdCBDb250YWluZXJOb2RlKiByb290LCBFbGVtZW50VHlwZSogY3VycmVudCkKLSAgICA6
IEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4ocm9vdCwgY3VycmVudCkKK2lubGluZSBFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvcihjb25zdCBDb250YWluZXJOb2RlJiByb290LCBFbGVtZW50VHlwZSogY3VycmVudCkKKyAg
ICA6IEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4oJnJvb3QsIGN1cnJlbnQpCiB7CiB9CiAK
QEAgLTEwMCwxNSArMTAwLDE1IEBAIGlubGluZSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVs
ZW1lbnQKIC8vIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcgogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPjo6RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yKGNvbnN0IENvbnRh
aW5lck5vZGUqIHJvb3QpCi0gICAgOiBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4o
cm9vdCkKK2lubGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+
OjpFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9v
dCkKKyAgICA6IEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigmcm9vdCkKIAogewog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudERlc2Nl
bmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudERlc2NlbmRhbnRDb25zdEl0
ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QsIGNvbnN0IEVsZW1lbnRUeXBlKiBjdXJy
ZW50KQotICAgIDogRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+KHJvb3QsIGN1cnJl
bnQpCitpbmxpbmUgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6
RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3Qs
IGNvbnN0IEVsZW1lbnRUeXBlKiBjdXJyZW50KQorICAgIDogRWxlbWVudENvbnN0SXRlcmF0b3I8
RWxlbWVudFR5cGU+KCZyb290LCBjdXJyZW50KQogewogfQogCkBAIC0xMjEsNyArMTIxLDcgQEAg
aW5saW5lIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjxFbAogLy8gRWxlbWVudERlc2Nl
bmRhbnRJdGVyYXRvckFkYXB0ZXIKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgot
aW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6RWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIoQ29udGFpbmVyTm9kZSogcm9vdCkKK2lubGlu
ZSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OkVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyKENvbnRhaW5lck5vZGUmIHJvb3QpCiAgICAgOiBtX3Jv
b3Qocm9vdCkKIHsKIH0KQEAgLTEyOSw3ICsxMjksNyBAQCBpbmxpbmUgRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvckFkYXB0ZXI8CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxp
bmUgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+OjpiZWdpbigpCiB7Ci0gICAgcmV0dXJuIEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgVHJhdmVyc2FsPEVs
ZW1lbnRUeXBlPjo6Zmlyc3RXaXRoaW4obV9yb290KSk7CisgICAgcmV0dXJuIEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgVHJhdmVyc2FsPEVsZW1lbnRUeXBl
Pjo6Zmlyc3RXaXRoaW4oJm1fcm9vdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVu
dFR5cGU+CkBAIC0xNDEsMTkgKzE0MSwxOSBAQCBpbmxpbmUgRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvcjxFbGVtZW50CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgRWxl
bWVudFR5cGUqIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6
Zmlyc3QoKQogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhp
bihtX3Jvb3QpOworICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhp
bigmbV9yb290KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5l
IEVsZW1lbnRUeXBlKiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlw
ZT46Omxhc3QoKQogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpsYXN0V2l0
aGluKG1fcm9vdCk7CisgICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxhc3RXaXRo
aW4oJm1fcm9vdCk7CiB9CiAKIC8vIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0
ZXIKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnREZXNj
ZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+OjpFbGVtZW50RGVzY2VuZGFu
dENvbnN0SXRlcmF0b3JBZGFwdGVyKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QpCitpbmxpbmUg
RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OkVsZW1l
bnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9v
dCkKICAgICA6IG1fcm9vdChyb290KQogewogfQpAQCAtMTYxLDcgKzE2MSw3IEBAIGlubGluZSBF
bGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGEKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVt
ZW50VHlwZT4KIGlubGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5
cGU+IEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+Ojpi
ZWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRv
cjxFbGVtZW50VHlwZT4obV9yb290LCBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhp
bihtX3Jvb3QpKTsKKyAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPihtX3Jvb3QsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0V2l0aGluKCZt
X3Jvb3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgpAQCAtMTczLDM1
ICsxNzMsMzUgQEAgaW5saW5lIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjxFbAogdGVt
cGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5lIGNvbnN0IEVsZW1lbnRUeXBlKiBF
bGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6Zmlyc3Qo
KSBjb25zdAogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhp
bihtX3Jvb3QpOworICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdpdGhp
bigmbV9yb290KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgogaW5saW5l
IGNvbnN0IEVsZW1lbnRUeXBlKiBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVy
PEVsZW1lbnRUeXBlPjo6bGFzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVt
ZW50VHlwZT46Omxhc3RXaXRoaW4obV9yb290KTsKKyAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1l
bnRUeXBlPjo6bGFzdFdpdGhpbigmbV9yb290KTsKIH0KIAogLy8gU3RhbmRhbG9uZSBmdW5jdGlv
bnMKIAotaW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+IGVs
ZW1lbnREZXNjZW5kYW50cyhDb250YWluZXJOb2RlKiByb290KQoraW5saW5lIEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+IGVsZW1lbnREZXNjZW5kYW50cyhDb250YWlu
ZXJOb2RlJiByb290KQogewogICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRh
cHRlcjxFbGVtZW50Pihyb290KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBl
PgotaW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBk
ZXNjZW5kYW50c09mVHlwZShDb250YWluZXJOb2RlKiByb290KQoraW5saW5lIEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBkZXNjZW5kYW50c09mVHlwZShDb250
YWluZXJOb2RlJiByb290KQogewogICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
QWRhcHRlcjxFbGVtZW50VHlwZT4ocm9vdCk7CiB9CiAKLWlubGluZSBFbGVtZW50RGVzY2VuZGFu
dENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdCBD
b250YWluZXJOb2RlKiByb290KQoraW5saW5lIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRv
ckFkYXB0ZXI8RWxlbWVudD4gZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0IENvbnRhaW5lck5vZGUm
IHJvb3QpCiB7CiAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0
ZXI8RWxlbWVudD4ocm9vdCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4K
LWlubGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBl
PiBkZXNjZW5kYW50c09mVHlwZShjb25zdCBDb250YWluZXJOb2RlKiByb290KQoraW5saW5lIEVs
ZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+IGRlc2NlbmRh
bnRzT2ZUeXBlKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QpCiB7CiAgICAgcmV0dXJuIEVsZW1l
bnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+KHJvb3QpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkocmV2aXNpb24gMTU3OTIzKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjcsNyArMTY3LDcgQEAgc3RhdGljIGJvb2wgaXNTaW5nbGVUYWdOYW1lU2VsZWN0b3IoY29u
cwogdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4KIHN0YXRpYyBpbmxpbmUg
dm9pZCBlbGVtZW50c0ZvckxvY2FsTmFtZShjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFp
dDo6T3V0cHV0VHlwZSYgb3V0cHV0KQogewotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50
RGVzY2VuZGFudHMoJmNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2RlKSk7CisgICAg
YXV0byBkZXNjZW5kYW50cyA9IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5l
ck5vZGUmPihyb290Tm9kZSkpOwogICAgIGZvciAoYXV0byBlbGVtZW50ID0gZGVzY2VuZGFudHMu
YmVnaW4oKSwgZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7IGVsZW1lbnQgIT0gZW5kOyArK2VsZW1l
bnQpIHsKICAgICAgICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkubG9jYWxOYW1lKCkgPT0gbG9j
YWxOYW1lKSB7CiAgICAgICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZv
ckVsZW1lbnQob3V0cHV0LCAmKmVsZW1lbnQpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBlbGVtZW50c0ZvckxvY2FsTmFtZSgKIHRlbXBsYXRlIDx0eXBlbmFtZSBTZWxl
Y3RvclF1ZXJ5VHJhaXQ+CiBzdGF0aWMgaW5saW5lIHZvaWQgYW55RWxlbWVudChjb25zdCBDb250
YWluZXJOb2RlJiByb290Tm9kZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRU
eXBlJiBvdXRwdXQpCiB7Ci0gICAgYXV0byBkZXNjZW5kYW50cyA9IGVsZW1lbnREZXNjZW5kYW50
cygmY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKTsKKyAgICBhdXRvIGRlc2Nl
bmRhbnRzID0gZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJv
b3ROb2RlKSk7CiAgICAgZm9yIChhdXRvIGVsZW1lbnQgPSBkZXNjZW5kYW50cy5iZWdpbigpLCBl
bmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgZWxlbWVudCAhPSBlbmQ7ICsrZWxlbWVudCkgewogICAg
ICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAm
KmVsZW1lbnQpOwogICAgICAgICBpZiAoU2VsZWN0b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0
Y2hGaXJzdEVsZW1lbnQpCkBAIC0yMDksNyArMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNl
bGVjdG9yRGF0YUxpc3Q6OmV4ZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
RmFsbGJhY2s6IE5hbWVzcGFjZVVSSSBpcyBzZXQsIHNlbGVjdG9yTG9jYWxOYW1lIG1heSBiZSBz
dGFyQXRvbS4KLSAgICAgICAgYXV0byBkZXNjZW5kYW50cyA9IGVsZW1lbnREZXNjZW5kYW50cygm
Y29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKTsKKyAgICAgICAgYXV0byBkZXNj
ZW5kYW50cyA9IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihy
b290Tm9kZSkpOwogICAgICAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGRlc2NlbmRhbnRzLmJlZ2lu
KCksIGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7
CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+bmFtZXNwYWNlVVJJKCkgPT0gc2VsZWN0b3JOYW1l
c3BhY2VVUkkgJiYgKHNlbGVjdG9yTG9jYWxOYW1lID09IHN0YXJBdG9tIHx8IGVsZW1lbnQtPnRh
Z1FOYW1lKCkubG9jYWxOYW1lKCkgPT0gc2VsZWN0b3JMb2NhbE5hbWUpKSB7CiAgICAgICAgICAg
ICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwg
JiplbGVtZW50KTsKQEAgLTIzMiw3ICsyMzIsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0
b3JEYXRhTGlzdDo6ZXhlCiAgICAgQVNTRVJUKGlzU2luZ2xlQ2xhc3NOYW1lU2VsZWN0b3IoKnNl
bGVjdG9yRGF0YS5zZWxlY3RvcikpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05h
bWUgPSBzZWxlY3RvckRhdGEuc2VsZWN0b3ItPnZhbHVlKCk7Ci0gICAgYXV0byBkZXNjZW5kYW50
cyA9IGVsZW1lbnREZXNjZW5kYW50cygmY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5v
ZGUpKTsKKyAgICBhdXRvIGRlc2NlbmRhbnRzID0gZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nh
c3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2RlKSk7CiAgICAgZm9yIChhdXRvIGVsZW1lbnQgPSBk
ZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgZWxlbWVudCAhPSBl
bmQ7ICsrZWxlbWVudCkgewogICAgICAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVt
ZW50LT5jbGFzc05hbWVzKCkuY29udGFpbnMoY2xhc3NOYW1lKSkgewogICAgICAgICAgICAgU2Vs
ZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJiplbGVtZW50
KTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlz
dDo6ZXhlCiB7CiAgICAgQVNTRVJUKG1fc2VsZWN0b3JzLnNpemUoKSA9PSAxKTsKIAotICAgIGF1
dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMoJmNvbnN0X2Nhc3Q8Q29udGFpbmVy
Tm9kZSY+KHJvb3ROb2RlKSk7CisgICAgYXV0byBkZXNjZW5kYW50cyA9IGVsZW1lbnREZXNjZW5k
YW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpOwogICAgIGZvciAoYXV0
byBlbGVtZW50ID0gZGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7
IGVsZW1lbnQgIT0gZW5kOyArK2VsZW1lbnQpIHsKICAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hl
cyhzZWxlY3RvckRhdGEsICplbGVtZW50LCByb290Tm9kZSkpIHsKICAgICAgICAgICAgIFNlbGVj
dG9yUXVlcnlUcmFpdDo6YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsICYqZWxlbWVudCk7
CkBAIC0yNjEsNyArMjYxLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFp
dD4KIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlU2luZ2xlTXVs
dGlTZWxlY3RvckRhdGEoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIHR5cGVuYW1lIFNl
bGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0KSBjb25zdAogewogICAgIHVuc2ln
bmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7Ci0gICAgYXV0byBkZXNjZW5k
YW50cyA9IGVsZW1lbnREZXNjZW5kYW50cygmY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9v
dE5vZGUpKTsKKyAgICBhdXRvIGRlc2NlbmRhbnRzID0gZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0
X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2RlKSk7CiAgICAgZm9yIChhdXRvIGVsZW1lbnQg
PSBkZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgZWxlbWVudCAh
PSBlbmQ7ICsrZWxlbWVudCkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Vs
ZWN0b3JDb3VudDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoc2VsZWN0b3JNYXRjaGVzKG1fc2Vs
ZWN0b3JzW2ldLCAqZWxlbWVudCwgcm9vdE5vZGUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCBIVE1MTGFiZWxFbGVtZW50
KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVuCiAgICAgICAgIC8vIFBvcHVsYXRlIHRoZSBtYXAgb24g
Zmlyc3QgYWNjZXNzLgogICAgICAgICBtX2xhYmVsc0J5Rm9yQXR0cmlidXRlID0gYWRvcHRQdHIo
bmV3IERvY3VtZW50T3JkZXJlZE1hcCk7CiAKLSAgICAgICAgYXV0byBsYWJlbERlc2NlbmRhbnRz
ID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTExhYmVsRWxlbWVudD4ocm9vdE5vZGUoKSk7CisgICAg
ICAgIGF1dG8gbGFiZWxEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxMYWJlbEVs
ZW1lbnQ+KCpyb290Tm9kZSgpKTsKICAgICAgICAgZm9yIChhdXRvIGxhYmVsID0gbGFiZWxEZXNj
ZW5kYW50cy5iZWdpbigpLCBlbmQgPSBsYWJlbERlc2NlbmRhbnRzLmVuZCgpOyBsYWJlbCAhPSBl
bmQ7ICsrbGFiZWwpIHsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9yVmFsdWUg
PSBsYWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKTsKICAgICAgICAgICAgIGlmICghZm9y
VmFsdWUuaXNFbXB0eSgpKQpAQCAtMzQyLDcgKzM0Miw3IEBAIEVsZW1lbnQqIFRyZWVTY29wZTo6
ZmluZEFuY2hvcihjb25zdCBTdHIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKEVs
ZW1lbnQqIGVsZW1lbnQgPSBnZXRFbGVtZW50QnlJZChuYW1lKSkKICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gICAgYXV0byBhbmNob3JEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhU
TUxBbmNob3JFbGVtZW50Pihyb290Tm9kZSgpKTsKKyAgICBhdXRvIGFuY2hvckRlc2NlbmRhbnRz
ID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEFuY2hvckVsZW1lbnQ+KCpyb290Tm9kZSgpKTsKICAg
ICBmb3IgKGF1dG8gYW5jaG9yID0gYW5jaG9yRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gYW5j
aG9yRGVzY2VuZGFudHMuZW5kKCk7IGFuY2hvciAhPSBlbmQ7ICsrYW5jaG9yKSB7CiAgICAgICAg
IGlmIChyb290Tm9kZSgpLT5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKSB7CiAgICAgICAgICAg
ICAvLyBRdWlya3MgbW9kZSwgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIG5hbWVzLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQsNyArNDQ0LDggQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6Y2xlYW51cFVuc3R5bGVkQQogICAgIC8vIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhl
IGR1bW15J3MgcGFyZW50CiAKICAgICBWZWN0b3I8RWxlbWVudCo+IHRvUmVtb3ZlOwotICAgIGZv
ciAoYXV0byBjaGlsZCA9IGVsZW1lbnRDaGlsZHJlbihkdW1teVNwYW5BbmNlc3RvcikuYmVnaW4o
KSwgZW5kID0gZWxlbWVudENoaWxkcmVuKGR1bW15U3BhbkFuY2VzdG9yKS5lbmQoKTsgY2hpbGQg
IT0gZW5kOyArK2NoaWxkKSB7CisgICAgYXV0byBjaGlsZHJlbiA9IGVsZW1lbnRDaGlsZHJlbigq
ZHVtbXlTcGFuQW5jZXN0b3IpOworICAgIGZvciAoYXV0byBjaGlsZCA9IGNoaWxkcmVuLmJlZ2lu
KCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKICAgICAg
ICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3BhbigmKmNoaWxk
KSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmKmNoaWxkKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw4ICs3MTIsOCBAQCBzdGF0
aWMgdm9pZCByZW1vdmVIZWFkQ29udGVudHMoUmVwbGFjZW1lCiAKICAgICBWZWN0b3I8RWxlbWVu
dCo+IHRvUmVtb3ZlOwogCi0gICAgYXV0byBpdCA9IGVsZW1lbnREZXNjZW5kYW50cyhmcmFnbWVu
dC5mcmFnbWVudCgpKS5iZWdpbigpOwotICAgIGF1dG8gZW5kID0gZWxlbWVudERlc2NlbmRhbnRz
KGZyYWdtZW50LmZyYWdtZW50KCkpLmVuZCgpOworICAgIGF1dG8gaXQgPSBlbGVtZW50RGVzY2Vu
ZGFudHMoKmZyYWdtZW50LmZyYWdtZW50KCkpLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSBlbGVt
ZW50RGVzY2VuZGFudHMoKmZyYWdtZW50LmZyYWdtZW50KCkpLmVuZCgpOwogICAgIHdoaWxlIChp
dCAhPSBlbmQpIHsKICAgICAgICAgaWYgKGl0LT5oYXNUYWdOYW1lKGJhc2VUYWcpIHx8IGl0LT5o
YXNUYWdOYW1lKGxpbmtUYWcpIHx8IGl0LT5oYXNUYWdOYW1lKG1ldGFUYWcpIHx8IGl0LT5oYXNU
YWdOYW1lKHN0eWxlVGFnKSB8fCBpc0hUTUxUaXRsZUVsZW1lbnQoKml0KSkgewogICAgICAgICAg
ICAgdG9SZW1vdmUuYXBwZW5kKCYqaXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDggQEAgc3RhdGljIHZvaWQgY29tcGxldGVV
UkxzKERvY3VtZW50RnJhZ21lbgogCiAgICAgVVJMIHBhcnNlZEJhc2VVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBiYXNlVVJMKTsKIAotICAgIGZvciAoYXV0byBlbGVtZW50ID0gZWxlbWVudERlc2NlbmRh
bnRzKGZyYWdtZW50KS5iZWdpbigpLCBlbmQgPSBlbGVtZW50RGVzY2VuZGFudHMoZnJhZ21lbnQp
LmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7CisgICAgYXV0byBkZXNjZW5kYW50
cyA9IGVsZW1lbnREZXNjZW5kYW50cygqZnJhZ21lbnQpOworICAgIGZvciAoYXV0byBlbGVtZW50
ID0gZGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7IGVsZW1lbnQg
IT0gZW5kOyArK2VsZW1lbnQpIHsKICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1dGVz
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZWxl
bWVudC0+YXR0cmlidXRlQ291bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFw
cGxldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFw
cGxldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBcHBsZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBA
IHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChQbHUKICAgICAgICAgcGFyYW1W
YWx1ZXMuYXBwZW5kKG1heVNjcmlwdC5zdHJpbmcoKSk7CiAgICAgfQogCi0gICAgYXV0byBwYXJh
bUNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8SFRNTFBhcmFtRWxlbWVudD4odGhpcyk7CisgICAg
YXV0byBwYXJhbUNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8SFRNTFBhcmFtRWxlbWVudD4oKnRo
aXMpOwogICAgIGZvciAoYXV0byBwYXJhbSA9IHBhcmFtQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0g
cGFyYW1DaGlsZHJlbi5lbmQoKTsgcGFyYW0gIT0gZW5kOyArK3BhcmFtKSB7CiAgICAgICAgIGlm
IChwYXJhbS0+bmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDcsNyAr
NzQ3LDcgQEAgVHJhbnNsYXRlQXR0cmlidXRlTW9kZSBIVE1MRWxlbWVudDo6dHJhbgogCiBib29s
IEhUTUxFbGVtZW50Ojp0cmFuc2xhdGUoKSBjb25zdAogewotICAgIGF1dG8gbGluZWFnZSA9IGxp
bmVhZ2VPZlR5cGU8SFRNTEVsZW1lbnQ+KHRoaXMpOworICAgIGF1dG8gbGluZWFnZSA9IGxpbmVh
Z2VPZlR5cGU8SFRNTEVsZW1lbnQ+KCp0aGlzKTsKICAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGxp
bmVhZ2UuYmVnaW4oKSwgZW5kID0gbGluZWFnZS5lbmQoKTsgZWxlbWVudCAhPSBlbmQ7ICsrZWxl
bWVudCkgewogICAgICAgICBUcmFuc2xhdGVBdHRyaWJ1dGVNb2RlIG1vZGUgPSBlbGVtZW50LT50
cmFuc2xhdGVBdHRyaWJ1dGVNb2RlKCk7CiAgICAgICAgIGlmIChtb2RlID09IFRyYW5zbGF0ZUF0
dHJpYnV0ZUluaGVyaXQpCkBAIC05NTQsNyArOTU0LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRq
dXN0RGlyZWN0aW9uYWxpdHlJZgogICAgIGlmIChvbGRNYXJrZWROb2RlKQogICAgICAgICBzZXRI
YXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KG9sZE1hcmtlZE5vZGUsIGZhbHNlKTsKIAotICAgIGF1
dG8gbGluZWFnZSA9IGxpbmVhZ2VPZlR5cGU8SFRNTEVsZW1lbnQ+KHRoaXMpOworICAgIGF1dG8g
bGluZWFnZSA9IGxpbmVhZ2VPZlR5cGU8SFRNTEVsZW1lbnQ+KCp0aGlzKTsKICAgICBmb3IgKGF1
dG8gZWxlbWVudFRvQWRqdXN0ID0gbGluZWFnZS5iZWdpbigpLCBlbmQgPSBsaW5lYWdlLmVuZCgp
OyBlbGVtZW50VG9BZGp1c3QgIT0gZW5kOyArK2VsZW1lbnRUb0FkanVzdCkgewogICAgICAgICBp
ZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eSgmKmVsZW1lbnRUb0FkanVzdCkpIHsKICAg
ICAgICAgICAgIGVsZW1lbnRUb0FkanVzdC0+Y2FsY3VsYXRlQW5kQWRqdXN0RGlyZWN0aW9uYWxp
dHkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNw
cAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBQYXNzUmVmUHRyPEhU
TUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsCiAKIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6
aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcihFbGVtZW50KiBiYXNlKQogewotICAgIGF1dG8g
Zm9ybUNvbnRyb2xEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KGJhc2UpOworICAgIGF1dG8gZm9ybUNvbnRyb2xEZXNjZW5kYW50cyA9IGRlc2Nl
bmRhbnRzT2ZUeXBlPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpiYXNlKTsKICAgICBmb3IgKGF1
dG8gY29udHJvbCA9IGZvcm1Db250cm9sRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gZm9ybUNv
bnRyb2xEZXNjZW5kYW50cy5lbmQoKTsgY29udHJvbCAhPSBlbmQ7ICsrY29udHJvbCkKICAgICAg
ICAgY29udHJvbC0+YW5jZXN0b3JEaXNhYmxlZFN0YXRlV2FzQ2hhbmdlZCgpOwogfQpAQCAtNjcs
NyArNjcsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlCiB7CiAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZSk7CiAKLSAg
ICBhdXRvIGxlZ2VuZENoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8SFRNTExlZ2VuZEVsZW1lbnQ+
KHRoaXMpOworICAgIGF1dG8gbGVnZW5kQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxIVE1MTGVn
ZW5kRWxlbWVudD4oKnRoaXMpOwogICAgIGZvciAoYXV0byBsZWdlbmQgPSBsZWdlbmRDaGlsZHJl
bi5iZWdpbigpLCBlbmQgPSBsZWdlbmRDaGlsZHJlbi5lbmQoKTsgbGVnZW5kICE9IGVuZDsgKyts
ZWdlbmQpCiAgICAgICAgIGludmFsaWRhdGVEaXNhYmxlZFN0YXRlVW5kZXIoJipsZWdlbmQpOwog
fQpAQCAtOTAsNyArOTAsNyBAQCBSZW5kZXJFbGVtZW50KiBIVE1MRmllbGRTZXRFbGVtZW50Ojpj
cmVhCiAKIEhUTUxMZWdlbmRFbGVtZW50KiBIVE1MRmllbGRTZXRFbGVtZW50OjpsZWdlbmQoKSBj
b25zdAogewotICAgIHJldHVybiBjb25zdF9jYXN0PEhUTUxMZWdlbmRFbGVtZW50Kj4oZGVzY2Vu
ZGFudHNPZlR5cGU8SFRNTExlZ2VuZEVsZW1lbnQ+KHRoaXMpLmZpcnN0KCkpOworICAgIHJldHVy
biBjb25zdF9jYXN0PEhUTUxMZWdlbmRFbGVtZW50Kj4oZGVzY2VuZGFudHNPZlR5cGU8SFRNTExl
Z2VuZEVsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVj
dGlvbj4gSFRNTEZpZWxkU2V0RWxlbWVudDo6ZWxlbWVudHMoKQpAQCAtMTA4LDcgKzEwOCw3IEBA
IHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6cmVmcmVzaEVsZW1lbnQKIAogICAgIG1fYXNzb2Np
YXRlZEVsZW1lbnRzLmNsZWFyKCk7CiAKLSAgICBhdXRvIGRlc2NlbmRhbnRzID0gZWxlbWVudERl
c2NlbmRhbnRzKGNvbnN0X2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudCo+KHRoaXMpKTsKKyAgICBh
dXRvIGRlc2NlbmRhbnRzID0gZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8SFRNTEZpZWxk
U2V0RWxlbWVudCY+KCp0aGlzKSk7CiAgICAgZm9yIChhdXRvIGVsZW1lbnQgPSBkZXNjZW5kYW50
cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgZWxlbWVudCAhPSBlbmQ7ICsrZWxl
bWVudCkgewogICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAg
ICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxPYmplY3RFbGVtZW50
KCplbGVtZW50KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBSZW5k
ZXJFbGVtZW50KiBIVE1MRnJhbWVTZXRFbGVtZW50OjpjcmVhCiAKIEhUTUxGcmFtZVNldEVsZW1l
bnQqIEhUTUxGcmFtZVNldEVsZW1lbnQ6OmZpbmRDb250YWluaW5nKEVsZW1lbnQqIGRlc2NlbmRh
bnQpCiB7Ci0gICAgcmV0dXJuIGFuY2VzdG9yc09mVHlwZTxIVE1MRnJhbWVTZXRFbGVtZW50Pihk
ZXNjZW5kYW50KS5maXJzdCgpOworICAgIHJldHVybiBhbmNlc3RvcnNPZlR5cGU8SFRNTEZyYW1l
U2V0RWxlbWVudD4oKmRlc2NlbmRhbnQpLmZpcnN0KCk7CiB9CiAKIHZvaWQgSFRNTEZyYW1lU2V0
RWxlbWVudDo6d2lsbEF0dGFjaFJlbmRlcmVycygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMYWJlbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTExhYmVsRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcg
QEAgTGFiZWxhYmxlRWxlbWVudCogSFRNTExhYmVsRWxlbWVudDo6Y29udAogICAgICAgICAvLyBT
ZWFyY2ggdGhlIGNoaWxkcmVuIGFuZCBkZXNjZW5kYW50cyBvZiB0aGUgbGFiZWwgZWxlbWVudCBm
b3IgYSBmb3JtIGVsZW1lbnQuCiAgICAgICAgIC8vIHBlciBodHRwOi8vZGV2LnczLm9yZy9odG1s
NS9zcGVjL092ZXJ2aWV3Lmh0bWwjdGhlLWxhYmVsLWVsZW1lbnQKICAgICAgICAgLy8gdGhlIGZv
cm0gZWxlbWVudCBtdXN0IGJlICJsYWJlbGFibGUgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQiLgot
ICAgICAgICBhdXRvIGxhYmVsYWJsZURlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8TGFi
ZWxhYmxlRWxlbWVudD4odGhpcyk7CisgICAgICAgIGF1dG8gbGFiZWxhYmxlRGVzY2VuZGFudHMg
PSBkZXNjZW5kYW50c09mVHlwZTxMYWJlbGFibGVFbGVtZW50PigqdGhpcyk7CiAgICAgICAgIGZv
ciAoYXV0byBsYWJlbGFibGVFbGVtZW50ID0gbGFiZWxhYmxlRGVzY2VuZGFudHMuYmVnaW4oKSwg
ZW5kID0gbGFiZWxhYmxlRGVzY2VuZGFudHMuZW5kKCk7IGxhYmVsYWJsZUVsZW1lbnQgIT0gZW5k
OyArK2xhYmVsYWJsZUVsZW1lbnQpIHsKICAgICAgICAgICAgIGlmIChsYWJlbGFibGVFbGVtZW50
LT5zdXBwb3J0TGFiZWxzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICYqbGFiZWxhYmxlRWxl
bWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIFBhc3NSZWZQdHI8SFRNTExl
Z2VuZEVsZW1lbnQ+IEhUTUxMZWdlbmQKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxMZWdl
bmRFbGVtZW50Ojphc3NvY2lhdGVkQ29udHJvbCgpCiB7CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUn
cyBhIGZpZWxkc2V0IGJlbG9uZ2luZyB0byB0aGlzIGxlZ2VuZC4KLSAgICBhdXRvIGVuY2xvc2lu
Z0ZpZWxkc2V0ID0gYW5jZXN0b3JzT2ZUeXBlPEhUTUxGaWVsZFNldEVsZW1lbnQ+KHRoaXMpLmZp
cnN0KCk7CisgICAgYXV0byBlbmNsb3NpbmdGaWVsZHNldCA9IGFuY2VzdG9yc09mVHlwZTxIVE1M
RmllbGRTZXRFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKICAgICBpZiAoIWVuY2xvc2luZ0ZpZWxk
c2V0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZpbmQgZmlyc3QgZm9ybSBl
bGVtZW50IGluc2lkZSB0aGUgZmllbGRzZXQgdGhhdCBpcyBub3QgYSBsZWdlbmQgZWxlbWVudC4K
ICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNvbnNpZGVyIHRhYmluZGV4PwotICAgIHJldHVybiBk
ZXNjZW5kYW50c09mVHlwZTxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbmNsb3NpbmdGaWVsZHNl
dCkuZmlyc3QoKTsKKyAgICByZXR1cm4gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKmVuY2xvc2luZ0ZpZWxkc2V0KS5maXJzdCgpOwogfQogCiB2b2lkIEhUTUxMZWdl
bmRFbGVtZW50Ojpmb2N1cyhib29sLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTU3OTIzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDcgKzYyLDggQEAgYm9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChMYXlvdQog
ewogICAgIEhUTUxBcmVhRWxlbWVudCogZGVmYXVsdEFyZWEgPSAwOwogCi0gICAgZm9yIChhdXRv
IGFyZWEgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+KHRoaXMpLmJlZ2luKCks
IGVuZCA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4odGhpcykuZW5kKCk7IGFy
ZWEgIT0gZW5kOyArK2FyZWEpIHsKKyAgICBhdXRvIGFyZWFEZXNjZW5kYW50cyA9IGRlc2NlbmRh
bnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVudD4oKnRoaXMpOworICAgIGZvciAoYXV0byBhcmVhID0g
YXJlYURlc2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGFyZWFEZXNjZW5kYW50cy5lbmQoKTsgYXJl
YSAhPSBlbmQ7ICsrYXJlYSkgewogICAgICAgICBpZiAoYXJlYS0+aXNEZWZhdWx0KCkpIHsKICAg
ICAgICAgICAgIGlmICghZGVmYXVsdEFyZWEpCiAgICAgICAgICAgICAgICAgZGVmYXVsdEFyZWEg
PSAmKmFyZWE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsCiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChkZXNjZW5kYW50c09mVHlwZTxIVE1MVHJhY2tFbGVtZW50Pih0aGlz
KS5maXJzdCgpKQorICAgIGlmIChkZXNjZW5kYW50c09mVHlwZTxIVE1MVHJhY2tFbGVtZW50Pigq
dGhpcykuZmlyc3QoKSkKICAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENvbmZpZ3VyZVRl
eHRUcmFja3MpOwogI2VuZGlmCiB9CkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZWxlY3RNZWRpYVJlc291cgogICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBt
ZWRpYSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBzcmMgYXR0cmlidXRlIGJ1dCBoYXMgYSBzb3Vy
Y2UgCiAgICAgICAgIC8vIGVsZW1lbnQgY2hpbGQsIHRoZW4gbGV0IG1vZGUgYmUgY2hpbGRyZW4g
YW5kIGxldCBjYW5kaWRhdGUgYmUgdGhlIGZpcnN0IHN1Y2ggCiAgICAgICAgIC8vIHNvdXJjZSBl
bGVtZW50IGNoaWxkIGluIHRyZWUgb3JkZXIuCi0gICAgICAgIGlmIChhdXRvIGZpcnN0U291cmNl
ID0gY2hpbGRyZW5PZlR5cGU8SFRNTFNvdXJjZUVsZW1lbnQ+KHRoaXMpLmZpcnN0KCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gZmlyc3RTb3VyY2UgPSBjaGlsZHJlbk9mVHlwZTxIVE1MU291cmNlRWxl
bWVudD4oKnRoaXMpLmZpcnN0KCkpIHsKICAgICAgICAgICAgIG1vZGUgPSBjaGlsZHJlbjsKICAg
ICAgICAgICAgIG1fbmV4dENoaWxkTm9kZVRvQ29uc2lkZXIgPSBmaXJzdFNvdXJjZTsKICAgICAg
ICAgICAgIG1fY3VycmVudFNvdXJjZU5vZGUgPSAwOwpAQCAtMTQ0NCw4ICsxNDQ0LDggQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbgogICAgIGJvb2wgdHJhY2tJc0xv
YWRlZCA9IHRydWU7CiAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OlRy
YWNrRWxlbWVudCkgewogICAgICAgICB0cmFja0lzTG9hZGVkID0gZmFsc2U7Ci0gICAgICAgIGF1
dG8gZW5kID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRyYWNrRWxlbWVudD4odGhpcykuZW5kKCk7Ci0g
ICAgICAgIGZvciAoYXV0byB0cmFja0VsZW1lbnQgPSBjaGlsZHJlbk9mVHlwZTxIVE1MVHJhY2tF
bGVtZW50Pih0aGlzKS5iZWdpbigpOyB0cmFja0VsZW1lbnQgIT0gZW5kOyArK3RyYWNrRWxlbWVu
dCkgeworICAgICAgICBhdXRvIHRyYWNrQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxIVE1MVHJh
Y2tFbGVtZW50PigqdGhpcyk7CisgICAgICAgIGZvciAoYXV0byB0cmFja0VsZW1lbnQgPSB0cmFj
a0NoaWxkcmVuLmJlZ2luKCksIGVuZCA9IHRyYWNrQ2hpbGRyZW4uZW5kKCk7IHRyYWNrRWxlbWVu
dCAhPSBlbmQ7ICsrdHJhY2tFbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAodHJhY2tFbGVtZW50
LT50cmFjaygpID09IHRyYWNrKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+
cmVhZHlTdGF0ZSgpID09IEhUTUxUcmFja0VsZW1lbnQ6OkxPQURJTkcgfHwgdHJhY2tFbGVtZW50
LT5yZWFkeVN0YXRlKCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6TE9BREVEKQogICAgICAgICAgICAg
ICAgICAgICB0cmFja0lzTG9hZGVkID0gdHJ1ZTsKQEAgLTE2NzcsNyArMTY3Nyw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y2FuY2VsUGVuZGluZ0V2ZW4KICAgICBMT0coTWVkaWEsICJIVE1M
TWVkaWFFbGVtZW50OjpjYW5jZWxQZW5kaW5nRXZlbnRzQW5kQ2FsbGJhY2tzIik7CiAgICAgbV9h
c3luY0V2ZW50UXVldWUuY2FuY2VsQWxsRXZlbnRzKCk7CiAKLSAgICBhdXRvIHNvdXJjZUNoaWxk
cmVuID0gY2hpbGRyZW5PZlR5cGU8SFRNTFNvdXJjZUVsZW1lbnQ+KHRoaXMpOworICAgIGF1dG8g
c291cmNlQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxIVE1MU291cmNlRWxlbWVudD4oKnRoaXMp
OwogICAgIGZvciAoYXV0byBzb3VyY2UgPSBzb3VyY2VDaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBz
b3VyY2VDaGlsZHJlbi5lbmQoKTsgc291cmNlICE9IGVuZDsgKytzb3VyY2UpCiAgICAgICAgIHNv
dXJjZS0+Y2FuY2VsUGVuZGluZ0Vycm9yRXZlbnQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDcgKzE1NCw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnBhcmFtZXRlcnNGb3JQbHUKICAg
ICAKICAgICAvLyBTY2FuIHRoZSBQQVJBTSBjaGlsZHJlbiBhbmQgc3RvcmUgdGhlaXIgbmFtZS92
YWx1ZSBwYWlycy4KICAgICAvLyBHZXQgdGhlIFVSTCBhbmQgdHlwZSBmcm9tIHRoZSBwYXJhbXMg
aWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIHRoZW0uCi0gICAgYXV0byBwYXJhbUNoaWxkcmVuID0g
Y2hpbGRyZW5PZlR5cGU8SFRNTFBhcmFtRWxlbWVudD4odGhpcyk7CisgICAgYXV0byBwYXJhbUNo
aWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8SFRNTFBhcmFtRWxlbWVudD4oKnRoaXMpOwogICAgIGZv
ciAoYXV0byBwYXJhbSA9IHBhcmFtQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gcGFyYW1DaGlsZHJl
bi5lbmQoKTsgcGFyYW0gIT0gZW5kOyArK3BhcmFtKSB7CiAgICAgICAgIFN0cmluZyBuYW1lID0g
cGFyYW0tPm5hbWUoKTsKICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQpAQCAtNDQ4LDcgKzQ0
OCw4IEBAIGJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmNvbnRhaW5zSmF2YUFwcGwKICAgICBpZiAo
TUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoZ2V0QXR0cmlidXRlKHR5cGVB
dHRyKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZm9yIChhdXRvIGNoaWxkID0gZWxl
bWVudENoaWxkcmVuKHRoaXMpLmJlZ2luKCksIGVuZCA9IGVsZW1lbnRDaGlsZHJlbih0aGlzKS5l
bmQoKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7CisgICAgYXV0byBjaGlsZHJlbiA9IGVsZW1l
bnRDaGlsZHJlbigqdGhpcyk7CisgICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4o
KSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkgewogICAgICAg
ICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpICYmIGVxdWFsSWdub3JpbmdDYXNlKGNo
aWxkLT5nZXROYW1lQXR0cmlidXRlKCksICJ0eXBlIikKICAgICAgICAgICAgICYmIE1JTUVUeXBl
UmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKGNoaWxkLT5nZXRBdHRyaWJ1dGUodmFsdWVB
dHRyKS5zdHJpbmcoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAJKHJldmlzaW9uIDE1Nzky
MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCB2b2lkIFBsYWNlaG9sZGVyRG9jdW1lbnQ6OmNy
ZWF0ZVJlbmRlclRyCiB7CiAgICAgQVNTRVJUKCFhdHRhY2hlZCgpKTsKIAotICAgIGF1dG8gY2hp
bGRyZW4gPSBlbGVtZW50Q2hpbGRyZW4odGhpcyk7CisgICAgYXV0byBjaGlsZHJlbiA9IGVsZW1l
bnRDaGlsZHJlbigqdGhpcyk7CiAgICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4o
KSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkKICAgICAgICAg
U3R5bGU6OmF0dGFjaFJlbmRlclRyZWUoKmNoaWxkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxNTc5
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IEZpbHRlckVmZmVjdFJlbgogICAgIC8vIFRoaXMgbWF5IG5lZWQgYSBzcGVjIGNsYXJpZmlj
YXRpb24uCiAgICAgYXV0byBidWlsZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdGaWx0ZXJCdWls
ZGVyPihwcmV2aW91c0VmZmVjdCwgU291cmNlQWxwaGE6OmNyZWF0ZSh0aGlzKSk7CiAKLSAgICBh
dXRvIGF0dHJpYnV0ZXNDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyKTsKKyAgICBhdXRvIGF0dHJpYnV0ZXNDaGlsZHJl
biA9IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4o
KmZpbHRlcik7CiAgICAgZm9yIChhdXRvIGl0ID0gYXR0cmlidXRlc0NoaWxkcmVuLmJlZ2luKCks
IGVuZCA9IGF0dHJpYnV0ZXNDaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZWZmZWN0RWxlbWVudCA9
ICYqaXQ7CiAgICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQtPmJ1aWxkKGJ1aWxkZXIuZ2V0
KCksIHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gMTU3OTIzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXI6OmRyYXdDb250ZQogICAgIHZpZXcoKS5mcmFtZVZpZXcoKS5zZXRQYWludEJlaGF2
aW9yKG9sZEJlaGF2aW9yIHwgUGFpbnRCZWhhdmlvclJlbmRlcmluZ1NWR01hc2spOwogCiAgICAg
Ly8gRHJhdyBhbGwgY2xpcFBhdGggY2hpbGRyZW4gaW50byBhIGdsb2JhbCBtYXNrLgotICAgIGF1
dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50PigmY2xpcFBhdGhFbGVtZW50
KCkpOworICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50PihjbGlw
UGF0aEVsZW1lbnQoKSk7CiAgICAgZm9yIChhdXRvIGl0ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5k
ID0gY2hpbGRyZW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBTVkdFbGVtZW50
JiBjaGlsZCA9ICppdDsKICAgICAgICAgYXV0byByZW5kZXJlciA9IGNoaWxkLnJlbmRlcmVyKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDcgKzk1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJl
bmRlcgogCiAgICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKICAgICBhdXRvIGJ1aWxk
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZShmaWx0ZXIpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGF1dG8gY2hp
bGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM+KCZmaWx0ZXJFbGVtZW50KCkpOworICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlw
ZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQoKSk7
CiAgICAgZm9yIChhdXRvIGVsZW1lbnQgPSBjaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBjaGlsZHJl
bi5lbmQoKTsgZWxlbWVudCAhPSBlbmQ7ICsrZWxlbWVudCkgewogICAgICAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3QgPSBlbGVtZW50LT5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIp
OwogICAgICAgICBpZiAoIWVmZmVjdCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9u
IDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbgogICAgIH0KIAogICAgIC8vIERyYXcgdGhl
IGNvbnRlbnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgYXV0byBjaGlsZHJlbiA9IGNoaWxk
cmVuT2ZUeXBlPFNWR0VsZW1lbnQ+KCZtYXNrRWxlbWVudCgpKTsKKyAgICBhdXRvIGNoaWxkcmVu
ID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4obWFza0VsZW1lbnQoKSk7CiAgICAgZm9yIChh
dXRvIGl0ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBTVkdFbGVtZW50JiBjaGlsZCA9ICppdDsKICAgICAgICAgYXV0
byByZW5kZXJlciA9IGNoaWxkLnJlbmRlcmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShy
ZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsNyBAQCBQ
YXNzT3duUHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjCiAgICAgICAgIGNvbnRlbnRU
cmFuc2Zvcm1hdGlvbiA9IHRpbGVJbWFnZVRyYW5zZm9ybTsKIAogICAgIC8vIERyYXcgdGhlIGNv
bnRlbnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgYXV0byBjaGlsZHJlbiA9IGNoaWxkcmVu
T2ZUeXBlPFNWR0VsZW1lbnQ+KGF0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCkpOwor
ICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50PigqYXR0cmlidXRl
cy5wYXR0ZXJuQ29udGVudEVsZW1lbnQoKSk7CiAgICAgZm9yIChhdXRvIGl0ID0gY2hpbGRyZW4u
YmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBjb25zdCBTVkdFbGVtZW50JiBjaGlsZCA9ICppdDsKICAgICAgICAgaWYgKCFjaGlsZC5yZW5k
ZXJlcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRGVmRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlw
aERlZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgU1ZH
QWx0R2x5cGhEZWZFbGVtZW50OjpoYXNWYWxpZEdseXAKICAgICBib29sIGZvdW50Rmlyc3RHbHlw
aFJlZiA9IGZhbHNlOwogICAgIGJvb2wgZm91bmRGaXJzdEFsdEdseXBoSXRlbSA9IGZhbHNlOwog
Ci0gICAgYXV0byBzdmdDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1lbnQ+KHRoaXMp
OworICAgIGF1dG8gc3ZnQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50PigqdGhp
cyk7CiAgICAgZm9yIChhdXRvIGl0ID0gc3ZnQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gc3ZnQ2hp
bGRyZW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBTVkdFbGVtZW50
JiBjaGlsZCA9ICppdDsKICAgICAgICAgaWYgKCFmb3VuZEZpcnN0QWx0R2x5cGhJdGVtICYmIGlz
U1ZHR2x5cGhSZWZFbGVtZW50KGNoaWxkKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FsdEdseXBoSXRlbUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmNwcAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw4IEBAIGJvb2wgU1ZHQWx0R2x5cGhJdGVtRWxlbWVudDo6aGFzVmFsaWRHbHkK
ICAgICAvLyBIZXJlIHdlIGZpbGwgZ2x5cGhOYW1lcyBhbmQgcmV0dXJuIHRydWUgb25seSBpZiBh
bGwgcmVmZXJlbmNlZCBnbHlwaHMgYXJlIHZhbGlkIGFuZAogICAgIC8vIHRoZXJlIGlzIGF0IGxl
YXN0IG9uZSBnbHlwaC4KIAotICAgIGZvciAoYXV0byBnbHlwaFJlZiA9IGNoaWxkcmVuT2ZUeXBl
PFNWR0dseXBoUmVmRWxlbWVudD4odGhpcykuYmVnaW4oKSwgZW5kID0gY2hpbGRyZW5PZlR5cGU8
U1ZHR2x5cGhSZWZFbGVtZW50Pih0aGlzKS5lbmQoKTsgZ2x5cGhSZWYgIT0gZW5kOyArK2dseXBo
UmVmKSB7CisgICAgYXV0byBnbHlwaENoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHR2x5cGhS
ZWZFbGVtZW50PigqdGhpcyk7CisgICAgZm9yIChhdXRvIGdseXBoUmVmID0gZ2x5cGhDaGlsZHJl
bi5iZWdpbigpLCBlbmQgPSBnbHlwaENoaWxkcmVuLmVuZCgpOyBnbHlwaFJlZiAhPSBlbmQ7ICsr
Z2x5cGhSZWYpIHsKICAgICAgICAgU3RyaW5nIHJlZmVycmVkR2x5cGhOYW1lOwogICAgICAgICBp
ZiAoZ2x5cGhSZWYtPmhhc1ZhbGlkR2x5cGhFbGVtZW50KHJlZmVycmVkR2x5cGhOYW1lKSkKICAg
ICAgICAgICAgIGdseXBoTmFtZXMuYXBwZW5kKHJlZmVycmVkR2x5cGhOYW1lKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNp
b24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW0KICAgICBtX2FuaW1hdGlvblBhdGggPSBQYXRoKCk7CiAg
ICAgYm9vbCBmb3VuZE1QYXRoID0gZmFsc2U7CiAKLSAgICBhdXRvIG1QYXRoQ2hpbGRyZW4gPSBj
aGlsZHJlbk9mVHlwZTxTVkdNUGF0aEVsZW1lbnQ+KHRoaXMpOworICAgIGF1dG8gbVBhdGhDaGls
ZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR01QYXRoRWxlbWVudD4oKnRoaXMpOwogICAgIGZvciAo
YXV0byBtUGF0aCA9IG1QYXRoQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gbVBhdGhDaGlsZHJlbi5l
bmQoKTsgbVBhdGggIT0gZW5kOyArK21QYXRoKSB7CiAgICAgICAgIFNWR1BhdGhFbGVtZW50KiBw
YXRoRWxlbWVudCA9IG1QYXRoLT5wYXRoRWxlbWVudCgpOwogICAgICAgICBpZiAocGF0aEVsZW1l
bnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NzkyMykK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEwLDcgKzUxMCw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6YW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3IK
IAogYm9vbCBTVkdFbGVtZW50OjpoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKQogewotICAg
IGF1dG8gc3ZnQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50Pih0aGlzKTsKKyAg
ICBhdXRvIHN2Z0NoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRoaXMpOwog
ICAgIGZvciAoYXV0byBjaGlsZCA9IHN2Z0NoaWxkcmVuLmJlZ2luKCksIGVuZCA9IHN2Z0NoaWxk
cmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKICAgICAgICAgaWYgKCFjaGlsZC0+
aGF2ZUxvYWRlZFJlcXVpcmVkUmVzb3VyY2VzKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC05MjUsNyArOTI1LDcgQEAgU3RyaW5nIFNWR0VsZW1lbnQ6OnRpdGxlKCkgY29uc3QKIAog
ICAgIC8vIElmIHdlIGFyZW4ndCBhbiBpbnN0YW5jZSBpbiBhIDx1c2U+IG9yIHRoZSA8dXNlPiB0
aXRsZSB3YXMgbm90IGZvdW5kLCB0aGVuIGZpbmQgdGhlIGZpcnN0CiAgICAgLy8gPHRpdGxlPiBj
aGlsZCBvZiB0aGlzIGVsZW1lbnQuCi0gICAgYXV0byBmaXJzdFRpdGxlID0gZGVzY2VuZGFudHNP
ZlR5cGU8U1ZHVGl0bGVFbGVtZW50Pih0aGlzKS5maXJzdCgpOworICAgIGF1dG8gZmlyc3RUaXRs
ZSA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR1RpdGxlRWxlbWVudD4oKnRoaXMpLmZpcnN0KCk7CiAg
ICAgcmV0dXJuIGZpcnN0VGl0bGUgPyBjb25zdF9jYXN0PFNWR1RpdGxlRWxlbWVudCo+KGZpcnN0
VGl0bGUpLT5pbm5lclRleHQoKSA6IFN0cmluZygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDggQEAgUGFzc1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gYmx1ZTsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGFscGhhOwogCi0gICAgZm9y
IChhdXRvIGNoaWxkID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4odGhpcykuYmVnaW4oKSwg
ZW5kID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4odGhpcykuZW5kKCk7IGNoaWxkICE9IGVu
ZDsgKytjaGlsZCkgeworICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVt
ZW50PigqdGhpcyk7CisgICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5k
ID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkgewogICAgICAgICBTVkdF
bGVtZW50KiBlbGVtZW50ID0gJipjaGlsZDsKICAgICAgICAgaWYgKGlzU1ZHRkVGdW5jUkVsZW1l
bnQoZWxlbWVudCkpCiAgICAgICAgICAgICByZWQgPSB0b1NWR0ZFRnVuY1JFbGVtZW50KGVsZW1l
bnQpLT50cmFuc2ZlckZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVM
aWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxp
Z2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDggQEAgU1ZH
RkVMaWdodEVsZW1lbnQ6OlNWR0ZFTGlnaHRFbGVtZW50KGNvbgogCiBTVkdGRUxpZ2h0RWxlbWVu
dCogU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCog
c3ZnRWxlbWVudCkKIHsKLSAgICBmb3IgKGF1dG8gY2hpbGQgPSBjaGlsZHJlbk9mVHlwZTxTVkdF
bGVtZW50PihzdmdFbGVtZW50KS5iZWdpbigpLCBlbmQgPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVt
ZW50PihzdmdFbGVtZW50KS5lbmQoKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7CisgICAgYXV0
byBjaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1lbnQ+KCpzdmdFbGVtZW50KTsKKyAg
ICBmb3IgKGF1dG8gY2hpbGQgPSBjaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBjaGlsZHJlbi5lbmQo
KTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7CiAgICAgICAgIGlmIChpc1NWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudCgqY2hpbGQpIHx8IGlzU1ZHRkVQb2ludExpZ2h0RWxlbWVudCgqY2hpbGQpIHx8
IGlzU1ZHRkVTcG90TGlnaHRFbGVtZW50KCpjaGlsZCkpCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U1ZHRkVMaWdodEVsZW1lbnQqPihjb25zdF9jYXN0PFNWR0VsZW1lbnQqPigmKmNo
aWxkKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw4IEBAIFBhc3NSZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWUKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIG1l
cmdlSW5wdXRzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKIAotICAgIGZvciAoYXV0byBtZXJn
ZU5vZGUgPSBjaGlsZHJlbk9mVHlwZTxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KHRoaXMpLmJlZ2lu
KCksIGVuZCA9IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4odGhpcykuZW5k
KCk7IG1lcmdlTm9kZSAhPSBlbmQ7ICsrbWVyZ2VOb2RlKSB7CisgICAgYXV0byBjaGlsZHJlbiA9
IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpOworICAgIGZvciAo
YXV0byBtZXJnZU5vZGUgPSBjaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsg
bWVyZ2VOb2RlICE9IGVuZDsgKyttZXJnZU5vZGUpIHsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBt
ZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLT5pbjEo
KSk7CiAgICAgICAgIGlmICghbWVyZ2VFZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTU3OTIzKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNyArNzEsNyBAQCB2b2lkIFNWR0ZvbnRFbGVtZW50OjppbnZhbGlkYXRlR2x5cGhDYWNo
CiAKIGNvbnN0IFNWR01pc3NpbmdHbHlwaEVsZW1lbnQqIFNWR0ZvbnRFbGVtZW50OjpmaXJzdE1p
c3NpbmdHbHlwaEVsZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBjaGlsZHJlbk9mVHlwZTxT
VkdNaXNzaW5nR2x5cGhFbGVtZW50Pih0aGlzKS5maXJzdCgpOworICAgIHJldHVybiBjaGlsZHJl
bk9mVHlwZTxTVkdNaXNzaW5nR2x5cGhFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKIH0KIAogdm9p
ZCBTVkdGb250RWxlbWVudDo6cmVnaXN0ZXJMaWdhdHVyZXNJbkdseXBoQ2FjaGUoVmVjdG9yPFN0
cmluZz4mIGxpZ2F0dXJlcykKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIFNWR0ZvbnRFbGVtZW50
OjplbnN1cmVHbHlwaENhY2hlKCkKIAogICAgIGNvbnN0IFNWR01pc3NpbmdHbHlwaEVsZW1lbnQq
IGZpcnN0TWlzc2luZ0dseXBoRWxlbWVudCA9IG51bGxwdHI7CiAgICAgVmVjdG9yPFN0cmluZz4g
bGlnYXR1cmVzOwotICAgIGZvciAoYXV0byBjaGlsZCA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1l
bnQ+KHRoaXMpLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1lbnQ+KHRoaXMp
LmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKKyAgICBhdXRvIGNoaWxkcmVuID0gY2hp
bGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRoaXMpOworICAgIGZvciAoYXV0byBjaGlsZCA9IGNo
aWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hp
bGQpIHsKICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9ICYqY2hpbGQ7CiAgICAgICAgIGlm
IChpc1NWR0dseXBoRWxlbWVudChlbGVtZW50KSkgewogICAgICAgICAgICAgU1ZHR2x5cGhFbGVt
ZW50KiBnbHlwaCA9IHRvU1ZHR2x5cGhFbGVtZW50KGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjgsNyArMjI4LDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFj
ZQogICAgIH0KIAogICAgIC8vIHdlIGN1cnJlbnRseSBpZ25vcmUgYWxsIGJ1dCB0aGUgZmlyc3Qg
c3JjIGVsZW1lbnQsIGFsdGVybmF0aXZlbHkgd2UgY291bGQgY29uY2F0IHRoZW0KLSAgICBhdXRv
IHNyY0VsZW1lbnQgPSBjaGlsZHJlbk9mVHlwZTxTVkdGb250RmFjZVNyY0VsZW1lbnQ+KHRoaXMp
LmZpcnN0KCk7CisgICAgYXV0byBzcmNFbGVtZW50ID0gY2hpbGRyZW5PZlR5cGU8U1ZHRm9udEZh
Y2VTcmNFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKIAogICAgIGJvb2wgZGVzY3JpYmVzUGFyZW50
Rm9udCA9IGlzU1ZHRm9udEVsZW1lbnQocGFyZW50Tm9kZSgpKTsKICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBsaXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlU3JjRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlU3Jj
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZVNyY0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIFBh
c3NSZWZQdHI8U1ZHRm9udEZhY2VTcmNFbGVtZW50PiBTVkdGb24KIFBhc3NSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBTVkdGb250RmFjZVNyY0VsZW1lbnQ6OnNyY1ZhbHVlKCkgY29uc3QKIHsKICAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFy
YXRlZCgpOwotICAgIGF1dG8gc3ZnQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50
Pih0aGlzKTsKKyAgICBhdXRvIHN2Z0NoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVu
dD4oKnRoaXMpOwogICAgIGZvciAoYXV0byBjaGlsZCA9IHN2Z0NoaWxkcmVuLmJlZ2luKCksIGVu
ZCA9IHN2Z0NoaWxkcmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsKICAgICAgICAg
UmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHNyY1ZhbHVlOwogICAgICAgICBpZiAoaXNTVkdG
b250RmFjZVVyaUVsZW1lbnQoKmNoaWxkKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdH
cmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdH
cmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTc5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3
IEBAIFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiBTVkdHcmFkaWVudEUKIHsKICAgICBWZWN0
b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4gc3RvcHM7CiAKLSAgICBhdXRvIHN0b3BDaGlsZHJlbiA9
IGNoaWxkcmVuT2ZUeXBlPFNWR1N0b3BFbGVtZW50Pih0aGlzKTsKKyAgICBhdXRvIHN0b3BDaGls
ZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR1N0b3BFbGVtZW50PigqdGhpcyk7CiAgICAgZmxvYXQg
cHJldmlvdXNPZmZzZXQgPSAwLjBmOwogCiAgICAgZm9yIChhdXRvIHN0b3AgPSBzdG9wQ2hpbGRy
ZW4uYmVnaW4oKSwgZW5kID0gc3RvcENoaWxkcmVuLmVuZCgpOyBzdG9wICE9IGVuZDsgKytzdG9w
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTc5
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNyw3ICszMzcsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBTVkdTVkdFbGVtZW50
Ojpjb2xsCiB7CiAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHM7CiAKLSAgICBhdXRv
IHN2Z0Rlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8U1ZHRWxlbWVudD4ocmVmZXJlbmNl
RWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKKyAgICBhdXRvIHN2Z0Rlc2NlbmRh
bnRzID0gZGVzY2VuZGFudHNPZlR5cGU8U1ZHRWxlbWVudD4oKihyZWZlcmVuY2VFbGVtZW50ID8g
cmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpKTsKICAgICBmb3IgKGF1dG8gaXQgPSBzdmdEZXNjZW5k
YW50cy5iZWdpbigpLCBlbmQgPSBzdmdEZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIGNvbnN0IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSAmKml0OwogICAgICAg
ICBpZiAoY29sbGVjdCA9PSBDb2xsZWN0SW50ZXJzZWN0aW9uTGlzdCkgewpAQCAtNzc3LDcgKzc3
Nyw4IEBAIEVsZW1lbnQqIFNWR1NWR0VsZW1lbnQ6OmdldEVsZW1lbnRCeUlkKGMKIAogICAgIC8v
IEZhbGwgYmFjayB0byB0cmF2ZXJzaW5nIG91ciBzdWJ0cmVlLiBEdXBsaWNhdGUgaWRzIGFyZSBh
bGxvd2VkLCB0aGUgZmlyc3QgZm91bmQgd2lsbAogICAgIC8vIGJlIHJldHVybmVkLgotICAgIGZv
ciAoYXV0byBlbGVtZW50ID0gZWxlbWVudERlc2NlbmRhbnRzKHRoaXMpLmJlZ2luKCksIGVuZCA9
IGVsZW1lbnREZXNjZW5kYW50cyh0aGlzKS5lbmQoKTsgZWxlbWVudCAhPSBlbmQ7ICsrZWxlbWVu
dCkgeworICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMoKnRoaXMpOwor
ICAgIGZvciAoYXV0byBlbGVtZW50ID0gZGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gZGVzY2Vu
ZGFudHMuZW5kKCk7IGVsZW1lbnQgIT0gZW5kOyArK2VsZW1lbnQpIHsKICAgICAgICAgaWYgKGVs
ZW1lbnQtPmdldElkQXR0cmlidXRlKCkgPT0gaWQpCiAgICAgICAgICAgICByZXR1cm4gJiplbGVt
ZW50OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTd2l0Y2hFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBib29sIFNWR1N3aXRjaEVsZW1l
bnQ6OmNoaWxkU2hvdWxkQ3JlYXRlCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gZG9l
cyBub3QgZG8gd2hhdCB0aGUgY29tbWVudCBiZWxvdyBpbXBsaWVzIGl0IGRvZXMuCiAgICAgLy8g
SXQgd2lsbCBjcmVhdGUgYSByZW5kZXJlciBmb3IgYW55IHZhbGlkIFNWRyBlbGVtZW50IGNoaWxk
cmVuLCBub3QganVzdCB0aGUgZmlyc3Qgb25lLgotICAgIGF1dG8gc3ZnQ2hpbGRyZW4gPSBjaGls
ZHJlbk9mVHlwZTxTVkdFbGVtZW50Pih0aGlzKTsKKyAgICBhdXRvIHN2Z0NoaWxkcmVuID0gY2hp
bGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRoaXMpOwogICAgIGZvciAoYXV0byBlbGVtZW50ID0g
c3ZnQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gc3ZnQ2hpbGRyZW4uZW5kKCk7IGVsZW1lbnQgIT0g
ZW5kOyArK2VsZW1lbnQpIHsKICAgICAgICAgaWYgKCFlbGVtZW50LT5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE1NzkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBib29sIGlzRGlzYWxs
b3dlZEVsZW1lbnQoY29uc3QgRWwKIAogc3RhdGljIGJvb2wgc3VidHJlZUNvbnRhaW5zRGlzYWxs
b3dlZEVsZW1lbnQoU1ZHRWxlbWVudCYgc3RhcnQpCiB7Ci0gICAgYXV0byBkZXNjZW5kYW50cyA9
IGVsZW1lbnREZXNjZW5kYW50cygmc3RhcnQpOworICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVt
ZW50RGVzY2VuZGFudHMoc3RhcnQpOwogICAgIGZvciAoYXV0byBlbGVtZW50ID0gZGVzY2VuZGFu
dHMuYmVnaW4oKSwgZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7IGVsZW1lbnQgIT0gZW5kOyArK2Vs
ZW1lbnQpIHsKICAgICAgICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQoKmVsZW1lbnQpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02MDYsNyArNjA2LDcgQEAgdm9pZCBTVkdVc2VFbGVt
ZW50OjpidWlsZEluc3RhbmNlVHJlZShTVgogICAgIC8vIGlzIHRoZSBTVkdHRWxlbWVudCBvYmpl
Y3QgZm9yIHRoZSAnZycsIGFuZCB0aGVuIHR3byBjaGlsZCBTVkdFbGVtZW50SW5zdGFuY2Ugb2Jq
ZWN0cywgZWFjaCBvZiB3aGljaCBoYXMKICAgICAvLyBpdHMgY29ycmVzcG9uZGluZ0VsZW1lbnQg
dGhhdCBpcyBhbiBTVkdSZWN0RWxlbWVudCBvYmplY3QuCiAKLSAgICBhdXRvIHN2Z0NoaWxkcmVu
ID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4odGFyZ2V0KTsKKyAgICBhdXRvIHN2Z0NoaWxk
cmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRhcmdldCk7CiAgICAgZm9yIChhdXRv
IGVsZW1lbnQgPSBzdmdDaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBzdmdDaGlsZHJlbi5lbmQoKTsg
ZWxlbWVudCAhPSBlbmQ7ICsrZWxlbWVudCkgewogICAgICAgICAvLyBTa2lwIGFueSBub24tc3Zn
IG5vZGVzIG9yIGFueSBkaXNhbGxvd2VkIGVsZW1lbnQuCiAgICAgICAgIGlmIChpc0Rpc2FsbG93
ZWRFbGVtZW50KCplbGVtZW50KSkKQEAgLTY2NCw4ICs2NjQsOCBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lCiB7CiAgICAgQVNTRVJUKCFzdWJ0cmVlLmluRG9jdW1l
bnQoKSk7CiAgICAgVmVjdG9yPEVsZW1lbnQqPiB0b1JlbW92ZTsKLSAgICBhdXRvIGl0ID0gZWxl
bWVudERlc2NlbmRhbnRzKCZzdWJ0cmVlKS5iZWdpbigpOwotICAgIGF1dG8gZW5kID0gZWxlbWVu
dERlc2NlbmRhbnRzKCZzdWJ0cmVlKS5lbmQoKTsKKyAgICBhdXRvIGl0ID0gZWxlbWVudERlc2Nl
bmRhbnRzKHN1YnRyZWUpLmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSBlbGVtZW50RGVzY2VuZGFu
dHMoc3VidHJlZSkuZW5kKCk7CiAgICAgd2hpbGUgKGl0ICE9IGVuZCkgewogICAgICAgICBpZiAo
aXNEaXNhbGxvd2VkRWxlbWVudCgqaXQpKSB7CiAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
JippdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFp
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMTU3OTIzKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3
ICsyMjMsNyBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVEb2N1bWVudE9yCiB7CiAg
ICAgdW5zaWduZWQgdGltaW5nRWxlbWVudENvdW50ID0gMDsKIAotICAgIGF1dG8gc21pbERlc2Nl
bmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8U1ZHU01JTEVsZW1lbnQ+KG1fb3duZXJTVkdFbGVt
ZW50KTsKKyAgICBhdXRvIHNtaWxEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR1NN
SUxFbGVtZW50PigqbV9vd25lclNWR0VsZW1lbnQpOwogICAgIGZvciAoYXV0byBzbWlsRWxlbWVu
dCA9IHNtaWxEZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBzbWlsRGVzY2VuZGFudHMuZW5kKCk7
IHNtaWxFbGVtZW50ICE9IGVuZDsgKytzbWlsRWxlbWVudCkKICAgICAgICAgc21pbEVsZW1lbnQt
PnNldERvY3VtZW50T3JkZXJJbmRleCh0aW1pbmdFbGVtZW50Q291bnQrKyk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gMTU3OTIzKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFNWR0ltYWdlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdp
bigpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgZm9yZWlnbk9i
amVjdCBlbGVtZW50cyBzaW5jZSB0aGV5IGNhbiBsZWFrIGluZm9ybWF0aW9uIHdpdGggYXJiaXRy
YXJ5IEhUTUwgKGxpa2Ugc3BlbGxjaGVjayBvciBjb250cm9sIHRoZW1lKS4KLSAgICBpZiAoZGVz
Y2VuZGFudHNPZlR5cGU8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ+KHJvb3RFbGVtZW50KS5maXJz
dCgpKQorICAgIGlmIChkZXNjZW5kYW50c09mVHlwZTxTVkdGb3JlaWduT2JqZWN0RWxlbWVudD4o
KnJvb3RFbGVtZW50KS5maXJzdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBC
ZWNhdXNlIFNWRyBpbWFnZSByZW5kZXJpbmcgZGlzYWxsb3dzIGV4dGVybmFsIHJlc291cmNlcyBh
bmQgbGlua3MsCg==
</data>
<flag name="review"
          id="237699"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>