<?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>6523</bug_id>
          
          <creation_ts>2006-01-13 06:06:35 -0800</creation_ts>
          <short_desc>Extract data from SelectionController</short_desc>
          <delta_ts>2006-01-15 17:28:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Duncan Wilcox">duncan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28356</commentid>
    <comment_count>0</comment_count>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2006-01-13 06:06:35 -0800</bug_when>
    <thetext>The attached patch refactors the data portions of SelectionController into its own class, &quot;Selection&quot;.

The extracted data are the base/extent/start/end positions and cursor affinity. Also a couple cached 
values generated by validation are kept around in the new class.

This patch does away with all the different affinities (start/end/base/extent) that were never implemented 
properly, since affinity only makes sense when the selection is a caret (as per discussion with mjs and 
darin on #webkit).

This is a step in the development of bug 4582.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28357</commentid>
    <comment_count>1</comment_count>
      <attachid>5642</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2006-01-13 06:16:45 -0800</bug_when>
    <thetext>Created attachment 5642
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28360</commentid>
    <comment_count>2</comment_count>
      <attachid>5642</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-13 07:56:37 -0800</bug_when>
    <thetext>Comment on attachment 5642
patch

Please don&apos;t landed commented out lines like these:

+//#include &lt;qrect.h&gt;
+//#include &quot;editing/visible_text.h&quot;

I don&apos;t think Selection.h needs to include &quot;misc/shared.h&quot;.

For files like Selection.cpp we now are back to &quot;using namespace DOM&quot; rather
than individual &quot;using&quot; lines.

The copy constructor and assignment operator that are implemented for Selection
do exactly what the defaults would do. In those cases it&apos;s better to not
declare or define them and let the compiler take care of it.

Since Selection.h includes things like PassRefPtr.h and dom_position.h, those
includes can be removed from the top of SelectionController.

-	 case SelectionController::RANGE:
+	 case khtml::Selection::RANGE:

Why do we need a khtml:: prefix in the above code and other lines like it?

This seems like a nice next step. Over time we might refine and adjust what
Selection has vs. SelectionController, and change various clients that hold
SelectionController to hold Selection instead.

The above are minor quibbles but lets get answers to them before we do review+.

Did you run layout tests? Do they all give identical results?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28382</commentid>
    <comment_count>3</comment_count>
      <attachid>5649</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2006-01-13 16:53:05 -0800</bug_when>
    <thetext>Created attachment 5649
patch

As mentioned in #webkit, without the khtml:: prefix it doesn&apos;t compile, not
sure why.

Layout tests run fine.

All other issues should be addressed in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28390</commentid>
    <comment_count>4</comment_count>
      <attachid>5649</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-13 22:53:52 -0800</bug_when>
    <thetext>Comment on attachment 5649
patch

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5642</attachid>
            <date>2006-01-13 06:16:45 -0800</date>
            <delta_ts>2006-01-13 16:53:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>Selection.patch</filename>
            <type>text/plain</type>
            <size>107083</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3ht
bC9Eb2N1bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjA3MikKKysrIGtodG1sL3htbC9Eb2N1bWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTI2LDggKzExMjYsOCBAQCB2b2lkIERvY3Vt
ZW50SW1wbDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgY2FudmFzLT5jbGVhclNlbGVjdGlv
bigpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUG9zaXRpb24gc3RhcnRQb3MgPSBWaXNp
YmxlUG9zaXRpb24ocy5zdGFydCgpLCBzLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQo
KTsKLSAgICAgICAgUG9zaXRpb24gZW5kUG9zID0gVmlzaWJsZVBvc2l0aW9uKHMuZW5kKCksIHMu
ZW5kQWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gc3RhcnRQ
b3MgPSBWaXNpYmxlUG9zaXRpb24ocy5zdGFydCgpLCBzLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFs
ZW50KCk7CisgICAgICAgIFBvc2l0aW9uIGVuZFBvcyA9IFZpc2libGVQb3NpdGlvbihzLmVuZCgp
LCBzLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIGlmIChzdGFydFBvcy5p
c05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCAqc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCAqZW5kUmVuZGVyZXIgPSBlbmRQb3Mubm9kZSgpLT5yZW5kZXJl
cigpOwpJbmRleDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CShyZXZpc2lvbiAxMjA3MikKKysrIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNiw4ICs1MDYsOCBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAobV9tYXRjaFN0eWxlKQogICAgICAg
ICBtX2luc2VydGlvblN0eWxlID0gc3R5bGVBdFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKTsK
ICAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHNlbGVjdGlvbi5zdGFydCgp
LCBzZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZUVuZChzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5lbmRBZmZpbml0eSgpKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZm
aW5pdHkoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoc2VsZWN0aW9uLmVuZCgp
LCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgYm9vbCBzdGFydEF0U3RhcnRPZkJsb2NrID0g
aXNTdGFydE9mQmxvY2sodmlzaWJsZVN0YXJ0KTsKICAgICBib29sIHN0YXJ0QXRFbmRPZkJsb2Nr
ID0gaXNFbmRPZkJsb2NrKHZpc2libGVTdGFydCk7CiAgICAgYm9vbCBzdGFydEF0QmxvY2tCb3Vu
ZGFyeSA9IHN0YXJ0QXRTdGFydE9mQmxvY2sgfHwgc3RhcnRBdEVuZE9mQmxvY2s7CkBAIC04OTYs
NyArODk2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y29tcGxldGVIVAogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKG1fc2VsZWN0UmVwbGFjZW1lbnQpCi0gICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0LCBTRUxfREVGQVVM
VF9BRkZJTklUWSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihzdGFydCwgZW5kLCBTRUxfREVGQVVMVF9B
RkZJTklUWSkpOwogICAgIGVsc2UKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZCwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbi5oCShyZXZpc2lvbiAwKQor
Kysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgS0hUTUxfRURJVElOR19TRUxFQ1RJT05f
SAorI2RlZmluZSBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9ICisKKy8vI2luY2x1ZGUgPHFyZWN0
Lmg+CisjaW5jbHVkZSA8a3htbGNvcmUvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgInhtbC9kb21f
cG9zaXRpb24uaCIKKyNpbmNsdWRlICJ0ZXh0X2dyYW51bGFyaXR5LmgiCisjaW5jbHVkZSAibWlz
Yy9zaGFyZWQuaCIKKy8vI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV90ZXh0LmgiCisKK25hbWVz
cGFjZSBraHRtbCB7CisKK2NsYXNzIFNlbGVjdGlvbgoreworcHVibGljOgorICAgIGVudW0gRVN0
YXRlIHsgTk9ORSwgQ0FSRVQsIFJBTkdFIH07CisgICAgZW51bSBFRGlyZWN0aW9uIHsgRk9SV0FS
RCwgQkFDS1dBUkQsIFJJR0hULCBMRUZUIH07CisjZGVmaW5lIFNFTF9ERUZBVUxUX0FGRklOSVRZ
IERPV05TVFJFQU0KKworICAgIGZyaWVuZCBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOworCisg
ICAgdHlwZWRlZiBET006OlBvc2l0aW9uIFBvc2l0aW9uOworICAgIHR5cGVkZWYgRE9NOjpSYW5n
ZUltcGwgUmFuZ2VJbXBsOworICAgIHR5cGVkZWYgRE9NOjpOb2RlSW1wbCBOb2RlSW1wbDsKKwor
ICAgIFNlbGVjdGlvbigpOworICAgIFNlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmLCBjb25zdCBQ
b3NpdGlvbiAmLCBFQWZmaW5pdHkpOworICAgIFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJik7
CisKKyAgICBTZWxlY3Rpb24gJm9wZXJhdG9yPShjb25zdCBTZWxlY3Rpb24gJm8pOworICAgIAor
ICAgIEVTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIHZvaWQg
c2V0QWZmaW5pdHkoRUFmZmluaXR5IGFmZmluaXR5KSB7IG1fYWZmaW5pdHkgPSBhZmZpbml0eTsg
fQorICAgIEVBZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWZmaW5pdHk7IH0K
KworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHZvaWQgc2V0QmFzZShQb3NpdGlvbiBiYXNlKSB7
IG1fYmFzZSA9IGJhc2U7IH0KKyAgICB2b2lkIHNldEV4dGVudChQb3NpdGlvbiBleHRlbnQpIHsg
bV9leHRlbnQgPSBleHRlbnQ7IH0KKyAgICB2b2lkIHNldFN0YXJ0KFBvc2l0aW9uIHN0YXJ0KSB7
IG1fc3RhcnQgPSBzdGFydDsgfQorICAgIHZvaWQgc2V0RW5kKFBvc2l0aW9uIGVuZCkgeyBtX2Vu
ZCA9IGVuZDsgfQorICAgIFBvc2l0aW9uIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0K
KyAgICBQb3NpdGlvbiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudDsgfQorICAgIFBv
c2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIFBvc2l0aW9uIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkgPT0gTk9ORTsgfQorICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRlKCkgPT0gQ0FSRVQ7IH0KKyAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVy
biBzdGF0ZSgpID09IFJBTkdFOyB9CisgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkgIT0gTk9ORTsgfQorCisgICAgYm9vbCBpc0Jhc2VGaXJzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZUlzRmlyc3Q7IH0KKworICAgIFBhc3NSZWZQdHI8RE9NOjpSYW5nZUlt
cGw+IHRvUmFuZ2UoKSBjb25zdDsKKworICAgIHZvaWQgZGVidWdQb3NpdGlvbigpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIHZvaWQgdmFsaWRhdGUoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSA9IENIQVJBQ1RFUik7CisgICAgdm9pZCBhZGp1c3RGb3JFZGl0YWJsZUNvbnRlbnQoKTsKKwor
ICAgIFBvc2l0aW9uIG1fYmFzZTsgICAgICAgICAgICAgIC8vIGJhc2UgcG9zaXRpb24gZm9yIHRo
ZSBzZWxlY3Rpb24KKyAgICBQb3NpdGlvbiBtX2V4dGVudDsgICAgICAgICAgICAvLyBleHRlbnQg
cG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24KKyAgICBQb3NpdGlvbiBtX3N0YXJ0OyAgICAgICAg
ICAgICAvLyBzdGFydCBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgorICAgIFBvc2l0aW9uIG1f
ZW5kOyAgICAgICAgICAgICAgIC8vIGVuZCBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgorCisg
ICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7ICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rvd25zdHJl
YW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0CisKKyAgICAvLyB0aGVzZSBhcmUgY2FjaGVkLCBjYW4g
YmUgcmVjYWxjdWxhdGVkIGJ5IHZhbGlkYXRlKCkKKyAgICBFU3RhdGUgbV9zdGF0ZTsgICAgICAg
ICAgICAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbgorICAgIGJvb2wgbV9iYXNlSXNG
aXJzdDsgICAgICAgICAgIC8vIHRydWUgaWYgYmFzZSBpcyBiZWZvcmUgdGhlIGV4dGVudAorfTsK
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWxlY3Rpb24gJmEsIGNvbnN0IFNlbGVj
dGlvbiAmYikKK3sKKyAgICByZXR1cm4gYS5zdGFydCgpID09IGIuc3RhcnQoKSAmJiBhLmVuZCgp
ID09IGIuZW5kKCkgJiYgYS5hZmZpbml0eSgpID09IGIuYWZmaW5pdHkoKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZWxlY3Rpb24gJmEsIGNvbnN0IFNlbGVjdGlvbiAmYikK
K3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBraHRtbAorCisj
ZW5kaWYgLy8gS0hUTUxfRURJVElOR19TRUxFQ1RJT05fSApJbmRleDoga2h0bWwvZWRpdGluZy9h
cHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL2FwcGx5
X3N0eWxlX2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjA3MikKKysrIGtodG1sL2VkaXRpbmcvYXBw
bHlfc3R5bGVfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw3ICszMDYsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjp1cGRhdGVTdGFydEVuZChQCiAgICAgaWYgKCFtX3VzZUVu
ZGluZ1NlbGVjdGlvbiAmJiAobmV3U3RhcnQgIT0gbV9zdGFydCB8fCBuZXdFbmQgIT0gbV9lbmQp
KQogICAgICAgICBtX3VzZUVuZGluZ1NlbGVjdGlvbiA9IHRydWU7CiAKLSAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihuZXdTdGFydCwgVlBfREVGQVVMVF9BRkZJTklU
WSwgbmV3RW5kLCBWUF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFNlbGVjdGlvbkNvbnRyb2xsZXIobmV3U3RhcnQsIG5ld0VuZCwgVlBfREVGQVVMVF9BRkZJTklU
WSkpOwogICAgIG1fc3RhcnQgPSBuZXdTdGFydDsKICAgICBtX2VuZCA9IG5ld0VuZDsKIH0KSW5k
ZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAkocmV2aXNpb24gMTIwNzIpCisr
KyBraHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNyArMTEyLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQoY29uc3QgRE9N
UwogICAgIC8vIERlbGV0ZSBhbnkgaW5zaWduaWZpY2FudCB0ZXh0IHRoYXQgY291bGQgZ2V0IGlu
IHRoZSB3YXkgb2Ygd2hpdGVzcGFjZSB0dXJuaW5nCiAgICAgLy8gb3V0IGNvcnJlY3RseSBhZnRl
ciB0aGUgaW5zZXJ0aW9uLgogICAgIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOwotICAg
IGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShzZWxlY3Rpb24uZW5kKCkudHJhaWxp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oc2VsZWN0aW9uLmVuZEFmZmluaXR5KCkpKTsKKyAgICBkZWxl
dGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oc2VsZWN0aW9uLmVuZCgpLnRyYWlsaW5nV2hp
dGVzcGFjZVBvc2l0aW9uKHNlbGVjdGlvbi5hZmZpbml0eSgpKSk7CiAKICAgICAvLyBGaWd1cmUg
b3V0IHRoZSBzdGFydFBvc2l0aW9uCiAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHNlbGVj
dGlvbi5zdGFydCgpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6
OmlucHV0KGNvbnN0IERPTVMKICAgICAgICAgbV9jaGFyYWN0ZXJzQWRkZWQgKz0gdGV4dC5sZW5n
dGgoKTsKICAgICB9CiAKLSAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxl
cihzdGFydFBvc2l0aW9uLCBET1dOU1RSRUFNLCBlbmRQb3NpdGlvbiwgU0VMX0RFRkFVTFRfQUZG
SU5JVFkpKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgRE9XTlNUUkVBTSkpOwogCiAgICAgLy8gSGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogICAgIC8vIEZJWE1FOiBJbXBy
b3ZlIHR5cGluZyBzdHlsZS4KQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEluc2VydFRleHRDb21t
YW5kOjppbnB1dChjb25zdCBET01TCiAgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUpOwog
CiAgICAgaWYgKCFzZWxlY3RJbnNlcnRlZFRleHQpCi0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlv
bihlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwgZW5kaW5nU2VsZWN0aW9uKCkuZW5kQWZmaW5pdHko
KSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwg
ZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CiB9CiAKIERPTTo6UG9zaXRpb24gSW5zZXJ0
VGV4dENvbW1hbmQ6Omluc2VydFRhYihQb3NpdGlvbiBwb3MpCkluZGV4OiBraHRtbC9lZGl0aW5n
L2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGto
dG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAJKHJldmlz
aW9uIDEyMDcyKQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9j
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE0ICsxMDcsMTQgQEAgdm9pZCBJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgUG9zaXRpb24gcG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgRUFmZmluaXR5IGFmZmlu
aXR5ID0gc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKTsKKyAgICBFQWZmaW5pdHkgYWZmaW5pdHkg
PSBzZWxlY3Rpb24uYWZmaW5pdHkoKTsKICAgICAgICAgCiAgICAgLy8gRGVsZXRlIHRoZSBjdXJy
ZW50IHNlbGVjdGlvbi4KICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICBj
YWxjdWxhdGVTdHlsZUJlZm9yZUluc2VydGlvbihwb3MpOwogICAgICAgICBkZWxldGVTZWxlY3Rp
b24oZmFsc2UsIGZhbHNlKTsKICAgICAgICAgcG9zID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KTsKLSAgICAgICAgYWZmaW5pdHkgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCk7
CisgICAgICAgIGFmZmluaXR5ID0gZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKTsKICAgICB9
CiAKICAgICBwb3MgPSBwb3NpdGlvbk91dHNpZGVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQocG9z
KTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAko
cmV2aXNpb24gMTIwNzIpCisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBJbnNlcnRMaW5l
QnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zLm5v
ZGUoKSkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0VGFiU3BhblBvc2l0aW9uKG5vZGVUb0luc2Vy
dCwgcG9zKTsKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFBvc2l0aW9uKG5vZGVUb0luc2Vy
dC0+dHJhdmVyc2VOZXh0Tm9kZSgpLCAwKSwgRE9XTlNUUkVBTSk7Ci0gICAgfSBlbHNlIGlmIChp
c0VuZE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKHBvcywgc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHko
KSkpKSB7CisgICAgfSBlbHNlIGlmIChpc0VuZE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKHBvcywg
c2VsZWN0aW9uLmFmZmluaXR5KCkpKSkgewogICAgICAgICBMT0coRWRpdGluZywgImlucHV0IG5l
d2xpbmUgY2FzZSAxIik7CiAgICAgICAgIC8vIENoZWNrIGZvciBhIHRyYWlsaW5nIEJSLiBJZiB0
aGVyZSBpc24ndCBvbmUsIHdlJ2xsIG5lZWQgdG8gaW5zZXJ0IGFuICJleHRyYSIgb25lLgogICAg
ICAgICAvLyBUaGlzIG1ha2VzIHRoZSAicmVhbCIgQlIgd2Ugd2FudCB0byBpbnNlcnQgYXBwZWFy
IGluIHRoZSByZW5kZXJpbmcgd2l0aG91dCBhbnkgCkluZGV4OiBraHRtbC9lZGl0aW5nL1NlbGVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9TZWxlY3Rpb24uY3BwCShyZXZp
c2lvbiAwKQorKysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAgCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2VsZWN0aW9uLmgiCisKKyNpbmNsdWRlICJkb20vZG9tX25vZGUuaCIKKyNp
bmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKKyNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX3N0eWxlLmgiCisjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgInZpc2li
bGVfcG9zaXRpb24uaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRJbXBsLmgiCisjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgorI2luY2x1ZGUg
InhtbC9kb21fbm9kZWltcGwuaCIKKyNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCisjaW5j
bHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCisKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRp
b25zLmg+CisKKyNkZWZpbmUgRURJVF9ERUJVRyAwCisKK3VzaW5nIERPTTo6RE9NU3RyaW5nOwor
dXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6Tm9kZUltcGw7Cit1c2luZyBET006
OlBvc2l0aW9uOwordXNpbmcgRE9NOjpSYW5nZTsKK3VzaW5nIERPTTo6UmFuZ2VJbXBsOworCitu
YW1lc3BhY2Uga2h0bWwgeworCitTZWxlY3Rpb246OlNlbGVjdGlvbigpCisgICAgOiBtX2FmZmlu
aXR5KERPV05TVFJFQU0pCisgICAgLCBtX3N0YXRlKE5PTkUpCisgICAgLCBtX2Jhc2VJc0ZpcnN0
KHRydWUpCit7Cit9CisKK1NlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZiYXNl
LCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHkpCisgICAgOiBtX2Jh
c2UoYmFzZSksIG1fZXh0ZW50KGV4dGVudCkKKyAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCisg
ICAgLCBtX3N0YXRlKE5PTkUpCisgICAgLCBtX2Jhc2VJc0ZpcnN0KHRydWUpCit7CisgICAgdmFs
aWRhdGUoKTsKK30KKworU2VsZWN0aW9uOjpTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZvKQor
ICAgIDogbV9iYXNlKG8ubV9iYXNlKSwgbV9leHRlbnQoby5tX2V4dGVudCkKKyAgICAsIG1fc3Rh
cnQoby5tX3N0YXJ0KSwgbV9lbmQoby5tX2VuZCkKKyAgICAsIG1fYWZmaW5pdHkoby5tX2FmZmlu
aXR5KQorICAgICwgbV9zdGF0ZShvLm1fc3RhdGUpCisgICAgLCBtX2Jhc2VJc0ZpcnN0KG8ubV9i
YXNlSXNGaXJzdCkKK3sKK30KKworU2VsZWN0aW9uICZTZWxlY3Rpb246Om9wZXJhdG9yPShjb25z
dCBTZWxlY3Rpb24gJm8pCit7CisgICAgbV9iYXNlID0gby5tX2Jhc2U7CisgICAgbV9leHRlbnQg
PSBvLm1fZXh0ZW50OworICAgIG1fc3RhcnQgPSBvLm1fc3RhcnQ7CisgICAgbV9lbmQgPSBvLm1f
ZW5kOworCisgICAgbV9zdGF0ZSA9IG8ubV9zdGF0ZTsKKyAgICBtX2FmZmluaXR5ID0gby5tX2Fm
ZmluaXR5OworCisgICAgbV9iYXNlSXNGaXJzdCA9IG8ubV9iYXNlSXNGaXJzdDsKKyAgICAKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgU2VsZWN0aW9uOjpjbGVhcigpCit7CisgICAgbV9h
ZmZpbml0eSA9IFNFTF9ERUZBVUxUX0FGRklOSVRZOworICAgIG1fYmFzZS5jbGVhcigpOworICAg
IG1fZXh0ZW50LmNsZWFyKCk7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb246
OnRvUmFuZ2UoKSBjb25zdAoreworICAgIGlmIChpc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiB1cGRhdGVkIGxheW91dCBzaW5jZSB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZAorICAgIC8vIGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBlZGl0
IGNvbW1hbmRzIHdoaWNoIG1vZGlmeSB0aGUgRE9NLgorICAgIC8vIEZhaWxpbmcgdG8gY2FsbCB0
aGlzIGNhbiByZXN1bHQgaW4gZXF1aXZhbGVudFhYWFBvc2l0aW9uIGNhbGxzIHJldHVybmluZwor
ICAgIC8vIGluY29ycmVjdCByZXN1bHRzLgorICAgIG1fc3RhcnQubm9kZSgpLT5nZXREb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXQoKTsKKworICAgIFBvc2l0aW9uIHMsIGU7CisgICAgaWYgKGlzQ2Fy
ZXQoKSkgeworICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQsIG1vdmUgdGhl
IHJhbmdlIHN0YXJ0IHVwc3RyZWFtLiBUaGlzIGhlbHBzIHVzIG1hdGNoCisgICAgICAgIC8vIHRo
ZSBjb252ZW50aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVkLCB3aGljaCBtYWtlIHN0eWxlIGRl
dGVybWluYXRpb25zIGJhc2VkCisgICAgICAgIC8vIG9uIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRo
ZSBjYXJldCwgaWYgYW55LiAKKyAgICAgICAgcyA9IG1fc3RhcnQudXBzdHJlYW0oKS5lcXVpdmFs
ZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigpOworICAgICAgICBlID0gczsKKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgYSByYW5nZSwgc2VsZWN0IHRo
ZSBtaW5pbXVtIHJhbmdlIHRoYXQgZW5jb21wYXNzZXMgdGhlIHNlbGVjdGlvbi4KKyAgICAgICAg
Ly8gQWdhaW4sIHRoaXMgaXMgdG8gbWF0Y2ggdGhlIGNvbnZlbnRpb25zIG9mIHRleHQgZWRpdG9y
cyB0ZXN0ZWQsIHdoaWNoIG1ha2Ugc3R5bGUgCisgICAgICAgIC8vIGRldGVybWluYXRpb25zIGJh
c2VkIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlbGVjdGlvbi4gCisgICAgICAgIC8v
IEZvciBpbnN0YW5jZSwgdGhpcyBvcGVyYXRpb24gaGVscHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhl
ICJYIiBzZWxlY3RlZCBiZWxvdyBpcyB0aGUgCisgICAgICAgIC8vIG9ubHkgdGhpbmcgc2VsZWN0
ZWQuIFRoZSByYW5nZSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gImxlYWsiIG91dCB0byB0aGUg
ZW5kIG9mIHRoZSAKKyAgICAgICAgLy8gcHJldmlvdXMgdGV4dCBub2RlLCBvciB0byB0aGUgYmVn
aW5uaW5nIG9mIHRoZSBuZXh0IHRleHQgbm9kZSwgZWFjaCBvZiB3aGljaCBoYXMgYSAKKyAgICAg
ICAgLy8gZGlmZmVyZW50IHN0eWxlLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gT24gYSB0cmVh
c3VyZSBtYXAsIDxiPlg8L2I+IG1hcmtzIHRoZSBzcG90LgorICAgICAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgXiBzZWxlY3RlZAorICAgICAgICAvLworICAgICAgICBBU1NFUlQoaXNSYW5n
ZSgpKTsKKyAgICAgICAgcyA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOworICAgICAgICBlID0gbV9l
bmQudXBzdHJlYW0oKTsKKyAgICAgICAgaWYgKFJhbmdlSW1wbDo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKHMubm9kZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSkgPiAwKSB7Cisg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJlZm9yZSB0aGUgZW5kLgorICAg
ICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUgdGhlIHN0YXJ0IGlmIGNvbGxh
cHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkLgorICAgICAgICAgICAg
UG9zaXRpb24gdG1wID0gczsKKyAgICAgICAgICAgIHMgPSBlOworICAgICAgICAgICAgZSA9IHRt
cDsKKyAgICAgICAgfQorICAgICAgICBzID0gcy5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3Np
dGlvbigpOworICAgICAgICBlID0gZS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigp
OworICAgIH0KKworICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKKyAgICBQYXNzUmVmUHRyPFJh
bmdlSW1wbD4gcmVzdWx0KG5ldyBSYW5nZUltcGwocy5ub2RlKCktPmdldERvY3VtZW50KCkpKTsK
KyAgICByZXN1bHQtPnNldFN0YXJ0KHMubm9kZSgpLCBzLm9mZnNldCgpLCBleGNlcHRpb25Db2Rl
KTsKKyAgICBpZiAoZXhjZXB0aW9uQ29kZSkgeworICAgICAgICBFUlJPUigiRXhjZXB0aW9uIHNl
dHRpbmcgUmFuZ2Ugc3RhcnQgZnJvbSBTZWxlY3Rpb246ICVkIiwgZXhjZXB0aW9uQ29kZSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXN1bHQtPnNldEVuZChlLm5vZGUoKSwgZS5v
ZmZzZXQoKSwgZXhjZXB0aW9uQ29kZSk7CisgICAgaWYgKGV4Y2VwdGlvbkNvZGUpIHsKKyAgICAg
ICAgRVJST1IoIkV4Y2VwdGlvbiBzZXR0aW5nIFJhbmdlIGVuZCBmcm9tIFNlbGVjdGlvbjogJWQi
LCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZShFVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KQoreworICAgIC8vIE1vdmUgdGhlIHNlbGVjdGlvbiB0byByZW5kZXJlZCBwb3Np
dGlvbnMsIGlmIHBvc3NpYmxlLgorICAgIFBvc2l0aW9uIG9yaWdpbmFsQmFzZShtX2Jhc2UpOwor
ICAgIGJvb2wgYmFzZUFuZEV4dGVudEVxdWFsID0gbV9iYXNlID09IG1fZXh0ZW50OworICAgIGlm
IChtX2Jhc2UuaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgbV9iYXNlID0gVmlzaWJsZVBvc2l0aW9u
KG1fYmFzZSwgbV9hZmZpbml0eSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgaWYgKGJhc2VB
bmRFeHRlbnRFcXVhbCkKKyAgICAgICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOworICAgIH0KKyAg
ICBpZiAobV9leHRlbnQuaXNOb3ROdWxsKCkgJiYgIWJhc2VBbmRFeHRlbnRFcXVhbCkgeworICAg
ICAgICBtX2V4dGVudCA9IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSkuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IGhhdmUg
YSBkYW5nbGluZyBzdGFydCBvciBlbmQKKyAgICBpZiAobV9iYXNlLmlzTnVsbCgpICYmIG1fZXh0
ZW50LmlzTnVsbCgpKSB7CisgICAgICAgIC8vIE1vdmUgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmNs
b3NpbmdCbG9ja0Zsb3dFbGVtZW50IG9mIHRoZSBvcmlnaW5hbCBiYXNlLCBpZiBwb3NzaWJsZS4K
KyAgICAgICAgLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBmbGFzaGluZyB0aGUgY2FyZXQgc29t
ZXdoZXJlIHdoZW4gYSByZW5kZXJlZCBwb3NpdGlvbiBmb3IKKyAgICAgICAgLy8gdGhlIGJhc2Ug
YW5kIGV4dGVudCBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgIGlmIChvcmlnaW5hbEJhc2UuaXNO
b3ROdWxsKCkpIHsKKyAgICAgICAgICAgIFBvc2l0aW9uIHBvcyhvcmlnaW5hbEJhc2Uubm9kZSgp
LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCksIDApOworICAgICAgICAgICAgbV9iYXNlID0g
cG9zOworICAgICAgICAgICAgbV9leHRlbnQgPSBwb3M7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAvLyBXZSBoYXZlIG5vIHBvc2l0aW9uIHRvIHdvcmsgd2l0aC4gU2Vl
IGlmIHRoZSBCT0RZIGVsZW1lbnQgb2YgdGhlIHBhZ2UKKyAgICAgICAgICAgIC8vIGlzIGNvbnRl
bnRFZGl0YWJsZS4gSWYgaXQgaXMsIHB1dCB0aGUgY2FyZXQgdGhlcmUuCisgICAgICAgICAgICAv
L05vZGVJbXBsICpub2RlID0gZG9jdW1lbnQoKQorICAgICAgICAgICAgbV9zdGFydC5jbGVhcigp
OworICAgICAgICAgICAgbV9lbmQuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBtX2Jhc2VJ
c0ZpcnN0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG1fYmFzZS5pc051bGwoKSkgeworICAgICAg
ICBtX2Jhc2UgPSBtX2V4dGVudDsKKyAgICAgICAgbV9iYXNlSXNGaXJzdCA9IHRydWU7CisgICAg
fSBlbHNlIGlmIChtX2V4dGVudC5pc051bGwoKSkgeworICAgICAgICBtX2V4dGVudCA9IG1fYmFz
ZTsKKyAgICAgICAgbV9iYXNlSXNGaXJzdCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9iYXNlSXNGaXJzdCA9IFJhbmdlSW1wbDo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fYmFzZS5u
b2RlKCksIG1fYmFzZS5vZmZzZXQoKSwgbV9leHRlbnQubm9kZSgpLCBtX2V4dGVudC5vZmZzZXQo
KSkgPD0gMDsKKyAgICB9CisKKyAgICBpZiAobV9iYXNlSXNGaXJzdCkgeworICAgICAgICBtX3N0
YXJ0ID0gbV9iYXNlOworICAgICAgICBtX2VuZCA9IG1fZXh0ZW50OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1fc3RhcnQgPSBtX2V4dGVudDsKKyAgICAgICAgbV9lbmQgPSBtX2Jhc2U7CisgICAg
fQorICAgIAorICAgIC8vIEV4cGFuZCB0aGUgc2VsZWN0aW9uIGlmIHJlcXVlc3RlZC4KKyAgICBz
d2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgICAg
ICAgLy8gRG9uJ3QgZG8gYW55IGV4cGFuc2lvbi4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdPUkQ6IHsKKyAgICAgICAgICAgIC8vIEdlbmVyYWwgY2FzZTogU2VsZWN0IHRoZSB3
b3JkIHRoZSBjYXJldCBpcyBwb3NpdGlvbmVkIGluc2lkZSBvZiwgb3IgYXQgdGhlIHN0YXJ0IG9m
IChSaWdodFdvcmRJZk9uQm91bmRhcnkpLgorICAgICAgICAgICAgLy8gRWRnZSBjYXNlOiBJZiB0
aGUgY2FyZXQgaXMgYWZ0ZXIgdGhlIGxhc3Qgd29yZCBpbiBhIHNvZnQtd3JhcHBlZCBsaW5lIG9y
IHRoZSBsYXN0IHdvcmQgaW4KKyAgICAgICAgICAgIC8vIHRoZSBkb2N1bWVudCwgc2VsZWN0IHRo
YXQgbGFzdCB3b3JkIChMZWZ0V29yZElmT25Cb3VuZGFyeSkuCisgICAgICAgICAgICAvLyBFZGdl
IGNhc2U6IElmIHRoZSBjYXJldCBpcyBhZnRlciB0aGUgbGFzdCB3b3JkIGluIGEgcGFyYWdyYXBo
LCBzZWxlY3QgZnJvbSB0aGUgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgIC8vIGxhc3Qgd29y
ZCB0byB0aGUgbGluZSBicmVhayAoYWxzbyBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1f
YWZmaW5pdHkpOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCAgID0gVmlzaWJsZVBv
c2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAgIEVXb3JkU2lkZSBzaWRlID0g
UmlnaHRXb3JkSWZPbkJvdW5kYXJ5OworICAgICAgICAgICAgaWYgKGlzRW5kT2ZEb2N1bWVudChz
dGFydCkgfHwgKGlzRW5kT2ZMaW5lKHN0YXJ0KSAmJiAhaXNTdGFydE9mTGluZShzdGFydCkgJiYg
IWlzRW5kT2ZQYXJhZ3JhcGgoc3RhcnQpKSkKKyAgICAgICAgICAgICAgICBzaWRlID0gTGVmdFdv
cmRJZk9uQm91bmRhcnk7CisgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQs
IHNpZGUpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBzaWRlID0gUmlnaHRXb3JkSWZP
bkJvdW5kYXJ5OworICAgICAgICAgICAgaWYgKGlzRW5kT2ZEb2N1bWVudChlbmQpIHx8IChpc0Vu
ZE9mTGluZShlbmQpICYmICFpc1N0YXJ0T2ZMaW5lKGVuZCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kKSkpCisgICAgICAgICAgICAgICAgc2lkZSA9IExlZnRXb3JkSWZPbkJvdW5kYXJ5OworICAg
ICAgICAgICAgbV9lbmQgPSBlbmRPZldvcmQoZW5kLCBzaWRlKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBMSU5FOiB7CisgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBv
c2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9lbmQs
IG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBlbmQgb2YgdGhpcyBsaW5lIGlz
IGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGgsIGluY2x1ZGUgdGhlIHNwYWNlIAorICAgICAgICAg
ICAgLy8gYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGluZSBpbiB0aGUgc2VsZWN0aW9uLgorICAgICAg
ICAgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgoZW5kKSkgeworICAgICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXh0ID0gZW5kLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dC5p
c05vdE51bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gbmV4dDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fZW5kID0gZW5kLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExJTkVfQk9VTkRBUlk6CisgICAgICAg
ICAgICBtX3N0YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZm
aW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZkxpbmUo
VmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBBUkFHUkFQSDogeworICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvcyhtX3N0YXJ0LCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAgIGlm
IChpc1N0YXJ0T2ZMaW5lKHBvcykgJiYgaXNFbmRPZkRvY3VtZW50KHBvcykpCisgICAgICAgICAg
ICAgICAgcG9zID0gcG9zLnByZXZpb3VzKCk7CisgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRP
ZlBhcmFncmFwaChwb3MpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlv
bihtX2VuZCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgLy8gSW5jbHVkZSB0aGUgc3BhY2Ug
YWZ0ZXIgdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoIGluIHRoZSBzZWxlY3Rpb24uCisgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZk5leHRQYXJhZ3JhcGggPSB2aXNpYmxlUGFyYWdy
YXBoRW5kLm5leHQoKTsKKyAgICAgICAgICAgIG1fZW5kID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgu
aXNOb3ROdWxsKCkgPyBzdGFydE9mTmV4dFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpIDogdmlz
aWJsZVBhcmFncmFwaEVuZC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBET0NVTUVOVF9CT1VOREFSWToKKyAgICAgICAgICAgIG1f
c3RhcnQgPSBzdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5p
dHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZkRvY3VtZW50
KFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQQVJBR1JBUEhfQk9VTkRBUlk6CisgICAg
ICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zdGFy
dCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBtX2VuZCA9IGVu
ZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRqdXN0Rm9y
RWRpdGFibGVDb250ZW50KCk7CisKKyAgICAvLyBhZGp1c3QgdGhlIHN0YXRlCisgICAgaWYgKG1f
c3RhcnQuaXNOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kLmlzTnVsbCgpKTsKKyAgICAg
ICAgbV9zdGF0ZSA9IE5PTkU7CisKKyAgICAgICAgLy8gZW5mb3JjZSBkb3duc3RyZWFtIGFmZmlu
aXR5IGlmIG5vdCBjYXJldCwgYXMgYWZmaW5pdHkgb25seQorICAgICAgICAvLyBtYWtlcyBzZW5z
ZSBmb3IgY2FyZXQKKyAgICAgICAgbV9hZmZpbml0eSA9IERPV05TVFJFQU07CisgICAgfSBlbHNl
IGlmIChtX3N0YXJ0ID09IG1fZW5kIHx8IG1fc3RhcnQudXBzdHJlYW0oKSA9PSBtX2VuZC51cHN0
cmVhbSgpKSB7CisgICAgICAgIG1fc3RhdGUgPSBDQVJFVDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX3N0YXRlID0gUkFOR0U7CisKKyAgICAgICAgLy8gZW5mb3JjZSBkb3duc3RyZWFtIGFmZmlu
aXR5IGlmIG5vdCBjYXJldCwgYXMgYWZmaW5pdHkgb25seQorICAgICAgICAvLyBtYWtlcyBzZW5z
ZSBmb3IgY2FyZXQKKyAgICAgICAgbV9hZmZpbml0eSA9IERPV05TVFJFQU07CisKKyAgICAgICAg
Ly8gIkNvbnN0cmFpbiIgdGhlIHNlbGVjdGlvbiB0byBiZSB0aGUgc21hbGxlc3QgZXF1aXZhbGVu
dCByYW5nZSBvZiBub2Rlcy4KKyAgICAgICAgLy8gVGhpcyBpcyBhIHNvbWV3aGF0IGFyYml0cmFy
eSBjaG9pY2UsIGJ1dCBleHBlcmllbmNlIHNob3dzIHRoYXQgaXQgaXMKKyAgICAgICAgLy8gdXNl
ZnVsIHRvIG1ha2UgdG8gbWFrZSB0aGUgc2VsZWN0aW9uICJjYW5vbmljYWwiIChpZiBvbmx5IGZv
cgorICAgICAgICAvLyBwdXJwb3NlcyBvZiBjb21wYXJpbmcgc2VsZWN0aW9ucykuIFRoaXMgaXMg
YW4gaWRlYWwgcG9pbnQgb2YgdGhlIGNvZGUKKyAgICAgICAgLy8gdG8gZG8gdGhpcyBvcGVyYXRp
b24sIHNpbmNlIGFsbCBzZWxlY3Rpb24gY2hhbmdlcyB0aGF0IHJlc3VsdCBpbiBhIFJBTkdFIAor
ICAgICAgICAvLyBjb21lIHRocm91Z2ggaGVyZSBiZWZvcmUgYW55b25lIHVzZXMgaXQuCisgICAg
ICAgIG1fc3RhcnQgPSBtX3N0YXJ0LmRvd25zdHJlYW0oKTsKKyAgICAgICAgbV9lbmQgPSBtX2Vu
ZC51cHN0cmVhbSgpOworICAgIH0KKyAgICAKKyNpZiBFRElUX0RFQlVHCisgICAgZGVidWdQb3Np
dGlvbigpOworI2VuZGlmCit9CisKK3ZvaWQgU2VsZWN0aW9uOjphZGp1c3RGb3JFZGl0YWJsZUNv
bnRlbnQoKQoreworICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE5vZGVJbXBsICpiYXNlUm9vdCA9IG1fYmFzZS5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBOb2RlSW1wbCAqc3RhcnRSb290ID0gbV9zdGFydC5ub2RlKCktPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKKyAgICBOb2RlSW1wbCAqZW5kUm9vdCA9IG1fZW5kLm5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgIAorICAgIC8vIFRoZSBiYXNlLCBzdGFydCBhbmQgZW5k
IGFyZSBhbGwgaW4gdGhlIHNhbWUgcmVnaW9uLiAgTm8gYWRqdXN0bWVudCBuZWNlc3NhcnkuCisg
ICAgaWYgKGJhc2VSb290ID09IHN0YXJ0Um9vdCAmJiBiYXNlUm9vdCA9PSBlbmRSb290KQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gVGhlIHNlbGVjdGlvbiBpcyBiYXNlZCBpbiBhbiBl
ZGl0YWJsZSBhcmVhLiAgS2VlcCBib3RoIHNpZGVzIGZyb20gcmVhY2hpbmcgb3V0c2lkZSB0aGF0
IGFyZWEuCisgICAgaWYgKGJhc2VSb290KSB7CisgICAgICAgIC8vIElmIHRoZSBzdGFydCBpcyBv
dXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUgcm9vdCwgY2FwIGl0IGF0IHRoZSBzdGFydCBvZiB0
aGF0IGVkaXRhYmxlIHJvb3QuCisgICAgICAgIGlmIChiYXNlUm9vdCAhPSBzdGFydFJvb3QpIHsK
KyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdChQb3NpdGlvbihiYXNlUm9vdCwgMCkp
OworICAgICAgICAgICAgbV9zdGFydCA9IGZpcnN0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gSWYgdGhlIGVuZCBpcyBvdXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUg
cm9vdCwgY2FwIGl0IGF0IHRoZSBlbmQgb2YgdGhhdCBlZGl0YWJsZSByb290LgorICAgICAgICBp
ZiAoYmFzZVJvb3QgIT0gZW5kUm9vdCkgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxh
c3QoUG9zaXRpb24oYmFzZVJvb3QsIG1heERlZXBPZmZzZXQoYmFzZVJvb3QpKSk7CisgICAgICAg
ICAgICBtX2VuZCA9IGxhc3QuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgfQorICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaXMgYmFzZWQgb3V0c2lkZSBlZGl0YWJsZSBjb250ZW50LiAgS2VlcCBib3Ro
IHNpZGVzIGZyb20gcmVhY2hpbmcgaW50byBlZGl0YWJsZSBjb250ZW50LgorICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIFRoZSBzZWxlY3Rpb24gZW5kcyBpbiBlZGl0YWJsZSBjb250ZW50LCBtb3Zl
IGJhY2t3YXJkIHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50IGlzIHJlYWNoZWQuCisgICAgICAg
IGlmIChlbmRSb290KSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXM7Cisg
ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24oZW5kUm9vdCwgMCkpLnByZXZpb3VzKCk7CisgICAgICAgICAgICAgICAgZW5k
Um9vdCA9IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVt
ZW50KCk7CisgICAgICAgICAgICB9IHdoaWxlIChlbmRSb290KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQVNTRVJUKCFwcmV2aW91cy5pc051bGwoKSk7CisgICAgICAgICAgICBtX2VuZCA9
IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIHNl
bGVjdGlvbiBzdGFydHMgaW4gZWRpdGFibGUgY29udGVudCwgbW92ZSBmb3J3YXJkIHVudGlsIG5v
bi1lZGl0YWJsZSBjb250ZW50IGlzIHJlYWNoZWQuCisgICAgICAgIGlmIChzdGFydFJvb3QpIHsK
KyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0OworICAgICAgICAgICAgZG8geworICAg
ICAgICAgICAgICAgIG5leHQgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oc3RhcnRSb290LCBt
YXhEZWVwT2Zmc2V0KHN0YXJ0Um9vdCkpKS5uZXh0KCk7CisgICAgICAgICAgICAgICAgc3RhcnRS
b290ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OworICAgICAgICAgICAgfSB3aGlsZSAoc3RhcnRSb290KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQVNTRVJUKCFuZXh0LmlzTnVsbCgpKTsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBuZXh0
LmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQ29ycmVj
dCB0aGUgZXh0ZW50IGlmIG5lY2Vzc2FyeS4KKyAgICBpZiAoYmFzZVJvb3QgIT0gbV9leHRlbnQu
bm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgIG1fZXh0ZW50ID0gbV9iYXNl
SXNGaXJzdCA/IG1fZW5kIDogbV9zdGFydDsKK30KKwordm9pZCBTZWxlY3Rpb246OmRlYnVnUG9z
aXRpb24oKSBjb25zdAoreworICAgIGlmICghbV9zdGFydC5ub2RlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vc3RhdGljIGludCBjb250ZXh0ID0gNTsKKyAgICAKKyAgICAvL1JlbmRlck9i
amVjdCAqciA9IDA7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNlbGVjdGlvbiA9PT09PT09PT09
PT09PT09PVxuIik7CisKKyAgICBpZiAobV9zdGFydCA9PSBtX2VuZCkgeworICAgICAgICBQb3Np
dGlvbiBwb3MgPSBtX3N0YXJ0OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBvczogICAgICAg
ICVzICVwOiVkXG4iLCBwb3Mubm9kZSgpLT5ub2RlTmFtZSgpLnFzdHJpbmcoKS5sYXRpbjEoKSwg
cG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFBv
c2l0aW9uIHBvcyA9IG1fc3RhcnQ7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAic3RhcnQ6ICAg
ICAgJXMgJXA6JWRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1lKCkucXN0cmluZygpLmxhdGluMSgp
LCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICAgICAgcG9zID0gbV9l
bmQ7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW5kOiAgICAgICAgJXMgJXA6JWRcbiIsIHBv
cy5ub2RlKCktPm5vZGVOYW1lKCkucXN0cmluZygpLmxhdGluMSgpLCBwb3Mubm9kZSgpLCBwb3Mu
b2Zmc2V0KCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisgICAgICAgICAgCisKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgRE9NCkluZGV4OiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTIwNzIpCisrKyBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDEzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIEtIVE1MX0VESVRJTkdfU0VMRUNUSU9OX0gKLSNkZWZpbmUgS0hUTUxfRURJVElOR19TRUxF
Q1RJT05fSAorI2lmbmRlZiBLSFRNTF9FRElUSU5HX1NFTEVDVElPTkNPTlRST0xMRVJfSAorI2Rl
ZmluZSBLSFRNTF9FRElUSU5HX1NFTEVDVElPTkNPTlRST0xMRVJfSAogCiAjaW5jbHVkZSA8cXJl
Y3QuaD4KICNpbmNsdWRlIDxreG1sY29yZS9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiZWRpdGlu
Zy9TZWxlY3Rpb24uaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCi0jaW5jbHVkZSAi
dGV4dF9ncmFudWxhcml0eS5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSAi
ZWRpdGluZy92aXNpYmxlX3RleHQuaCIKIApAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBWaXNpYmxl
UG9zaXRpb247CiBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyCiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBFU3RhdGUgeyBOT05FLCBDQVJFVCwgUkFOR0UgfTsKICAgICBlbnVtIEVBbHRlciB7IE1PVkUs
IEVYVEVORCB9OwogICAgIGVudW0gRURpcmVjdGlvbiB7IEZPUldBUkQsIEJBQ0tXQVJELCBSSUdI
VCwgTEVGVCB9OwogI2RlZmluZSBTRUxfREVGQVVMVF9BRkZJTklUWSBET1dOU1RSRUFNCkBAIC01
NCwzNCArNTMsMzEgQEAgcHVibGljOgogICAgIHR5cGVkZWYgRE9NOjpOb2RlSW1wbCBOb2RlSW1w
bDsKIAogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVy
KGNvbnN0IFJhbmdlSW1wbCAqLCBFQWZmaW5pdHkgYmFzZUFmZmluaXR5LCBFQWZmaW5pdHkgZXh0
ZW50QWZmaW5pdHkpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUmFuZ2VJbXBsICos
IEVBZmZpbml0eSBhZmZpbml0eSk7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBWaXNp
YmxlUG9zaXRpb24gJik7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBWaXNpYmxlUG9z
aXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXIoY29uc3QgUG9zaXRpb24gJiwgRUFmZmluaXR5IGFmZmluaXR5KTsKLSAgICBTZWxlY3Rpb25D
b250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0eSwgY29uc3QgUG9zaXRpb24gJiwg
RUFmZmluaXR5KTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICYsIGNv
bnN0IFBvc2l0aW9uICYsIEVBZmZpbml0eSk7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25z
dCBTZWxlY3Rpb25Db250cm9sbGVyICYpOwogCiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciAmb3Bl
cmF0b3I9KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm8pOwogICAgIFNlbGVjdGlvbkNvbnRy
b2xsZXIgJm9wZXJhdG9yPShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnIpIHsgbW92ZVRvKHIpOyBy
ZXR1cm4gKnRoaXM7IH0KIAotICAgIHZvaWQgbW92ZVRvKGNvbnN0IFJhbmdlSW1wbCAqLCBFQWZm
aW5pdHkgYmFzZUFmZmluaXR5LCBFQWZmaW5pdHkgZXh0ZW50QWZmaW5pdHkpOworICAgIHZvaWQg
bW92ZVRvKGNvbnN0IFJhbmdlSW1wbCAqLCBFQWZmaW5pdHkgYWZmaW5pdHkpOwogICAgIHZvaWQg
bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKICAgICB2b2lkIG1vdmVUbyhjb25zdCBW
aXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogICAgIHZvaWQgbW92
ZVRvKGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0eSk7Ci0gICAgdm9pZCBtb3ZlVG8oY29uc3Qg
UG9zaXRpb24gJiwgRUFmZmluaXR5LCBjb25zdCBQb3NpdGlvbiAmLCBFQWZmaW5pdHkpOworICAg
IHZvaWQgbW92ZVRvKGNvbnN0IFBvc2l0aW9uICYsIGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0
eSk7CiAgICAgdm9pZCBtb3ZlVG8oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmKTsKIAotICAg
IEVTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICAKLSAgICAvLyBG
SVhNRTogVGhlc2Ugc2hvdWxkIHN1cHBvcnQgc2VwYXJhdGUgYmFzZUFmZmluaXR5IGFuZCBleHRl
bnRBZmZpbml0eQotICAgIEVBZmZpbml0eSBzdGFydEFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9hZmZpbml0eTsgfQotICAgIEVBZmZpbml0eSBlbmRBZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fYWZmaW5pdHk7IH0KLSAgICBFQWZmaW5pdHkgYmFzZUFmZmluaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9hZmZpbml0eTsgfQotICAgIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fYWZmaW5pdHk7IH0KKyAgICBTZWxlY3Rpb246OkVTdGF0ZSBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsLnN0YXRlKCk7IH0KKworICAgIEVBZmZpbml0eSBhZmZpbml0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsLmFmZmluaXR5KCk7IH0KIAogICAgIGJvb2wgbW9kaWZ5KEVBbHRl
ciwgRURpcmVjdGlvbiwgRVRleHRHcmFudWxhcml0eSk7CiAgICAgYm9vbCBtb2RpZnkoRUFsdGVy
LCBpbnQgdmVydGljYWxEaXN0YW5jZSk7CiAgICAgYm9vbCBleHBhbmRVc2luZ0dyYW51bGFyaXR5
KEVUZXh0R3JhbnVsYXJpdHkpOworCiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdm9pZCBzZXRC
YXNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKQEAgLTg5LDEwICs4NSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogICAgIHZvaWQg
c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSk7CiAKLSAg
ICBQb3NpdGlvbiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9Ci0gICAgUG9zaXRpb24g
ZXh0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQ7IH0KLSAgICBQb3NpdGlvbiBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBQb3NpdGlvbiBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX2VuZDsgfQorICAgIFBvc2l0aW9uIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX3NlbC5i
YXNlKCk7IH0KKyAgICBQb3NpdGlvbiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX3NlbC5leHRl
bnQoKTsgfQorICAgIFBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zZWwuc3RhcnQo
KTsgfQorICAgIFBvc2l0aW9uIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmVuZCgpOyB9CiAK
ICAgICBRUmVjdCBjYXJldFJlY3QoKSBjb25zdDsKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJv
b2wgZmxhZyA9IHRydWUpOwpAQCAtMTAwLDE0ICs5NiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhck1vZGlmeUJpYXMoKSB7IG1fbW9kaWZ5Qmlhc1NldCA9IGZhbHNlOyB9CiAgICAgdm9pZCBz
ZXRNb2RpZnlCaWFzKEVBbHRlciwgRURpcmVjdGlvbik7CiAgICAgCi0gICAgYm9vbCBpc05vbmUo
KSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IE5PTkU7IH0KLSAgICBib29sIGlzQ2FyZXQoKSBj
b25zdCB7IHJldHVybiBzdGF0ZSgpID09IENBUkVUOyB9Ci0gICAgYm9vbCBpc1JhbmdlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGUoKSA9PSBSQU5HRTsgfQotICAgIGJvb2wgaXNDYXJldE9yUmFuZ2Uo
KSBjb25zdCB7IHJldHVybiBzdGF0ZSgpICE9IE5PTkU7IH0KKyAgICBib29sIGlzTm9uZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsLmlzTm9uZSgpOyB9CisgICAgYm9vbCBpc0NhcmV0KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWwuaXNDYXJldCgpOyB9CisgICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWwuaXNSYW5nZSgpOyB9CisgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsLmlzQ2FyZXRPclJhbmdlKCk7IH0KIAotICAgIFBhc3NSZWZQdHI8RE9N
OjpSYW5nZUltcGw+IHRvUmFuZ2UoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPERPTTo6UmFuZ2VJ
bXBsPiB0b1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwudG9SYW5nZSgpOyB9CiAKLSAgICB2
b2lkIGRlYnVnUG9zaXRpb24oKSBjb25zdDsKICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoa2h0bWw6
OlJlbmRlck9iamVjdCAqciwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7CiAKICAgICBmcmllbmQgY2xh
c3MgOjpGcmFtZTsKQEAgLTExNSwxMCArMTEwLDEwIEBAIHB1YmxpYzoKICAgICBGcmFtZSAqZnJh
bWUoKSBjb25zdDsKIAogICAgIC8vIFNhZmFyaSBTZWxlY3Rpb24gT2JqZWN0IEFQSQotICAgIE5v
ZGVJbXBsICpiYXNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZS5ub2RlKCk7IH0KLSAgICBO
b2RlSW1wbCAqZXh0ZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50Lm5vZGUoKTsgfQot
ICAgIGludCBiYXNlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlLm9mZnNldCgpOyB9Ci0g
ICAgaW50IGV4dGVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50Lm9mZnNldCgpOyB9
CisgICAgTm9kZUltcGwgKmJhc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuYmFzZSgpLm5v
ZGUoKTsgfQorICAgIE5vZGVJbXBsICpleHRlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwu
ZXh0ZW50KCkubm9kZSgpOyB9CisgICAgaW50IGJhc2VPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3NlbC5iYXNlKCkub2Zmc2V0KCk7IH0KKyAgICBpbnQgZXh0ZW50T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWwuZXh0ZW50KCkub2Zmc2V0KCk7IH0KICAgICBET006OkRPTVN0cmluZyB0eXBl
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRCYXNlQW5kRXh0ZW50KE5vZGVJbXBsICpiYXNlTm9kZSwg
aW50IGJhc2VPZmZzZXQsIE5vZGVJbXBsICpleHRlbnROb2RlLCBpbnQgZXh0ZW50T2Zmc2V0KTsK
ICAgICB2b2lkIHNldFBvc2l0aW9uKE5vZGVJbXBsICpub2RlLCBpbnQgb2Zmc2V0KTsKQEAgLTEy
OSwxMCArMTI0LDEwIEBAIHB1YmxpYzoKICAgICAvLyBidXQgcmVmbGVjdCB0aGUgZGlyZWN0aW9u
IGluIHdoaWNoIHRoZSBzZWxlY3Rpb24gd2FzIG1hZGUgYnkgdGhlIHVzZXIuICBUaGF0IGRvZXMK
ICAgICAvLyBub3QgbWVhbiB0aGF0IHRoZXkgYXJlIGJhc2UvZXh0ZW50LCBzaW5jZSB0aGUgYmFz
ZS9leHRlbnQgZG9uJ3QgcmVmbGVjdAogICAgIC8vIGV4cGFuc2lvbi4KLSAgICBOb2RlSW1wbCAq
YW5jaG9yTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUlzRmlyc3QgPyBtX3N0YXJ0Lm5vZGUo
KSA6IG1fZW5kLm5vZGUoKTsgfQotICAgIGludCBhbmNob3JPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX2Jhc2VJc0ZpcnN0ID8gbV9zdGFydC5vZmZzZXQoKSA6IG1fZW5kLm9mZnNldCgpOyB9Ci0g
ICAgTm9kZUltcGwgKmZvY3VzTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUlzRmlyc3QgPyBt
X2VuZC5ub2RlKCkgOiBtX3N0YXJ0Lm5vZGUoKTsgfQotICAgIGludCBmb2N1c09mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFzZUlzRmlyc3QgPyBtX2VuZC5vZmZzZXQoKSA6IG1fc3RhcnQub2Zm
c2V0KCk7IH0KKyAgICBOb2RlSW1wbCAqYW5jaG9yTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
LmlzQmFzZUZpcnN0KCkgPyBtX3NlbC5zdGFydCgpLm5vZGUoKSA6IG1fc2VsLmVuZCgpLm5vZGUo
KTsgfQorICAgIGludCBhbmNob3JPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3NlbC5pc0Jhc2VG
aXJzdCgpID8gbV9zZWwuc3RhcnQoKS5vZmZzZXQoKSA6IG1fc2VsLmVuZCgpLm9mZnNldCgpOyB9
CisgICAgTm9kZUltcGwgKmZvY3VzTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmlzQmFzZUZp
cnN0KCkgPyBtX3NlbC5lbmQoKS5ub2RlKCkgOiBtX3NlbC5zdGFydCgpLm5vZGUoKTsgfQorICAg
IGludCBmb2N1c09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmlzQmFzZUZpcnN0KCkgPyBt
X3NlbC5lbmQoKS5vZmZzZXQoKSA6IG1fc2VsLnN0YXJ0KCkub2Zmc2V0KCk7IH0KICAgICBib29s
IGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gIWlzUmFuZ2UoKTsgfQogICAgIERPTTo6RE9N
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAgICAgdm9pZCBjb2xsYXBzZShOb2RlSW1wbCAqbm9k
ZSwgaW50IG9mZnNldCk7CkBAIC0xNjEsMTAgKzE1Niw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgZW51bSBFUG9zaXRpb25UeXBlIHsgU1RBUlQsIEVORCwgQkFTRSwgRVhURU5UIH07CiAKLSAg
ICB2b2lkIGluaXQoRUFmZmluaXR5IGFmZmluaXR5KTsKLSAgICB2b2lkIHZhbGlkYXRlKEVUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBDSEFSQUNURVIpOwotICAgIHZvaWQgYWRqdXN0Rm9y
RWRpdGFibGVDb250ZW50KCk7Ci0KICAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5RXh0ZW5kaW5n
UmlnaHRGb3J3YXJkKEVUZXh0R3JhbnVsYXJpdHkpOwogICAgIFZpc2libGVQb3NpdGlvbiBtb2Rp
ZnlNb3ZpbmdSaWdodEZvcndhcmQoRVRleHRHcmFudWxhcml0eSk7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIG1vZGlmeUV4dGVuZGluZ0xlZnRCYWNrd2FyZChFVGV4dEdyYW51bGFyaXR5KTsKQEAgLTE3
NywxMyArMTY4LDcgQEAgcHJpdmF0ZToKIAogICAgIGludCB4UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24oRVBvc2l0aW9uVHlwZSwgYm9vbCByZWNhbGMgPSBmYWxzZSkgY29uc3Q7CiAKLSAg
ICBQb3NpdGlvbiBtX2Jhc2U7ICAgICAgICAgICAgICAvLyBiYXNlIHBvc2l0aW9uIGZvciB0aGUg
c2VsZWN0aW9uCi0gICAgUG9zaXRpb24gbV9leHRlbnQ7ICAgICAgICAgICAgLy8gZXh0ZW50IHBv
c2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCi0gICAgUG9zaXRpb24gbV9zdGFydDsgICAgICAgICAg
ICAgLy8gc3RhcnQgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24KLSAgICBQb3NpdGlvbiBtX2Vu
ZDsgICAgICAgICAgICAgICAvLyBlbmQgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24KLQotICAg
IEVTdGF0ZSBtX3N0YXRlOyAgICAgICAgICAgICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0
aW9uCi0gICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7ICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rv
d25zdHJlYW0gYWZmaW5pdHkgb2YgdGhlIHNlbGVjdGlvbgorICAgIFNlbGVjdGlvbiBtX3NlbDsK
IAogICAgIFFSZWN0IG1fY2FyZXRSZWN0OyAgICAgICAgICAgIC8vIGNhcmV0IGNvb3JkaW5hdGVz
LCBzaXplLCBhbmQgcG9zaXRpb24KICAgICAKQEAgLTE5Miw3ICsxNzcsNiBAQCBwcml2YXRlOgog
ICAgIC8vIFRoaXMgaXMgZmFzdGVyIHRoYW4gZG9pbmcgYW5vdGhlciBsYXlvdXQoKS4KICAgICBR
UG9pbnQgbV9jYXJldFBvc2l0aW9uT25MYXlvdXQ7CiAgICAgCi0gICAgYm9vbCBtX2Jhc2VJc0Zp
cnN0IDogMTsgICAgICAgLy8gdHJ1ZSBpZiBiYXNlIGlzIGJlZm9yZSB0aGUgZXh0ZW50CiAgICAg
Ym9vbCBtX25lZWRzTGF5b3V0IDogMTsgICAgICAgLy8gdHJ1ZSBpZiB0aGUgY2FyZXQgYW5kIGV4
cGVjdGVkVmlzaWJsZSByZWN0YW5nbGVzIG5lZWQgdG8gYmUgY2FsY3VsYXRlZAogICAgIGJvb2wg
bV9tb2RpZnlCaWFzU2V0IDogMTsgICAgIC8vIHRydWUgaWYgdGhlIHNlbGVjdGlvbiBoYXMgYmVl
biBob3Jpem9udGFsbHkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9k
aWZpZWQgd2l0aCBFQWx0ZXI6OkVYVEVORApAQCAtMjAwLDcgKzE4NCw3IEBAIHByaXZhdGU6CiAK
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmYSwgY29u
c3QgU2VsZWN0aW9uQ29udHJvbGxlciAmYikKIHsKLSAgICByZXR1cm4gYS5zdGFydCgpID09IGIu
c3RhcnQoKSAmJiBhLmVuZCgpID09IGIuZW5kKCkgJiYgYS5zdGFydEFmZmluaXR5KCkgPT0gYi5z
dGFydEFmZmluaXR5KCk7CisgICAgcmV0dXJuIGEuc3RhcnQoKSA9PSBiLnN0YXJ0KCkgJiYgYS5l
bmQoKSA9PSBiLmVuZCgpICYmIGEuYWZmaW5pdHkoKSA9PSBiLmFmZmluaXR5KCk7CiB9CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmYSwgY29uc3Qg
U2VsZWN0aW9uQ29udHJvbGxlciAmYikKQEAgLTIxMCw0ICsxOTQsNCBAQCBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFNlbGVjdGlvbkNvCiAKIH0gLy8gbmFtZXNwYWNlIGtodG1sCiAKLSNl
bmRpZiAvLyBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9ICisjZW5kaWYgLy8gS0hUTUxfRURJVElO
R19TRUxFQ1RJT05DT05UUk9MTEVSX0gKSW5kZXg6IGtodG1sL2VkaXRpbmcvbW92ZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlv
bl9jb21tYW5kLmNwcAkocmV2aXNpb24gMTIwNzIpCisrKyBraHRtbC9lZGl0aW5nL21vdmVfc2Vs
ZWN0aW9uX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQg
TW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghcG9zLm5vZGUoKS0+aW5E
b2N1bWVudCgpKQogICAgICAgICBwb3MgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwogCi0g
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0
eSgpKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZp
bml0eSgpKTsKICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kKGRvY3VtZW50KCksIG1fZnJhZ21lbnQuZ2V0KCksIHRydWUsIG1fc21hcnRNb3ZlKSk7CiAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKIH0KSW5kZXg6IGtodG1sL2VkaXRpbmcv
YnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5n
L2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAJKHJldmlzaW9uIDEyMDcyKQorKysga2h0bWwv
ZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSwxMSArNjEsMTEgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAKICAgICAvLyBEZWxldGUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgogICAgIFBvc2l0aW9uIHBv
cyA9IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlv
bi5zdGFydEFmZmluaXR5KCk7CisgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0aW9uLmFm
ZmluaXR5KCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgZGVsZXRl
U2VsZWN0aW9uKGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIHBvcyA9IGVuZGluZ1NlbGVjdGlvbigp
LnN0YXJ0KCkudXBzdHJlYW0oKTsKLSAgICAgICAgYWZmaW5pdHkgPSBlbmRpbmdTZWxlY3Rpb24o
KS5zdGFydEFmZmluaXR5KCk7CisgICAgICAgIGFmZmluaXR5ID0gZW5kaW5nU2VsZWN0aW9uKCku
YWZmaW5pdHkoKTsKICAgICB9CiAgICAgCiAgICAgLy8gRmluZCB0aGUgdG9wLW1vc3QgYmxvY2tx
dW90ZSBmcm9tIHRoZSBzdGFydC4KSW5kZXg6IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTIwNzIpCisrKyBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw1MCArNjAsNDggQEAgdXNpbmcgRE9NOjpSYW5n
ZUltcGw7CiBuYW1lc3BhY2Uga2h0bWwgewogCiBTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rp
b25Db250cm9sbGVyKCkKKyAgICA6IG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICAsIG1fbW9kaWZ5
Qmlhc1NldChmYWxzZSkKIHsKLSAgICBpbml0KERPV05TVFJFQU0pOwogfQogCiBTZWxlY3Rpb25D
b250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZp
bml0eSBhZmZpbml0eSkKLSAgICA6IG1fYmFzZShwb3MpLCBtX2V4dGVudChwb3MpCisgICAgOiBt
X3NlbChwb3MsIHBvcywgYWZmaW5pdHkpCisgICAgLCBtX25lZWRzTGF5b3V0KHRydWUpCisgICAg
LCBtX21vZGlmeUJpYXNTZXQoZmFsc2UpCiB7Ci0gICAgaW5pdChhZmZpbml0eSk7Ci0gICAgdmFs
aWRhdGUoKTsKIH0KIAotU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihj
b25zdCBSYW5nZUltcGwgKnIsIEVBZmZpbml0eSBiYXNlQWZmaW5pdHksIEVBZmZpbml0eSBleHRl
bnRBZmZpbml0eSkKLSAgICA6IG1fYmFzZShzdGFydFBvc2l0aW9uKHIpKSwgbV9leHRlbnQoZW5k
UG9zaXRpb24ocikpCitTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNv
bnN0IFJhbmdlSW1wbCAqciwgRUFmZmluaXR5IGFmZmluaXR5KQorICAgIDogbV9zZWwoc3RhcnRQ
b3NpdGlvbihyKSwgZW5kUG9zaXRpb24ociksIGFmZmluaXR5KQorICAgICwgbV9uZWVkc0xheW91
dCh0cnVlKQorICAgICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQogewotICAgIGluaXQoYmFzZUFm
ZmluaXR5KTsKLSAgICB2YWxpZGF0ZSgpOwogfQogCi1TZWxlY3Rpb25Db250cm9sbGVyOjpTZWxl
Y3Rpb25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICZiYXNlLCBFQWZmaW5pdHkgYmFzZUFmZmlu
aXR5LCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgZXh0ZW50QWZmaW5pdHkpCi0g
ICAgOiBtX2Jhc2UoYmFzZSksIG1fZXh0ZW50KGV4dGVudCkKK1NlbGVjdGlvbkNvbnRyb2xsZXI6
OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9u
ICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSkKKyAgICA6IG1fc2VsKGJhc2UsIGV4dGVudCwg
YWZmaW5pdHkpCisgICAgLCBtX25lZWRzTGF5b3V0KHRydWUpCisgICAgLCBtX21vZGlmeUJpYXNT
ZXQoZmFsc2UpCiB7Ci0gICAgaW5pdChiYXNlQWZmaW5pdHkpOwotICAgIHZhbGlkYXRlKCk7CiB9
CiAKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZ2aXNpYmxlUG9zKQotICAgIDogbV9iYXNlKHZpc2libGVQb3MuZGVlcEVxdWl2
YWxlbnQoKSksIG1fZXh0ZW50KHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKSkKKyAgICA6IG1f
c2VsKHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKSwgdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVu
dCgpLCB2aXNpYmxlUG9zLmFmZmluaXR5KCkpCisgICAgLCBtX25lZWRzTGF5b3V0KHRydWUpCisg
ICAgLCBtX21vZGlmeUJpYXNTZXQoZmFsc2UpCiB7Ci0gICAgaW5pdCh2aXNpYmxlUG9zLmFmZmlu
aXR5KCkpOwotICAgIHZhbGlkYXRlKCk7CiB9CiAKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVj
dGlvbkNvbnRyb2xsZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiYXNlLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24gJmV4dGVudCkKLSAgICA6IG1fYmFzZShiYXNlLmRlZXBFcXVpdmFsZW50KCkpLCBt
X2V4dGVudChleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSkKKyAgICA6IG1fc2VsKGJhc2UuZGVlcEVx
dWl2YWxlbnQoKSwgZXh0ZW50LmRlZXBFcXVpdmFsZW50KCksIGJhc2UuYWZmaW5pdHkoKSkKKyAg
ICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICAsIG1fbW9kaWZ5Qmlhc1NldChmYWxzZSkKIHsK
LSAgICBpbml0KGJhc2UuYWZmaW5pdHkoKSk7Ci0gICAgdmFsaWRhdGUoKTsKIH0KIAogU2VsZWN0
aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBTZWxlY3Rpb25Db250cm9s
bGVyICZvKQotICAgIDogbV9iYXNlKG8ubV9iYXNlKSwgbV9leHRlbnQoby5tX2V4dGVudCkKLSAg
ICAsIG1fc3RhcnQoby5tX3N0YXJ0KSwgbV9lbmQoby5tX2VuZCkKLSAgICAsIG1fc3RhdGUoby5t
X3N0YXRlKSwgbV9hZmZpbml0eShvLm1fYWZmaW5pdHkpCi0gICAgLCBtX2Jhc2VJc0ZpcnN0KG8u
bV9iYXNlSXNGaXJzdCkKKyAgICA6IG1fc2VsKG8ubV9zZWwpCiAgICAgLCBtX25lZWRzTGF5b3V0
KG8ubV9uZWVkc0xheW91dCkKICAgICAsIG1fbW9kaWZ5Qmlhc1NldChvLm1fbW9kaWZ5Qmlhc1Nl
dCkKIHsKQEAgLTExOCwyNyArMTE2LDEwIEBAIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlv
bkNvbnRyb2xsZXIKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6aW5pdChF
QWZmaW5pdHkgYWZmaW5pdHkpCi17Ci0gICAgLy8gRklYTUU6IHNldCBleHRlbnRBZmZpbml0eQot
ICAgIG1fc3RhdGUgPSBOT05FOyAKLSAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKLSAgICBtX2Fm
ZmluaXR5ID0gYWZmaW5pdHk7Ci0gICAgbV9uZWVkc0xheW91dCA9IHRydWU7Ci0gICAgbV9tb2Rp
ZnlCaWFzU2V0ID0gZmFsc2U7Ci19Ci0KIFNlbGVjdGlvbkNvbnRyb2xsZXIgJlNlbGVjdGlvbkNv
bnRyb2xsZXI6Om9wZXJhdG9yPShjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZvKQogewotICAg
IG1fYmFzZSA9IG8ubV9iYXNlOwotICAgIG1fZXh0ZW50ID0gby5tX2V4dGVudDsKLSAgICBtX3N0
YXJ0ID0gby5tX3N0YXJ0OwotICAgIG1fZW5kID0gby5tX2VuZDsKLQotICAgIG1fc3RhdGUgPSBv
Lm1fc3RhdGU7Ci0gICAgbV9hZmZpbml0eSA9IG8ubV9hZmZpbml0eTsKKyAgICBtX3NlbCA9IG8u
bV9zZWw7CiAKLSAgICBtX2Jhc2VJc0ZpcnN0ID0gby5tX2Jhc2VJc0ZpcnN0OwogICAgIG1fbmVl
ZHNMYXlvdXQgPSBvLm1fbmVlZHNMYXlvdXQ7CiAgICAgbV9tb2RpZnlCaWFzU2V0ID0gby5tX21v
ZGlmeUJpYXNTZXQ7CiAgICAgCkBAIC0xNTcsNTYgKzEzOCw1NiBAQCBTZWxlY3Rpb25Db250cm9s
bGVyICZTZWxlY3Rpb25Db250cm9sbGVyCiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92
ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zKQogewotICAgIC8vIEZJWE1FOiB1c2UgZXh0
ZW50QWZmaW5pdHkKLSAgICBtX2FmZmluaXR5ID0gcG9zLmFmZmluaXR5KCk7Ci0gICAgbV9iYXNl
ID0gcG9zLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgbV9leHRlbnQgPSBwb3MuZGVlcEVxdWl2YWxl
bnQoKTsKLSAgICB2YWxpZGF0ZSgpOworICAgIG1fc2VsLnNldEFmZmluaXR5KHBvcy5hZmZpbml0
eSgpKTsKKyAgICBtX3NlbC5zZXRCYXNlKHBvcy5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBtX3Nl
bC5zZXRFeHRlbnQocG9zLmRlZXBFcXVpdmFsZW50KCkpOworICAgIG1fc2VsLnZhbGlkYXRlKCk7
CisgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYmFzZSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZleHRlbnQpCiB7Ci0gICAgLy8gRklYTUU6IHVzZSBleHRlbnRBZmZpbml0eQotICAgIG1f
YWZmaW5pdHkgPSBiYXNlLmFmZmluaXR5KCk7Ci0gICAgbV9iYXNlID0gYmFzZS5kZWVwRXF1aXZh
bGVudCgpOwotICAgIG1fZXh0ZW50ID0gZXh0ZW50LmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgdmFs
aWRhdGUoKTsKKyAgICBtX3NlbC5zZXRBZmZpbml0eShiYXNlLmFmZmluaXR5KCkpOworICAgIG1f
c2VsLnNldEJhc2UoYmFzZS5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBtX3NlbC5zZXRFeHRlbnQo
ZXh0ZW50LmRlZXBFcXVpdmFsZW50KCkpOworICAgIG1fc2VsLnZhbGlkYXRlKCk7CisgICAgbV9u
ZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRv
KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm8pCiB7Ci0gICAgLy8gRklYTUU6IGNvcHkgZXh0
ZW50QWZmaW5pdHkKLSAgICBtX2FmZmluaXR5ID0gby5tX2FmZmluaXR5OwotICAgIG1fYmFzZSA9
IG8ubV9zdGFydDsKLSAgICBtX2V4dGVudCA9IG8ubV9lbmQ7Ci0gICAgdmFsaWRhdGUoKTsKKyAg
ICBtX3NlbC5zZXRBZmZpbml0eShvLm1fc2VsLmFmZmluaXR5KCkpOworICAgIG1fc2VsLnNldEJh
c2Uoby5tX3NlbC5zdGFydCgpKTsKKyAgICBtX3NlbC5zZXRFeHRlbnQoby5tX3NlbC5lbmQoKSk7
CisgICAgbV9zZWwudmFsaWRhdGUoKTsKKyAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAog
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFm
ZmluaXR5IGFmZmluaXR5KQogewotICAgIC8vIEZJWE1FOiB1c2UgZXh0ZW50QWZmaW5pdHkKLSAg
ICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7Ci0gICAgbV9iYXNlID0gcG9zOwotICAgIG1fZXh0ZW50
ID0gcG9zOwotICAgIHZhbGlkYXRlKCk7CisgICAgbV9zZWwuc2V0QWZmaW5pdHkoYWZmaW5pdHkp
OworICAgIG1fc2VsLnNldEJhc2UocG9zKTsKKyAgICBtX3NlbC5zZXRFeHRlbnQocG9zKTsKKyAg
ICBtX3NlbC52YWxpZGF0ZSgpOworICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCi12b2lk
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBSYW5nZUltcGwgKnIsIEVBZmZpbml0
eSBiYXNlQWZmaW5pdHksIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSkKK3ZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlSW1wbCAqciwgRUFmZmluaXR5IGFmZmluaXR5
KQogewotICAgIC8vIEZJWE1FOiB1c2UgZXh0ZW50QWZmaW5pdHkKLSAgICBtX2FmZmluaXR5ID0g
YmFzZUFmZmluaXR5OwotICAgIG1fYmFzZSA9IHN0YXJ0UG9zaXRpb24ocik7Ci0gICAgbV9leHRl
bnQgPSBlbmRQb3NpdGlvbihyKTsKLSAgICB2YWxpZGF0ZSgpOworICAgIG1fc2VsLnNldEFmZmlu
aXR5KGFmZmluaXR5KTsKKyAgICBtX3NlbC5zZXRCYXNlKHN0YXJ0UG9zaXRpb24ocikpOworICAg
IG1fc2VsLnNldEV4dGVudChlbmRQb3NpdGlvbihyKSk7CisgICAgbV9zZWwudmFsaWRhdGUoKTsK
KyAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
Ojptb3ZlVG8oY29uc3QgUG9zaXRpb24gJmJhc2UsIEVBZmZpbml0eSBiYXNlQWZmaW5pdHksIGNv
bnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSkKK3ZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZiYXNlLCBjb25zdCBQb3Np
dGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAgLy8gRklYTUU6IHVzZSBl
eHRlbnRBZmZpbml0eQotICAgIG1fYWZmaW5pdHkgPSBiYXNlQWZmaW5pdHk7Ci0gICAgbV9iYXNl
ID0gYmFzZTsKLSAgICBtX2V4dGVudCA9IGV4dGVudDsKLSAgICB2YWxpZGF0ZSgpOworICAgIG1f
c2VsLnNldEFmZmluaXR5KGFmZmluaXR5KTsKKyAgICBtX3NlbC5zZXRCYXNlKGJhc2UpOworICAg
IG1fc2VsLnNldEV4dGVudChleHRlbnQpOworICAgIG1fc2VsLnZhbGlkYXRlKCk7CisgICAgbV9u
ZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0TW9k
aWZ5QmlhcyhFQWx0ZXIgYWx0ZXIsIEVEaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMjIyLDEzICsy
MDMsMTMgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRNb2RpZnlCaWFzKAogICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogcmlnaHQgZm9yIGJpZGk/CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgUklHSFQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRk9SV0FSRDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYmFzZSA9IG1fc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2V4dGVudCA9IG1fZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWwuc2V0
QmFzZShtX3NlbC5zdGFydCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VsLnNldEV4
dGVudChtX3NlbC5lbmQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBMRUZUOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEJBQ0tX
QVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYXNlID0gbV9lbmQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2V4dGVudCA9IG1fc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3NlbC5zZXRCYXNlKG1fc2VsLmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
c2VsLnNldEV4dGVudChtX3NlbC5zdGFydCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIzOCw3ICsyMTksNyBA
QCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldE1vZGlmeUJpYXMoCiAKIFZpc2libGVQb3Np
dGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdSaWdodEZvcndhcmQoRVRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1f
ZXh0ZW50LCBtX2FmZmluaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc2VsLmV4dGVu
dCgpLCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAg
ICAgIGNhc2UgQ0hBUkFDVEVSOgogICAgICAgICAgICAgcG9zID0gcG9zLm5leHQoKTsKQEAgLTI1
MywxMCArMjM0LDEwIEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QK
ICAgICAgICAgICAgIHBvcyA9IG5leHRMaW5lUG9zaXRpb24ocG9zLCB4UG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb24oRVhURU5UKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMSU5FX0JPVU5EQVJZOgotICAgICAgICAgICAgcG9zID0gZW5kT2ZMaW5lKFZpc2libGVQb3Np
dGlvbihtX2VuZCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgcG9zID0gZW5kT2ZMaW5lKFZp
c2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUEFSQUdSQVBIX0JPVU5EQVJZOgotICAgICAgICAgICAg
cG9zID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSk7
CisgICAgICAgICAgICBwb3MgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zZWwu
ZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIERPQ1VNRU5UX0JPVU5EQVJZOgogICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChw
b3MpOwpAQCAtMjcyLDMyICsyNTMsMzIgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om1vZAogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICAgICAgY2FzZSBDSEFS
QUNURVI6CiAgICAgICAgICAgICBpZiAoaXNSYW5nZSgpKSAKLSAgICAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpOworICAgICAgICAgICAgICAgIHBv
cyA9IFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0
ZW50LCBtX2FmZmluaXR5KS5uZXh0KCk7CisgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBv
c2l0aW9uKG1fc2VsLmV4dGVudCgpLCBtX3NlbC5hZmZpbml0eSgpKS5uZXh0KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBXT1JEOgotICAgICAgICAgICAgcG9zID0gbmV4dFdv
cmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpKTsKKyAgICAg
ICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmV4dGVu
dCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBQQVJBR1JBUEg6Ci0gICAgICAgICAgICBwb3MgPSBuZXh0UGFyYWdyYXBoUG9zaXRpb24oVmlz
aWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSwgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uKEVORCwgaXNSYW5nZSgpKSk7CisgICAgICAgICAgICBwb3MgPSBuZXh0UGFyYWdyYXBo
UG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSwg
eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVORCwgaXNSYW5nZSgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBMSU5FOiB7CiAgICAgICAgICAgICAvLyBkb3duLWFy
cm93aW5nIGZyb20gYSByYW5nZSBzZWxlY3Rpb24gdGhhdCBlbmRzIGF0IHRoZSBzdGFydCBvZiBh
IGxpbmUgbmVlZHMKICAgICAgICAgICAgIC8vIHRvIGxlYXZlIHRoZSBzZWxlY3Rpb24gYXQgdGhh
dCBsaW5lIHN0YXJ0IChubyBuZWVkIHRvIGNhbGwgbmV4dExpbmVQb3NpdGlvbiEpCi0gICAgICAg
ICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpOworICAgICAgICAg
ICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKTsK
ICAgICAgICAgICAgIGlmICghaXNSYW5nZSgpIHx8ICFpc1N0YXJ0T2ZMaW5lKHBvcykpCiAgICAg
ICAgICAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3MsIHhQb3NGb3JWZXJ0aWNhbEFy
cm93TmF2aWdhdGlvbihFTkQsIGlzUmFuZ2UoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBMSU5FX0JPVU5EQVJZOgotICAgICAgICAgICAgcG9zID0gZW5k
T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAg
cG9zID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5p
dHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUEFSQUdSQVBIX0JPVU5E
QVJZOgotICAgICAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1f
ZW5kLCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBwb3MgPSBlbmRPZlBhcmFncmFwaChWaXNp
YmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIERPQ1VNRU5UX0JPVU5EQVJZOgotICAgICAgICAgICAgcG9z
ID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKTsKKyAg
ICAgICAgICAgIHBvcyA9IGVuZE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgp
LCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0
dXJuIHBvczsKQEAgLTMwNSw3ICsyODYsNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29u
dHJvbGxlcjo6bW9kCiAKIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2Rp
ZnlFeHRlbmRpbmdMZWZ0QmFja3dhcmQoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsK
LSAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fZXh0ZW50LCBtX2FmZmluaXR5KTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcG9zKG1fc2VsLmV4dGVudCgpLCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICBz
d2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgICAgIGNhc2UgQ0hBUkFDVEVSOgogICAgICAgICAg
ICAgcG9zID0gcG9zLnByZXZpb3VzKCk7CkBAIC0zMjAsMTAgKzMwMSwxMCBAQCBWaXNpYmxlUG9z
aXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgICAgICBwb3MgPSBwcmV2aW91
c0xpbmVQb3NpdGlvbihwb3MsIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFWFRFTlQp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExJTkVfQk9VTkRBUlk6Ci0gICAg
ICAgICAgICBwb3MgPSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZp
bml0eSkpOworICAgICAgICAgICAgcG9zID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1f
c2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFBBUkFHUkFQSF9CT1VOREFSWToKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQ
YXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAg
ICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCks
IG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERP
Q1VNRU5UX0JPVU5EQVJZOgogICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50KHBvcyk7
CkBAIC0zMzgsMjcgKzMxOSwyNyBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxl
cjo6bW9kCiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgICAgICBjYXNlIENIQVJBQ1RF
UjoKICAgICAgICAgICAgIGlmIChpc1JhbmdlKCkpIAotICAgICAgICAgICAgICAgIHBvcyA9IFZp
c2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0
ZW50LCBtX2FmZmluaXR5KS5wcmV2aW91cygpOworICAgICAgICAgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3NlbC5leHRlbnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkucHJldmlvdXMoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdPUkQ6Ci0gICAgICAgICAgICBwb3Mg
PSBwcmV2aW91c1dvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5p
dHkpKTsKKyAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9uKFZpc2libGVQb3Np
dGlvbihtX3NlbC5leHRlbnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUEFSQUdSQVBIOgotICAgICAgICAgICAgcG9zID0gcHJldmlvdXNQ
YXJhZ3JhcGhQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSksIHhQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihTVEFSVCwgaXNSYW5nZSgpKSk7CisgICAgICAg
ICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3Nl
bC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKSwgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uKFNUQVJULCBpc1JhbmdlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IExJTkU6Ci0gICAgICAgICAgICBwb3MgPSBwcmV2aW91c0xpbmVQb3NpdGlvbihWaXNpYmxlUG9z
aXRpb24obV9zdGFydCwgbV9hZmZpbml0eSksIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bihTVEFSVCwgaXNSYW5nZSgpKSk7CisgICAgICAgICAgICBwb3MgPSBwcmV2aW91c0xpbmVQb3Np
dGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSksIHhQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihTVEFSVCwgaXNSYW5nZSgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBMSU5FX0JPVU5EQVJZOgotICAgICAgICAgICAgcG9z
ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKTsKKyAg
ICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgp
LCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQ
QVJBR1JBUEhfQk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBzdGFydE9mUGFyYWdyYXBoKFZp
c2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBwb3MgPSBz
dGFydE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3NlbC5hZmZp
bml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBET0NVTUVOVF9CT1VO
REFSWToKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24o
bV9zdGFydCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50
KFZpc2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHBvczsKQEAgLTQ3MywyMCArNDU0LDIw
IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlciAKICAgICBpZiAodXAp
CiAgICAgICAgIHZlcnRpY2FsRGlzdGFuY2UgPSAtdmVydGljYWxEaXN0YW5jZTsKIAotICAgIC8v
IGNhbiBkdW1wIHRoaXMgVVBTVFJFQU0gd2hlbiB3ZSBoYXZlIG1fZXh0ZW50QWZmaW5pdHkKLSAg
ICBtX2FmZmluaXR5ID0gVVBTVFJFQU07CiAgICAgc2V0TW9kaWZ5QmlhcyhhbHRlciwgdXAgPyBC
QUNLV0FSRCA6IEZPUldBUkQpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvczsKICAgICBpbnQg
eFBvcyA9IDA7CiAgICAgc3dpdGNoIChhbHRlcikgewogICAgICAgICBjYXNlIE1PVkU6Ci0gICAg
ICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24odXAgPyBtX3N0YXJ0IDogbV9lbmQsIG1fYWZm
aW5pdHkpOworICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKHVwID8gbV9zZWwuc3Rh
cnQoKSA6IG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICAgICAgICAgIHhQb3Mg
PSB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24odXAgPyBTVEFSVCA6IEVORCwgaXNSYW5n
ZSgpKTsKKyAgICAgICAgICAgIG1fc2VsLnNldEFmZmluaXR5KHVwID8gVVBTVFJFQU0gOiBET1dO
U1RSRUFNKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVYVEVORDoKLSAgICAg
ICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSk7CisgICAg
ICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWwuZXh0ZW50KCksIG1fc2VsLmFmZmlu
aXR5KCkpOwogICAgICAgICAgICAgeFBvcyA9IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bihFWFRFTlQpOworICAgICAgICAgICAgbV9zZWwuc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTUzNiw3ICs1MTcsOCBAQCBib29sIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmV4cGFuZFVzaW5nR3JhCiAgICAgaWYgKGlzTm9uZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgdmFsaWRhdGUoZ3JhbnVsYXJpdHkpOworICAgIG1f
c2VsLnZhbGlkYXRlKGdyYW51bGFyaXR5KTsKKyAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTUwLDE2ICs1MzIsMTYgQEAgaW50IFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnhQb3NGb3JWZXJ0aWNhbAogICAgIFBvc2l0aW9uIHBvczsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICAgICAgY2FzZSBTVEFSVDoKLSAgICAgICAgICAgIHBvcyA9IG1fc3RhcnQ7
CisgICAgICAgICAgICBwb3MgPSBtX3NlbC5zdGFydCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRU5EOgotICAgICAgICAgICAgcG9zID0gbV9lbmQ7CisgICAgICAgICAgICBw
b3MgPSBtX3NlbC5lbmQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJBU0U6
Ci0gICAgICAgICAgICBwb3MgPSBtX2Jhc2U7CisgICAgICAgICAgICBwb3MgPSBtX3NlbC5iYXNl
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFWFRFTlQ6Ci0gICAgICAgICAg
ICBwb3MgPSBtX2V4dGVudDsKKyAgICAgICAgICAgIHBvcyA9IG1fc2VsLmV4dGVudCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01NjgsOCArNTUwLDggQEAgaW50IFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnhQb3NGb3JWZXJ0aWNhbAogICAgICAgICByZXR1cm4geDsKICAgICAgICAg
CiAgICAgaWYgKHJlY2FsYyB8fCBmcmFtZS0+eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9u
KCkgPT0gRnJhbWU6Ok5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKSB7Ci0gICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIG1fYWZmaW5pdHkpLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgICAgIHggPSBwb3Mubm9kZSgpLT5yZW5kZXJlcigpLT5jYXJldFJlY3QocG9zLm9mZnNl
dCgpLCBtX2FmZmluaXR5KS54KCk7CisgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihwb3Ms
IG1fc2VsLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIHggPSBwb3Mubm9k
ZSgpLT5yZW5kZXJlcigpLT5jYXJldFJlY3QocG9zLm9mZnNldCgpLCBtX3NlbC5hZmZpbml0eSgp
KS54KCk7CiAgICAgICAgIGZyYW1lLT5zZXRYUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24o
eCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtNTgwLDM5ICs1NjIsNDEgQEAgaW50IFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnhQb3NGb3JWZXJ0aWNhbAogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OmNsZWFyKCkKIHsKLSAgICBtX2FmZmluaXR5ID0gU0VMX0RFRkFVTFRfQUZGSU5JVFk7Ci0gICAg
bV9iYXNlLmNsZWFyKCk7Ci0gICAgbV9leHRlbnQuY2xlYXIoKTsKLSAgICB2YWxpZGF0ZSgpOwor
ICAgIG1fc2VsLmNsZWFyKCk7CisgICAgbV9zZWwudmFsaWRhdGUoKTsKKyAgICBtX25lZWRzTGF5
b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRCYXNlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmcG9zKQogewotICAgIG1fYWZmaW5pdHkgPSBwb3MuYWZmaW5pdHko
KTsKLSAgICBtX2Jhc2UgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICB2YWxpZGF0ZSgpOwor
ICAgIG1fc2VsLnNldEFmZmluaXR5KHBvcy5hZmZpbml0eSgpKTsKKyAgICBtX3NlbC5zZXRCYXNl
KHBvcy5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBtX3NlbC52YWxpZGF0ZSgpOworICAgIG1fbmVl
ZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEV4dGVu
dChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykKIHsKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBl
eHRlbnRBZmZpbml0eQotICAgIG1fZXh0ZW50ID0gcG9zLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAg
dmFsaWRhdGUoKTsKKyAgICBtX3NlbC5zZXRBZmZpbml0eShwb3MuYWZmaW5pdHkoKSk7CisgICAg
bV9zZWwuc2V0RXh0ZW50KHBvcy5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBtX3NlbC52YWxpZGF0
ZSgpOworICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNldEJhc2UoY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGJhc2VBZmZpbml0
eSkKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZShjb25zdCBQb3NpdGlvbiAmcG9z
LCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAgbV9hZmZpbml0eSA9IGJhc2VBZmZpbml0eTsK
LSAgICBtX2Jhc2UgPSBwb3M7Ci0gICAgdmFsaWRhdGUoKTsKKyAgICBtX3NlbC5zZXRBZmZpbml0
eShhZmZpbml0eSk7CisgICAgbV9zZWwuc2V0QmFzZShwb3MpOworICAgIG1fc2VsLnZhbGlkYXRl
KCk7CisgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBleHRlbnRBZmZp
bml0eSkKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9u
ICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBleHRl
bnRBZmZpbml0eSBmb3IgcmVhbAotICAgIG1fYWZmaW5pdHkgPSBleHRlbnRBZmZpbml0eTsKLSAg
ICBtX2V4dGVudCA9IHBvczsKLSAgICB2YWxpZGF0ZSgpOworICAgIG1fc2VsLnNldEFmZmluaXR5
KGFmZmluaXR5KTsKKyAgICBtX3NlbC5zZXRFeHRlbnQocG9zKTsKKyAgICBtX3NlbC52YWxpZGF0
ZSgpOworICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNldE5lZWRzTGF5b3V0KGJvb2wgZmxhZykKQEAgLTYyMCw2NiArNjA0LDYgQEAgdm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXROZWVkc0xheW91dAogICAgIG1fbmVlZHNMYXlvdXQg
PSBmbGFnOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uQ29udHJvbGxlcjo6
dG9SYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVwZGF0ZWQgbGF5b3V0IHNpbmNlIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkCi0gICAgLy8gaW4gdGhlIGNvdXJzZSBvZiBydW5uaW5nIGVkaXQg
Y29tbWFuZHMgd2hpY2ggbW9kaWZ5IHRoZSBET00uCi0gICAgLy8gRmFpbGluZyB0byBjYWxsIHRo
aXMgY2FuIHJlc3VsdCBpbiBlcXVpdmFsZW50WFhYUG9zaXRpb24gY2FsbHMgcmV0dXJuaW5nCi0g
ICAgLy8gaW5jb3JyZWN0IHJlc3VsdHMuCi0gICAgbV9zdGFydC5ub2RlKCktPmdldERvY3VtZW50
KCktPnVwZGF0ZUxheW91dCgpOwotCi0gICAgUG9zaXRpb24gcywgZTsKLSAgICBpZiAoaXNDYXJl
dCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgYSBjYXJldCwgbW92ZSB0aGUg
cmFuZ2Ugc3RhcnQgdXBzdHJlYW0uIFRoaXMgaGVscHMgdXMgbWF0Y2gKLSAgICAgICAgLy8gdGhl
IGNvbnZlbnRpb25zIG9mIHRleHQgZWRpdG9ycyB0ZXN0ZWQsIHdoaWNoIG1ha2Ugc3R5bGUgZGV0
ZXJtaW5hdGlvbnMgYmFzZWQKLSAgICAgICAgLy8gb24gdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhl
IGNhcmV0LCBpZiBhbnkuIAotICAgICAgICBzID0gbV9zdGFydC51cHN0cmVhbSgpLmVxdWl2YWxl
bnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7Ci0gICAgICAgIGUgPSBzOwotICAgIH0KLSAgICBl
bHNlIHsKLSAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIHJhbmdlLCBzZWxlY3QgdGhl
IG1pbmltdW0gcmFuZ2UgdGhhdCBlbmNvbXBhc3NlcyB0aGUgc2VsZWN0aW9uLgotICAgICAgICAv
LyBBZ2FpbiwgdGhpcyBpcyB0byBtYXRjaCB0aGUgY29udmVudGlvbnMgb2YgdGV4dCBlZGl0b3Jz
IHRlc3RlZCwgd2hpY2ggbWFrZSBzdHlsZSAKLSAgICAgICAgLy8gZGV0ZXJtaW5hdGlvbnMgYmFz
ZWQgb24gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc2VsZWN0aW9uLiAKLSAgICAgICAgLy8g
Rm9yIGluc3RhbmNlLCB0aGlzIG9wZXJhdGlvbiBoZWxwcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUg
IlgiIHNlbGVjdGVkIGJlbG93IGlzIHRoZSAKLSAgICAgICAgLy8gb25seSB0aGluZyBzZWxlY3Rl
ZC4gVGhlIHJhbmdlIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byAibGVhayIgb3V0IHRvIHRoZSBl
bmQgb2YgdGhlIAotICAgICAgICAvLyBwcmV2aW91cyB0ZXh0IG5vZGUsIG9yIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIG5leHQgdGV4dCBub2RlLCBlYWNoIG9mIHdoaWNoIGhhcyBhIAotICAgICAg
ICAvLyBkaWZmZXJlbnQgc3R5bGUuCi0gICAgICAgIC8vIAotICAgICAgICAvLyBPbiBhIHRyZWFz
dXJlIG1hcCwgPGI+WDwvYj4gbWFya3MgdGhlIHNwb3QuCi0gICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICBeIHNlbGVjdGVkCi0gICAgICAgIC8vCi0gICAgICAgIEFTU0VSVChpc1Jhbmdl
KCkpOwotICAgICAgICBzID0gbV9zdGFydC5kb3duc3RyZWFtKCk7Ci0gICAgICAgIGUgPSBtX2Vu
ZC51cHN0cmVhbSgpOwotICAgICAgICBpZiAoUmFuZ2VJbXBsOjpjb21wYXJlQm91bmRhcnlQb2lu
dHMocy5ub2RlKCksIHMub2Zmc2V0KCksIGUubm9kZSgpLCBlLm9mZnNldCgpKSA+IDApIHsKLSAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhcnQgaXMgYmVmb3JlIHRoZSBlbmQuCi0gICAg
ICAgICAgICAvLyBUaGUgZW5kIGNhbiB3aW5kIHVwIGJlZm9yZSB0aGUgc3RhcnQgaWYgY29sbGFw
c2VkIHdoaXRlc3BhY2UgaXMgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQuCi0gICAgICAgICAgICBQ
b3NpdGlvbiB0bXAgPSBzOwotICAgICAgICAgICAgcyA9IGU7Ci0gICAgICAgICAgICBlID0gdG1w
OwotICAgICAgICB9Ci0gICAgICAgIHMgPSBzLmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0
aW9uKCk7Ci0gICAgICAgIGUgPSBlLmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7
Ci0gICAgfQotCi0gICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIFBhc3NSZWZQdHI8UmFu
Z2VJbXBsPiByZXN1bHQobmV3IFJhbmdlSW1wbChzLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKSkpOwot
ICAgIHJlc3VsdC0+c2V0U3RhcnQocy5ub2RlKCksIHMub2Zmc2V0KCksIGV4Y2VwdGlvbkNvZGUp
OwotICAgIGlmIChleGNlcHRpb25Db2RlKSB7Ci0gICAgICAgIEVSUk9SKCJFeGNlcHRpb24gc2V0
dGluZyBSYW5nZSBzdGFydCBmcm9tIFNlbGVjdGlvbkNvbnRyb2xsZXI6ICVkIiwgZXhjZXB0aW9u
Q29kZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXN1bHQtPnNldEVuZChlLm5v
ZGUoKSwgZS5vZmZzZXQoKSwgZXhjZXB0aW9uQ29kZSk7Ci0gICAgaWYgKGV4Y2VwdGlvbkNvZGUp
IHsKLSAgICAgICAgRVJST1IoIkV4Y2VwdGlvbiBzZXR0aW5nIFJhbmdlIGVuZCBmcm9tIFNlbGVj
dGlvbkNvbnRyb2xsZXI6ICVkIiwgZXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBET01TdHJpbmcgU2VsZWN0aW9uQ29udHJv
bGxlcjo6dHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTm9uZSgpKQpAQCAtNjkyLDE3ICs2MTYs
MTcgQEAgRE9NU3RyaW5nIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnR5cGUoKSBjbwogCiBET01TdHJp
bmcgU2VsZWN0aW9uQ29udHJvbGxlcjo6dG9TdHJpbmcoKSBjb25zdAogewotICAgIHJldHVybiBE
T01TdHJpbmcocGxhaW5UZXh0KHRvUmFuZ2UoKS5nZXQoKSkpOworICAgIHJldHVybiBET01TdHJp
bmcocGxhaW5UZXh0KG1fc2VsLnRvUmFuZ2UoKS5nZXQoKSkpOwogfQogCiBQYXNzUmVmUHRyPFJh
bmdlSW1wbD4gU2VsZWN0aW9uQ29udHJvbGxlcjo6Z2V0UmFuZ2VBdChpbnQgaW5kZXgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGluZGV4ID09IDAgPyB0b1JhbmdlKCkgOiAwOworICAgIHJldHVybiBp
bmRleCA9PSAwID8gbV9zZWwudG9SYW5nZSgpIDogMDsKIH0KIAogRnJhbWUgKlNlbGVjdGlvbkNv
bnRyb2xsZXI6OmZyYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIWlzTm9uZSgpID8gbV9zdGFy
dC5ub2RlKCktPmdldERvY3VtZW50KCktPmZyYW1lKCkgOiAwOworICAgIHJldHVybiAhaXNOb25l
KCkgPyBtX3NlbC5zdGFydCgpLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+ZnJhbWUoKSA6IDA7CiB9
CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZUFuZEV4dGVudChOb2RlSW1wbCAq
YmFzZU5vZGUsIGludCBiYXNlT2Zmc2V0LCBOb2RlSW1wbCAqZXh0ZW50Tm9kZSwgaW50IGV4dGVu
dE9mZnNldCkKQEAgLTcyNSwxMiArNjQ5LDEyIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
Y29sbGFwc2UoTm9kZUkKIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjb2xsYXBzZVRvRW5k
KCkKIHsKLSAgICBtb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBET1dOU1RSRUFNKSk7Cisg
ICAgbW92ZVRvKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwgRE9XTlNUUkVBTSkpOwogfQog
CiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvbGxhcHNlVG9TdGFydCgpCiB7Ci0gICAgbW92
ZVRvKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBET1dOU1RSRUFNKSk7CisgICAgbW92ZVRvKFZp
c2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6ZW1wdHkoKQpAQCAtNzQ1LDIzICs2NjksMjMgQEAgdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpleHRlbmQoTm9kZUltcAogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmxheW91dCgpCiB7Ci0gICAgaWYgKGlzTm9uZSgpIHx8ICFtX3N0YXJ0Lm5vZGUoKS0+aW5E
b2N1bWVudCgpIHx8ICFtX2VuZC5ub2RlKCktPmluRG9jdW1lbnQoKSkgeworICAgIGlmIChpc05v
bmUoKSB8fCAhbV9zZWwuc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWwuZW5k
KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgbV9jYXJldFJlY3QgPSBRUmVjdCgp
OwogICAgICAgICBtX2NhcmV0UG9zaXRpb25PbkxheW91dCA9IFFQb2ludCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9zdGFydC5ub2RlKCktPmdldERvY3VtZW50KCktPnVwZGF0
ZVJlbmRlcmluZygpOworICAgIG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5nZXREb2N1bWVudCgpLT51
cGRhdGVSZW5kZXJpbmcoKTsKICAgICAKICAgICBtX2NhcmV0UmVjdCA9IFFSZWN0KCk7CiAgICAg
bV9jYXJldFBvc2l0aW9uT25MYXlvdXQgPSBRUG9pbnQoKTsKICAgICAgICAgCiAgICAgaWYgKGlz
Q2FyZXQoKSkgewotICAgICAgICBQb3NpdGlvbiBwb3MgPSBtX3N0YXJ0OwotICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICAgICAgUG9zaXRpb24gcG9zID0gbV9zZWwuc3RhcnQoKTsKKyAgICAgICAgcG9zID0gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFs
ZW50KCk7CiAgICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChwb3Mubm9kZSgpLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIG1fY2FyZXRSZWN0ID0gcG9z
Lm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQoKSwgbV9hZmZpbml0eSk7
CisgICAgICAgICAgICBtX2NhcmV0UmVjdCA9IHBvcy5ub2RlKCktPnJlbmRlcmVyKCktPmNhcmV0
UmVjdChwb3Mub2Zmc2V0KCksIG1fc2VsLmFmZmluaXR5KCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgIHBvcy5ub2RlKCktPnJlbmRlcmVyKCktPmFi
c29sdXRlUG9zaXRpb24oeCwgeSk7CkBAIC03ODAsOSArNzA0LDkgQEAgUVJlY3QgU2VsZWN0aW9u
Q29udHJvbGxlcjo6Y2FyZXRSZWN0KCkgYwogICAgIAogICAgIFFSZWN0IGNhcmV0ID0gbV9jYXJl
dFJlY3Q7CiAgICAgCi0gICAgaWYgKG1fc3RhcnQubm9kZSgpICYmIG1fc3RhcnQubm9kZSgpLT5y
ZW5kZXJlcigpKSB7CisgICAgaWYgKG1fc2VsLnN0YXJ0KCkubm9kZSgpICYmIG1fc2VsLnN0YXJ0
KCkubm9kZSgpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGludCB4LCB5OwotICAgICAgICBtX3N0
YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKKyAgICAgICAg
bV9zZWwuc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCktPmFic29sdXRlUG9zaXRpb24oeCwgeSk7
CiAgICAgICAgIFFQb2ludCBkaWZmID0gUVBvaW50KHgsIHkpIC0gbV9jYXJldFBvc2l0aW9uT25M
YXlvdXQ7CiAgICAgICAgIGNhcmV0Lm1vdmVUb3BMZWZ0KGRpZmYpOwogICAgIH0KQEAgLTgwNCwx
MCArNzI4LDEwIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bmVlZHNDYXJldFJlcGEKICAg
ICBpZiAoIWlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3N0YXJ0Lm5v
ZGUoKS0+Z2V0RG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fc2VsLnN0YXJ0KCkubm9kZSgpLT5nZXRE
b2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBLSFRNTFZpZXcgKnYgPSBtX3N0YXJ0
Lm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dmlldygpOworICAgIEtIVE1MVmlldyAqdiA9IG1fc2Vs
LnN0YXJ0KCkubm9kZSgpLT5nZXREb2N1bWVudCgpLT52aWV3KCk7CiAgICAgaWYgKCF2KQogICAg
ICAgICByZXR1cm47CiAKQEAgLTgzNCw3ICs3NTgsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6Om5lZWRzQ2FyZXRSZXBhCiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJl
dChRUGFpbnRlciAqcCwgY29uc3QgUVJlY3QgJnJlY3QpCiB7Ci0gICAgaWYgKG1fc3RhdGUgIT0g
Q0FSRVQpCisgICAgaWYgKCEgbV9zZWwuaXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobV9uZWVkc0xheW91dCkKQEAgLTg0NiwyMDEgKzc3MCw2IEBAIHZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6cGFpbnRDYXJldChRUGEKICAgICAgICAgcC0+ZmlsbFJlY3QoY2FyZXQgJiBy
ZWN0LCBRQnJ1c2goKSk7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6YWRqdXN0Rm9y
RWRpdGFibGVDb250ZW50KCkKLXsKLSAgICBpZiAobV9iYXNlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBOb2RlSW1wbCAqYmFzZVJvb3QgPSBtX2Jhc2Uubm9kZSgpLT5yb290RWRp
dGFibGVFbGVtZW50KCk7Ci0gICAgTm9kZUltcGwgKnN0YXJ0Um9vdCA9IG1fc3RhcnQubm9kZSgp
LT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgTm9kZUltcGwgKmVuZFJvb3QgPSBtX2VuZC5u
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAKLSAgICAvLyBUaGUgYmFzZSwgc3Rh
cnQgYW5kIGVuZCBhcmUgYWxsIGluIHRoZSBzYW1lIHJlZ2lvbi4gIE5vIGFkanVzdG1lbnQgbmVj
ZXNzYXJ5LgotICAgIGlmIChiYXNlUm9vdCA9PSBzdGFydFJvb3QgJiYgYmFzZVJvb3QgPT0gZW5k
Um9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFRoZSBzZWxlY3Rpb24gaXMgYmFz
ZWQgaW4gYW4gZWRpdGFibGUgYXJlYS4gIEtlZXAgYm90aCBzaWRlcyBmcm9tIHJlYWNoaW5nIG91
dHNpZGUgdGhhdCBhcmVhLgotICAgIGlmIChiYXNlUm9vdCkgewotICAgICAgICAvLyBJZiB0aGUg
c3RhcnQgaXMgb3V0c2lkZSB0aGUgYmFzZSdzIGVkaXRhYmxlIHJvb3QsIGNhcCBpdCBhdCB0aGUg
c3RhcnQgb2YgdGhhdCBlZGl0YWJsZSByb290LgotICAgICAgICBpZiAoYmFzZVJvb3QgIT0gc3Rh
cnRSb290KSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3QoUG9zaXRpb24oYmFz
ZVJvb3QsIDApKTsKLSAgICAgICAgICAgIG1fc3RhcnQgPSBmaXJzdC5kZWVwRXF1aXZhbGVudCgp
OwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBlbmQgaXMgb3V0c2lkZSB0aGUgYmFzZSdz
IGVkaXRhYmxlIHJvb3QsIGNhcCBpdCBhdCB0aGUgZW5kIG9mIHRoYXQgZWRpdGFibGUgcm9vdC4K
LSAgICAgICAgaWYgKGJhc2VSb290ICE9IGVuZFJvb3QpIHsKLSAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBsYXN0KFBvc2l0aW9uKGJhc2VSb290LCBtYXhEZWVwT2Zmc2V0KGJhc2VSb290KSkp
OwotICAgICAgICAgICAgbV9lbmQgPSBsYXN0LmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIH0K
LSAgICAvLyBUaGUgc2VsZWN0aW9uIGlzIGJhc2VkIG91dHNpZGUgZWRpdGFibGUgY29udGVudC4g
IEtlZXAgYm90aCBzaWRlcyBmcm9tIHJlYWNoaW5nIGludG8gZWRpdGFibGUgY29udGVudC4KLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIGVuZHMgaW4gZWRpdGFibGUgY29u
dGVudCwgbW92ZSBiYWNrd2FyZCB1bnRpbCBub24tZWRpdGFibGUgY29udGVudCBpcyByZWFjaGVk
LgotICAgICAgICBpZiAoZW5kUm9vdCkgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIHByZXZpb3VzID0gVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVuZFJvb3QsIDApKS5wcmV2aW91cygpOwotICAgICAgICAg
ICAgICAgIGVuZFJvb3QgPSBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOwotICAgICAgICAgICAgfSB3aGlsZSAoZW5kUm9vdCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghcHJldmlvdXMuaXNOdWxsKCkpOwotICAgICAgICAg
ICAgbV9lbmQgPSBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFRoZSBzZWxlY3Rpb24gc3RhcnRzIGluIGVkaXRhYmxlIGNvbnRlbnQsIG1vdmUgZm9yd2Fy
ZCB1bnRpbCBub24tZWRpdGFibGUgY29udGVudCBpcyByZWFjaGVkLgotICAgICAgICBpZiAoc3Rh
cnRSb290KSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dDsKLSAgICAgICAgICAg
IGRvIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHN0
YXJ0Um9vdCwgbWF4RGVlcE9mZnNldChzdGFydFJvb3QpKSkubmV4dCgpOwotICAgICAgICAgICAg
ICAgIHN0YXJ0Um9vdCA9IG5leHQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKHN0YXJ0Um9vdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEFTU0VSVCghbmV4dC5pc051bGwoKSk7Ci0gICAgICAgICAgICBtX3N0
YXJ0ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IC8vIENvcnJlY3QgdGhlIGV4dGVudCBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKGJhc2VSb290ICE9
IG1fZXh0ZW50Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICBtX2V4dGVu
dCA9IG1fYmFzZUlzRmlyc3QgPyBtX2VuZCA6IG1fc3RhcnQ7Ci19Ci0KLXZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6dmFsaWRhdGUoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKLXsKLSAg
ICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gcmVuZGVyZWQgcG9zaXRpb25zLCBpZiBwb3NzaWJs
ZS4KLSAgICBQb3NpdGlvbiBvcmlnaW5hbEJhc2UobV9iYXNlKTsKLSAgICBib29sIGJhc2VBbmRF
eHRlbnRFcXVhbCA9IG1fYmFzZSA9PSBtX2V4dGVudDsKLSAgICBpZiAobV9iYXNlLmlzTm90TnVs
bCgpKSB7Ci0gICAgICAgIG1fYmFzZSA9IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5p
dHkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGlmIChiYXNlQW5kRXh0ZW50RXF1YWwpCi0g
ICAgICAgICAgICBtX2V4dGVudCA9IG1fYmFzZTsKLSAgICB9Ci0gICAgaWYgKG1fZXh0ZW50Lmlz
Tm90TnVsbCgpICYmICFiYXNlQW5kRXh0ZW50RXF1YWwpIHsKLSAgICAgICAgbV9leHRlbnQgPSBW
aXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpLmRlZXBFcXVpdmFsZW50KCk7Ci0g
ICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZlIGEgZGFuZ2xpbmcgc3RhcnQg
b3IgZW5kCi0gICAgaWYgKG1fYmFzZS5pc051bGwoKSAmJiBtX2V4dGVudC5pc051bGwoKSkgewot
ICAgICAgICAvLyBNb3ZlIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCBvZiB0aGUgb3JpZ2luYWwgYmFzZSwgaWYgcG9zc2libGUuCi0gICAgICAgIC8vIFRoaXMg
aGFzIHRoZSBlZmZlY3Qgb2YgZmxhc2hpbmcgdGhlIGNhcmV0IHNvbWV3aGVyZSB3aGVuIGEgcmVu
ZGVyZWQgcG9zaXRpb24gZm9yCi0gICAgICAgIC8vIHRoZSBiYXNlIGFuZCBleHRlbnQgY2Fubm90
IGJlIGZvdW5kLgotICAgICAgICBpZiAob3JpZ2luYWxCYXNlLmlzTm90TnVsbCgpKSB7Ci0gICAg
ICAgICAgICBQb3NpdGlvbiBwb3Mob3JpZ2luYWxCYXNlLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudCgpLCAwKTsKLSAgICAgICAgICAgIG1fYmFzZSA9IHBvczsKLSAgICAgICAgICAg
IG1fZXh0ZW50ID0gcG9zOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Ly8gV2UgaGF2ZSBubyBwb3NpdGlvbiB0byB3b3JrIHdpdGguIFNlZSBpZiB0aGUgQk9EWSBlbGVt
ZW50IG9mIHRoZSBwYWdlCi0gICAgICAgICAgICAvLyBpcyBjb250ZW50RWRpdGFibGUuIElmIGl0
IGlzLCBwdXQgdGhlIGNhcmV0IHRoZXJlLgotICAgICAgICAgICAgLy9Ob2RlSW1wbCAqbm9kZSA9
IGRvY3VtZW50KCkKLSAgICAgICAgICAgIG1fc3RhcnQuY2xlYXIoKTsKLSAgICAgICAgICAgIG1f
ZW5kLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9iYXNlSXNGaXJzdCA9IHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChtX2Jhc2UuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9iYXNlID0gbV9leHRl
bnQ7Ci0gICAgICAgIG1fYmFzZUlzRmlyc3QgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAobV9leHRl
bnQuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2U7Ci0gICAgICAgIG1fYmFz
ZUlzRmlyc3QgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fYmFzZUlzRmlyc3QgPSBS
YW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2Jhc2Uubm9kZSgpLCBtX2Jhc2Uub2Zm
c2V0KCksIG1fZXh0ZW50Lm5vZGUoKSwgbV9leHRlbnQub2Zmc2V0KCkpIDw9IDA7Ci0gICAgfQot
Ci0gICAgaWYgKG1fYmFzZUlzRmlyc3QpIHsKLSAgICAgICAgbV9zdGFydCA9IG1fYmFzZTsKLSAg
ICAgICAgbV9lbmQgPSBtX2V4dGVudDsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3N0YXJ0ID0g
bV9leHRlbnQ7Ci0gICAgICAgIG1fZW5kID0gbV9iYXNlOwotICAgIH0KLSAgICAKLSAgICAvLyBF
eHBhbmQgdGhlIHNlbGVjdGlvbiBpZiByZXF1ZXN0ZWQuCi0gICAgc3dpdGNoIChncmFudWxhcml0
eSkgewotICAgICAgICBjYXNlIENIQVJBQ1RFUjoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIGFu
eSBleHBhbnNpb24uCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXT1JEOiB7Ci0g
ICAgICAgICAgICAvLyBHZW5lcmFsIGNhc2U6IFNlbGVjdCB0aGUgd29yZCB0aGUgY2FyZXQgaXMg
cG9zaXRpb25lZCBpbnNpZGUgb2YsIG9yIGF0IHRoZSBzdGFydCBvZiAoUmlnaHRXb3JkSWZPbkJv
dW5kYXJ5KS4KLSAgICAgICAgICAgIC8vIEVkZ2UgY2FzZTogSWYgdGhlIGNhcmV0IGlzIGFmdGVy
IHRoZSBsYXN0IHdvcmQgaW4gYSBzb2Z0LXdyYXBwZWQgbGluZSBvciB0aGUgbGFzdCB3b3JkIGlu
Ci0gICAgICAgICAgICAvLyB0aGUgZG9jdW1lbnQsIHNlbGVjdCB0aGF0IGxhc3Qgd29yZCAoTGVm
dFdvcmRJZk9uQm91bmRhcnkpLgotICAgICAgICAgICAgLy8gRWRnZSBjYXNlOiBJZiB0aGUgY2Fy
ZXQgaXMgYWZ0ZXIgdGhlIGxhc3Qgd29yZCBpbiBhIHBhcmFncmFwaCwgc2VsZWN0IGZyb20gdGhl
IHRoZSBlbmQgb2YgdGhlCi0gICAgICAgICAgICAvLyBsYXN0IHdvcmQgdG8gdGhlIGxpbmUgYnJl
YWsgKGFsc28gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydCA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KTsKLSAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQgICA9IFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9h
ZmZpbml0eSk7Ci0gICAgICAgICAgICBFV29yZFNpZGUgc2lkZSA9IFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeTsKLSAgICAgICAgICAgIGlmIChpc0VuZE9mRG9jdW1lbnQoc3RhcnQpIHx8IChpc0VuZE9m
TGluZShzdGFydCkgJiYgIWlzU3RhcnRPZkxpbmUoc3RhcnQpICYmICFpc0VuZE9mUGFyYWdyYXBo
KHN0YXJ0KSkpCi0gICAgICAgICAgICAgICAgc2lkZSA9IExlZnRXb3JkSWZPbkJvdW5kYXJ5Owot
ICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBzaWRlKS5kZWVwRXF1aXZh
bGVudCgpOwotICAgICAgICAgICAgc2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFyeTsKLSAgICAg
ICAgICAgIGlmIChpc0VuZE9mRG9jdW1lbnQoZW5kKSB8fCAoaXNFbmRPZkxpbmUoZW5kKSAmJiAh
aXNTdGFydE9mTGluZShlbmQpICYmICFpc0VuZE9mUGFyYWdyYXBoKGVuZCkpKQotICAgICAgICAg
ICAgICAgIHNpZGUgPSBMZWZ0V29yZElmT25Cb3VuZGFyeTsKLSAgICAgICAgICAgIG1fZW5kID0g
ZW5kT2ZXb3JkKGVuZCwgc2lkZSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgTElORTogewotICAg
ICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBt
X2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlv
biBlbmQgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSk7Ci0g
ICAgICAgICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoaXMgbGluZSBpcyBhdCB0aGUgZW5kIG9mIGEg
cGFyYWdyYXBoLCBpbmNsdWRlIHRoZSBzcGFjZSAKLSAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBl
bmQgb2YgdGhlIGxpbmUgaW4gdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgICAgIGlmIChpc0VuZE9m
UGFyYWdyYXBoKGVuZCkpIHsKLSAgICAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9
IGVuZC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHQuaXNOb3ROdWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGVuZCA9IG5leHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X2VuZCA9IGVuZC5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBMSU5FX0JPVU5EQVJZOgotICAgICAgICAgICAgbV9zdGFydCA9IHN0
YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbiht
X2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBQQVJBR1JBUEg6IHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBw
b3MobV9zdGFydCwgbV9hZmZpbml0eSk7Ci0gICAgICAgICAgICBpZiAoaXNTdGFydE9mTGluZShw
b3MpICYmIGlzRW5kT2ZEb2N1bWVudChwb3MpKQotICAgICAgICAgICAgICAgIHBvcyA9IHBvcy5w
cmV2aW91cygpOwotICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgocG9zKS5k
ZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5p
dHkpKTsKLSAgICAgICAgICAgIC8vIEluY2x1ZGUgdGhlIHNwYWNlIGFmdGVyIHRoZSBlbmQgb2Yg
dGhlIHBhcmFncmFwaCBpbiB0aGUgc2VsZWN0aW9uLgotICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZOZXh0UGFyYWdyYXBoID0gdmlzaWJsZVBhcmFncmFwaEVuZC5uZXh0KCk7Ci0g
ICAgICAgICAgICBtX2VuZCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoLmlzTm90TnVsbCgpID8gc3Rh
cnRPZk5leHRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSA6IHZpc2libGVQYXJhZ3JhcGhFbmQu
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRE9DVU1FTlRfQk9VTkRBUlk6Ci0gICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZkRv
Y3VtZW50KFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxl
bnQoKTsKLSAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24o
bV9lbmQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUEFSQUdSQVBIX0JPVU5EQVJZOgotICAgICAgICAgICAgbV9zdGFydCA9
IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5k
ZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNp
YmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGFkanVzdEZvckVkaXRhYmxlQ29udGVudCgp
OwotCi0gICAgLy8gYWRqdXN0IHRoZSBzdGF0ZQotICAgIGlmIChtX3N0YXJ0LmlzTnVsbCgpKSB7
Ci0gICAgICAgIEFTU0VSVChtX2VuZC5pc051bGwoKSk7Ci0gICAgICAgIG1fc3RhdGUgPSBOT05F
OwotICAgIH0gZWxzZSBpZiAobV9zdGFydCA9PSBtX2VuZCB8fCBtX3N0YXJ0LnVwc3RyZWFtKCkg
PT0gbV9lbmQudXBzdHJlYW0oKSkgewotICAgICAgICBtX3N0YXRlID0gQ0FSRVQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9zdGF0ZSA9IFJBTkdFOwotICAgICAgICAvLyAiQ29uc3RyYWluIiB0
aGUgc2VsZWN0aW9uIHRvIGJlIHRoZSBzbWFsbGVzdCBlcXVpdmFsZW50IHJhbmdlIG9mIG5vZGVz
LgotICAgICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgYXJiaXRyYXJ5IGNob2ljZSwgYnV0IGV4
cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcwotICAgICAgICAvLyB1c2VmdWwgdG8gbWFrZSB0byBt
YWtlIHRoZSBzZWxlY3Rpb24gImNhbm9uaWNhbCIgKGlmIG9ubHkgZm9yCi0gICAgICAgIC8vIHB1
cnBvc2VzIG9mIGNvbXBhcmluZyBzZWxlY3Rpb25zKS4gVGhpcyBpcyBhbiBpZGVhbCBwb2ludCBv
ZiB0aGUgY29kZQotICAgICAgICAvLyB0byBkbyB0aGlzIG9wZXJhdGlvbiwgc2luY2UgYWxsIHNl
bGVjdGlvbiBjaGFuZ2VzIHRoYXQgcmVzdWx0IGluIGEgUkFOR0UgCi0gICAgICAgIC8vIGNvbWUg
dGhyb3VnaCBoZXJlIGJlZm9yZSBhbnlvbmUgdXNlcyBpdC4KLSAgICAgICAgbV9zdGFydCA9IG1f
c3RhcnQuZG93bnN0cmVhbSgpOwotICAgICAgICBtX2VuZCA9IG1fZW5kLnVwc3RyZWFtKCk7Ci0g
ICAgfQotCi0gICAgbV9uZWVkc0xheW91dCA9IHRydWU7Ci0gICAgCi0jaWYgRURJVF9ERUJVRwot
ICAgIGRlYnVnUG9zaXRpb24oKTsKLSNlbmRpZgotfQotCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0ICpyLCBib29sIHNlbGVjdGVkKSBjb25zdAog
ewogICAgIGlmIChyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewpAQCAtMTA1OSwxMCArNzg4
LDEwIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGVidWdSZW5kZXJlcigKICAgICAgICAg
aW50IHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogICAgICAgICBpZiAoc2VsZWN0ZWQpIHsK
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgaWYgKHItPm5vZGUoKSA9
PSBtX3N0YXJ0Lm5vZGUoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3N0YXJ0Lm9mZnNl
dCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoci0+bm9kZSgpID09IG1fZW5kLm5vZGUoKSkKLSAg
ICAgICAgICAgICAgICBvZmZzZXQgPSBtX2VuZC5vZmZzZXQoKTsKKyAgICAgICAgICAgIGlmIChy
LT5ub2RlKCkgPT0gbV9zZWwuc3RhcnQoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gbV9zZWwuc3RhcnQoKS5vZmZzZXQoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHItPm5vZGUo
KSA9PSBtX3NlbC5lbmQoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWwu
ZW5kKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnQgcG9zOwog
ICAgICAgICAgICAgSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maW5kTmV4dElu
bGluZVRleHRCb3gob2Zmc2V0LCBwb3MpOwpAQCAtMTExNCwzNCArODQzLDYgQEAgdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpkZWJ1Z1JlbmRlcmVyKAogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fc3RhcnQu
bm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvL3N0YXRpYyBpbnQgY29udGV4dCA9IDU7
Ci0gICAgCi0gICAgLy9SZW5kZXJPYmplY3QgKnIgPSAwOwotCi0gICAgZnByaW50ZihzdGRlcnIs
ICJTZWxlY3Rpb25Db250cm9sbGVyID09PT09PT09PT09PT09PT09XG4iKTsKLQotICAgIGlmICht
X3N0YXJ0ID09IG1fZW5kKSB7Ci0gICAgICAgIFBvc2l0aW9uIHBvcyA9IG1fc3RhcnQ7Ci0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAicG9zOiAgICAgICAgJXMgJXA6JWRcbiIsIHBvcy5ub2RlKCkt
Pm5vZGVOYW1lKCkucXN0cmluZygpLmxhdGluMSgpLCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkp
OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUG9zaXRpb24gcG9zID0gbV9zdGFydDsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydDogICAgICAlcyAlcDolZFxuIiwgcG9zLm5vZGUo
KS0+bm9kZU5hbWUoKS5xc3RyaW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQo
KSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS1cbiIpOwotICAgICAgICBwb3MgPSBtX2VuZDsKLSAgICAgICAgZnByaW50ZihzdGRl
cnIsICJlbmQ6ICAgICAgICAlcyAlcDolZFxuIiwgcG9zLm5vZGUoKS0+bm9kZU5hbWUoKS5xc3Ry
aW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQoKSk7Ci0gICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAg
IH0KLSAgICAgICAgICAKLQotICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT1cbiIpOwotfQotCiAjaWZuZGVmIE5ERUJVRwogI2RlZmluZSBGb3JtYXRC
dWZmZXJTaXplIDEwMjQKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9ybWF0Rm9yRGVidWdn
ZXIoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CkBAIC0xMTU1LDEwICs4NTYs
MTAgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpmb3JtYXRGb3JEZWJ1ZwogICAgIGVsc2Ug
ewogICAgICAgICBjaGFyIHNbRm9ybWF0QnVmZmVyU2l6ZV07CiAgICAgICAgIHJlc3VsdCArPSAi
ZnJvbSAiOwotICAgICAgICBtX3N0YXJ0LmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1hdEJ1ZmZl
clNpemUpOworICAgICAgICBtX3NlbC5zdGFydCgpLmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1h
dEJ1ZmZlclNpemUpOwogICAgICAgICByZXN1bHQgKz0gczsKICAgICAgICAgcmVzdWx0ICs9ICIg
dG8gIjsKLSAgICAgICAgbV9lbmQuZm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVyU2l6
ZSk7CisgICAgICAgIG1fc2VsLmVuZCgpLmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1hdEJ1ZmZl
clNpemUpOwogICAgICAgICByZXN1bHQgKz0gczsKICAgICB9CiAgICAgICAgICAgCkBAIC0xMTY4
LDggKzg2OSw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9ybWF0Rm9yRGVidWcKIAog
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG93VHJlZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
c3RhcnQubm9kZSgpKQotICAgICAgICBtX3N0YXJ0Lm5vZGUoKS0+c2hvd1RyZWVBbmRNYXJrKG1f
c3RhcnQubm9kZSgpLCAiUyIsIG1fZW5kLm5vZGUoKSwgIkUiKTsKKyAgICBpZiAobV9zZWwuc3Rh
cnQoKS5ub2RlKCkpCisgICAgICAgIG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5zaG93VHJlZUFuZE1h
cmsobV9zZWwuc3RhcnQoKS5ub2RlKCksICJTIiwgbV9zZWwuZW5kKCkubm9kZSgpLCAiRSIpOwog
fQogI2VuZGlmCiAKSW5kZXg6IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFu
ZC5jcHAJKHJldmlzaW9uIDEyMDcyKQorKysga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9u
X2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMjEgKzE1MywyMSBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVQCiAgICAgLy8KICAgICAvLyBIYW5kbGUg
bGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYXMgd2VsbCBhcyBzbWFydCBkZWxldGUg
YWRqdXN0bWVudHMgdG8gdGhlIHNlbGVjdGlvbgogICAgIC8vCi0gICAgbV9sZWFkaW5nV2hpdGVz
cGFjZSA9IG1fdXBzdHJlYW1TdGFydC5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKG1fc2VsZWN0
aW9uVG9EZWxldGUuc3RhcnRBZmZpbml0eSgpKTsKKyAgICBtX2xlYWRpbmdXaGl0ZXNwYWNlID0g
bV91cHN0cmVhbVN0YXJ0LmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24obV9zZWxlY3Rpb25Ub0Rl
bGV0ZS5hZmZpbml0eSgpKTsKICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZSA9IG1fZG93bnN0cmVh
bUVuZC50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWUF9ERUZBVUxUX0FGRklOSVRZKTsKIAog
ICAgIGlmIChtX3NtYXJ0RGVsZXRlKSB7CiAgICAgCiAgICAgICAgIC8vIHNraXAgc21hcnQgZGVs
ZXRlIGlmIHRoZSBzZWxlY3Rpb24gdG8gZGVsZXRlIGFscmVhZHkgc3RhcnRzIG9yIGVuZHMgd2l0
aCB3aGl0ZXNwYWNlCi0gICAgICAgIFBvc2l0aW9uIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3Vw
c3RyZWFtU3RhcnQsIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1
aXZhbGVudCgpOworICAgICAgICBQb3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV91cHN0
cmVhbVN0YXJ0LCBtX3NlbGVjdGlvblRvRGVsZXRlLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50
KCk7CiAgICAgICAgIGJvb2wgc2tpcFNtYXJ0RGVsZXRlID0gcG9zLnRyYWlsaW5nV2hpdGVzcGFj
ZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTm90TnVsbCgpOwogICAgICAg
ICBpZiAoIXNraXBTbWFydERlbGV0ZSkKICAgICAgICAgICAgIHNraXBTbWFydERlbGV0ZSA9IG1f
ZG93bnN0cmVhbUVuZC5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5J
VFksIHRydWUpLmlzTm90TnVsbCgpOwogCiAgICAgICAgIC8vIGV4dGVuZCBzZWxlY3Rpb24gdXBz
dHJlYW0gaWYgdGhlcmUgaXMgd2hpdGVzcGFjZSB0aGVyZQotICAgICAgICBib29sIGhhc0xlYWRp
bmdXaGl0ZXNwYWNlQmVmb3JlQWRqdXN0bWVudCA9IG1fdXBzdHJlYW1TdGFydC5sZWFkaW5nV2hp
dGVzcGFjZVBvc2l0aW9uKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnRBZmZpbml0eSgpLCB0cnVl
KS5pc05vdE51bGwoKTsKKyAgICAgICAgYm9vbCBoYXNMZWFkaW5nV2hpdGVzcGFjZUJlZm9yZUFk
anVzdG1lbnQgPSBtX3Vwc3RyZWFtU3RhcnQubGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihtX3Nl
bGVjdGlvblRvRGVsZXRlLmFmZmluaXR5KCksIHRydWUpLmlzTm90TnVsbCgpOwogICAgICAgICBp
ZiAoIXNraXBTbWFydERlbGV0ZSAmJiBoYXNMZWFkaW5nV2hpdGVzcGFjZUJlZm9yZUFkanVzdG1l
bnQpIHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gVmlzaWJsZVBv
c2l0aW9uKHN0YXJ0LCBtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0QWZmaW5pdHkoKSkucHJldmlv
dXMoKTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gVmlzaWJsZVBv
c2l0aW9uKHN0YXJ0LCBtX3NlbGVjdGlvblRvRGVsZXRlLmFmZmluaXR5KCkpLnByZXZpb3VzKCk7
CiAgICAgICAgICAgICBwb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAg
ICAgICAvLyBFeHBhbmQgb3V0IG9uZSBjaGFyYWN0ZXIgdXBzdHJlYW0gZm9yIHNtYXJ0IGRlbGV0
ZSBhbmQgcmVjYWxjdWxhdGUKICAgICAgICAgICAgIC8vIHBvc2l0aW9ucyBiYXNlZCBvbiB0aGlz
IGNoYW5nZS4KQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmluaXRpYWxpemVQCiAgICAgICAgIGlmICghc2tpcFNtYXJ0RGVsZXRlICYmICFoYXNMZWFkaW5n
V2hpdGVzcGFjZUJlZm9yZUFkanVzdG1lbnQgJiYgbV9kb3duc3RyZWFtRW5kLnRyYWlsaW5nV2hp
dGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTm90TnVsbCgpKSB7
CiAgICAgICAgICAgICAvLyBFeHBhbmQgb3V0IG9uZSBjaGFyYWN0ZXIgZG93bnN0cmVhbSBmb3Ig
c21hcnQgZGVsZXRlIGFuZCByZWNhbGN1bGF0ZQogICAgICAgICAgICAgLy8gcG9zaXRpb25zIGJh
c2VkIG9uIHRoaXMgY2hhbmdlLgotICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKGVu
ZCwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmRBZmZpbml0eSgpKS5uZXh0KCkuZGVlcEVxdWl2YWxl
bnQoKTsKKyAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihlbmQsIG1fc2VsZWN0aW9u
VG9EZWxldGUuYWZmaW5pdHkoKSkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAg
ICBtX3Vwc3RyZWFtRW5kID0gcG9zLnVwc3RyZWFtKCk7CiAgICAgICAgICAgICBtX2Rvd25zdHJl
YW1FbmQgPSBwb3MuZG93bnN0cmVhbSgpOwogICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3Bh
Y2UgPSBtX2Rvd25zdHJlYW1FbmQudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVM
VF9BRkZJTklUWSk7CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjppbml0aWFsaXplUAogICAgIC8vIEhhbmRsZSBkZXRlY3RpbmcgaWYgdGhlIGxpbmUgY29u
dGFpbmluZyB0aGUgc2VsZWN0aW9uIGVuZCBpcyBpdHNlbGYgZnVsbHkgc2VsZWN0ZWQuCiAgICAg
Ly8gVGhpcyBpcyBvbmUgb2YgdGhlIHRlc3RzIHRoYXQgZGV0ZXJtaW5lcyBpZiBibG9jayBtZXJn
aW5nIG9mIGNvbnRlbnQgbmVlZHMgdG8gYmUgZG9uZS4KICAgICAvLwotICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlRW5kKGVuZCwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmRBZmZpbml0eSgpKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChlbmQsIG1fc2VsZWN0aW9uVG9EZWxldGUu
YWZmaW5pdHkoKSk7CiAgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCkpIHsKICAg
ICAgICAgUG9zaXRpb24gcHJldmlvdXNMaW5lU3RhcnQgPSBwcmV2aW91c0xpbmVQb3NpdGlvbih2
aXNpYmxlRW5kLCAwKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICBpZiAocHJldmlvdXNMaW5l
U3RhcnQuaXNOdWxsKCkgfHwgUmFuZ2VJbXBsOjpjb21wYXJlQm91bmRhcnlQb2ludHMocHJldmlv
dXNMaW5lU3RhcnQsIG1fZG93bnN0cmVhbVN0YXJ0KSA+PSAwKQpAQCAtMjk1LDcgKzI5NSw3IEBA
IGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2kKIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiB7CiAgICAgaW50IHN0YXJ0T2Zm
c2V0ID0gbV91cHN0cmVhbVN0YXJ0Lm9mZnNldCgpOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlRW5kID0gVmlzaWJsZVBvc2l0aW9uKG1fZG93bnN0cmVhbUVuZCwgbV9zZWxlY3Rpb25Ub0Rl
bGV0ZS5lbmRBZmZpbml0eSgpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCA9IFZp
c2libGVQb3NpdGlvbihtX2Rvd25zdHJlYW1FbmQsIG1fc2VsZWN0aW9uVG9EZWxldGUuYWZmaW5p
dHkoKSk7CiAgICAgYm9vbCBlbmRBdEVuZE9mQmxvY2sgPSBpc0VuZE9mQmxvY2sodmlzaWJsZUVu
ZCk7CiAKICAgICAvLyBIYW5kbGUgc29tZSBzcGVjaWFsIGNhc2VzIHdoZXJlIHRoZSBzZWxlY3Rp
b24gYmVnaW5zIGFuZCBlbmRzIG9uIHNwZWNpZmljIHZpc2libGUgdW5pdHMuCkBAIC0zMTYsNyAr
MzE2LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAg
ICBtX3N0YXJ0Tm9kZSA9IG1fc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAg
IHN0YXJ0T2Zmc2V0ID0gMDsKICAgICB9Ci0gICAgaWYgKG1fc3RhcnRCbG9jayAhPSBtX2VuZEJs
b2NrICYmIGlzU3RhcnRPZkJsb2NrKFZpc2libGVQb3NpdGlvbihtX3Vwc3RyZWFtU3RhcnQsIG1f
c2VsZWN0aW9uVG9EZWxldGUuc3RhcnRBZmZpbml0eSgpKSkpIHsKKyAgICBpZiAobV9zdGFydEJs
b2NrICE9IG1fZW5kQmxvY2sgJiYgaXNTdGFydE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKG1fdXBz
dHJlYW1TdGFydCwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5hZmZpbml0eSgpKSkpIHsKICAgICAgICAg
aWYgKCFtX3N0YXJ0QmxvY2stPmlzQW5jZXN0b3IobV9lbmRCbG9jay5nZXQoKSkgJiYgIWlzU3Rh
cnRPZkJsb2NrKHZpc2libGVFbmQpICYmIGVuZEF0RW5kT2ZCbG9jaykgewogICAgICAgICAgICAg
Ly8gRGVsZXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGJsb2NrLCBidXQgbm90IHRoZSBibG9j
ayBpdHNlbGYuCiAgICAgICAgICAgICBtX3N0YXJ0Tm9kZSA9IG1fc3RhcnRCbG9jay0+Zmlyc3RD
aGlsZCgpOwpAQCAtNjU0LDcgKzY1NCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIHNhdmUgdGhpcyB0byBsYXRlciBt
YWtlIHRoZSBzZWxlY3Rpb24gd2l0aAotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IG1fc2VsZWN0
aW9uVG9EZWxldGUuc3RhcnRBZmZpbml0eSgpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IG1f
c2VsZWN0aW9uVG9EZWxldGUuYWZmaW5pdHkoKTsKICAgICAKICAgICAvLyBzZXQgdXAgb3VyIHN0
YXRlCiAgICAgaW5pdGlhbGl6ZVBvc2l0aW9uRGF0YSgpOwpJbmRleDoga2h0bWwvZWRpdGluZy90
eXBpbmdfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy90eXBpbmdfY29t
bWFuZC5jcHAJKHJldmlzaW9uIDEyMDcyKQorKysga2h0bWwvZWRpdGluZy90eXBpbmdfY29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKERvYwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlm
IChzZWxlY3Rpb24uaXNDYXJldCgpICYmIFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQo
KSwgc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSkucHJldmlvdXMoKS5pc051bGwoKSkgeworICAg
ICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKS5wcmV2aW91cygpLmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICAvLyBkbyBub3RoaW5nIGZvciBhIGRlbGV0ZSBrZXkgYXQgdGhlIHN0YXJ0IG9m
IGFuIGVkaXRhYmxlIGVsZW1lbnQuCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC05Myw3
ICs5Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXMKICAgICB9
CiAgICAgZWxzZSB7CiAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBpc0Vu
ZE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24u
c3RhcnRBZmZpbml0eSgpKSkpIHsKKyAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYg
aXNFbmRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0
aW9uLmFmZmluaXR5KCkpKSkgewogICAgICAgICAgICAgLy8gZG8gbm90aGluZyBmb3IgYSBkZWxl
dGUga2V5IGF0IHRoZSBzdGFydCBvZiBhbiBlZGl0YWJsZSBlbGVtZW50LgogICAgICAgICB9CiAg
ICAgICAgIGVsc2UgewpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFy
a01pc3NwZWxsaW5nc0FmdGUKICAgICAvLyBTaW5jZSB0aGUgd29yZCBjb250YWluaW5nIHRoZSBj
dXJyZW50IHNlbGVjdGlvbiBpcyBuZXZlciBtYXJrZWQsIHRoaXMgZG9lcyBhIGNoZWNrIHRvCiAg
ICAgLy8gc2VlIGlmIHR5cGluZyBtYWRlIGEgbmV3IHdvcmQgdGhhdCBpcyBub3QgaW4gdGhlIGN1
cnJlbnQgc2VsZWN0aW9uLiBCYXNpY2FsbHksIHlvdQogICAgIC8vIGdldCB0aGlzIGJ5IGJlaW5n
IGF0IHRoZSBlbmQgb2YgYSB3b3JkIGFuZCB0eXBpbmcgYSBzcGFjZS4gICAgCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0KGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0QWZmaW5pdHkoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KGVuZGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCksIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpOwogICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CiAgICAgaWYgKHByZXZp
b3VzLmlzTm90TnVsbCgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZX
b3JkKHByZXZpb3VzLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CkBAIC0zMjcsMjEgKzMyNywyMSBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoKQogICAgIFNlbGVjdGlvbkNv
bnRyb2xsZXIgc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgCiAgICAgc3dpdGNoIChlbmRpbmdTZWxl
Y3Rpb24oKS5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFO
R0U6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6UkFOR0U6CiAgICAgICAgICAgICBz
ZWxlY3Rpb25Ub0RlbGV0ZSA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q0FSRVQ6IHsKKyAgICAgICAgY2Fz
ZSBraHRtbDo6U2VsZWN0aW9uOjpDQVJFVDogewogICAgICAgICAgICAgLy8gSGFuZGxlIGRlbGV0
ZSBhdCBiZWdpbm5pbmctb2YtYmxvY2sgY2FzZS4KICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcg
aW4gdGhlIGNhc2UgdGhhdCB0aGUgY2FyZXQgaXMgYXQgdGhlIHN0YXJ0IG9mIGEKICAgICAgICAg
ICAgIC8vIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVu
dC4KICAgICAgICAgICAgIFBvc2l0aW9uIHBvcyhlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKTsK
LSAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5kaW5n
U2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5wcmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgICAgICAgICBQb3NpdGlvbiBlbmQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAg
ICBQb3NpdGlvbiBzdGFydCA9IFZpc2libGVQb3NpdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigp
LmFmZmluaXR5KCkpLnByZXZpb3VzKCkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIFBv
c2l0aW9uIGVuZCA9IFZpc2libGVQb3NpdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmlu
aXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICBpZiAoc3RhcnQuaXNOb3ROdWxs
KCkgJiYgZW5kLmlzTm90TnVsbCgpICYmIHN0YXJ0Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpID09IGVuZC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnQsIFNFTF9ERUZB
VUxUX0FGRklOSVRZLCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnQsIGVuZCwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpOT05FOgorICAgICAgICBjYXNlIGtodG1sOjpT
ZWxlY3Rpb246Ok5PTkU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM1OCwyMSArMzU4LDIxIEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXMKICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVj
dGlvblRvRGVsZXRlOwogICAgIAogICAgIHN3aXRjaCAoZW5kaW5nU2VsZWN0aW9uKCkuc3RhdGUo
KSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJBTkdFOgorICAgICAgICBj
YXNlIGtodG1sOjpTZWxlY3Rpb246OlJBTkdFOgogICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxl
dGUgPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNBUkVUOiB7CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVj
dGlvbjo6Q0FSRVQ6IHsKICAgICAgICAgICAgIC8vIEhhbmRsZSBkZWxldGUgYXQgYmVnaW5uaW5n
LW9mLWJsb2NrIGNhc2UuCiAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIGluIHRoZSBjYXNlIHRo
YXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiBhCiAgICAgICAgICAgICAvLyByb290IGVk
aXRhYmxlIGVsZW1lbnQgb3IgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQuCiAgICAgICAgICAg
ICBQb3NpdGlvbiBwb3MoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgICAgICAgICBQ
b3NpdGlvbiBzdGFydCA9IFZpc2libGVQb3NpdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLnN0
YXJ0QWZmaW5pdHkoKSkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBQb3Np
dGlvbiBlbmQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFm
ZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBQb3NpdGlvbiBzdGFydCA9
IFZpc2libGVQb3NpdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpLm5leHQo
KS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBv
c2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQo
KTsKICAgICAgICAgICAgIGlmIChzdGFydC5pc05vdE51bGwoKSAmJiBlbmQuaXNOb3ROdWxsKCkg
JiYgc3RhcnQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gZW5kLm5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlID0g
U2VsZWN0aW9uQ29udHJvbGxlcihzdGFydCwgU0VMX0RFRkFVTFRfQUZGSU5JVFksIGVuZCwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkpOworICAgICAgICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlID0g
U2VsZWN0aW9uQ29udHJvbGxlcihzdGFydCwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Ok5PTkU6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Tk9ORToKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTIwNzIpCisrKyBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2MDksNiAr
MTYwOSwxMCBAQAogCQlBODhBRDVBQTA5NTI1MTMxMDAxREQxOTYgLyogU1ZHQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEMwRjZGQjA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi87IH07
CiAJCUE4RkQ4Qjg2MDg3Q0I0NEMwMERDMzcwNyAvKiBLV1FXTWF0cml4LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NUQ3QThDMDg3OUVDNjQwMDZB
OTE3MiAvKiBLV1FXTWF0cml4LmNwcCAqLzsgfTsKIAkJQThGRDhCODcwODdDQjQ1NzAwREMzNzA3
IC8qIEtXUVdNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4NUQ3QThEMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4LmggKi87IH07CisJ
CUFFRDk4MDBDMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUVEOTgwMEEwOTc2QjM4RTAwMDYwOUY2
IC8qIFNlbGVjdGlvbi5jcHAgKi87IH07CisJCUFFRDk4MDBEMDk3NkIzOEUwMDA2MDlGNiAvKiBT
ZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFFRDk4MDBCMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rpb24uaCAqLzsgfTsKKwkJQUVEOTgw
MEUwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRUQ5ODAwQTA5NzZCMzhFMDAwNjA5RjYgLyogU2Vs
ZWN0aW9uLmNwcCAqLzsgfTsKKwkJQUVEOTgwMEYwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUVEOTgw
MEIwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlvbi5oICovOyB9OwogCQlCQzE3OTg5MjA4OEQ5
NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lX21hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODhGMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5k
ZXJfdGhlbWVfbWFjLm1tICovOyB9OwogCQlCQzE3OTg5MzA4OEQ5NzVGMDA2MDY4QTUgLyogcmVu
ZGVyX3RoZW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMTc5ODkwMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuY3BwICovOyB9Owog
CQlCQzE3OTg5NDA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE3OTg5MTA4OEQ5NzVGMDA2MDY4
QTUgLyogcmVuZGVyX3RoZW1lLmggKi87IH07CkBAIC0yNDIzLDYgKzI0MjcsOCBAQAogCQlBOEMz
Mjk2NzA5M0JCN0IyMDAwQjlDQUMgLyogU1ZHRkVQb2ludExpZ2h0RWxlbWVudEltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdG
RVBvaW50TGlnaHRFbGVtZW50SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMzMkQ4OTA5M0Q4QkZBMDAwQjlDQUMgLyog
eGxpbmthdHRycy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IHhs
aW5rYXR0cnMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQlBOEMzMkQ5NjA5M0Q4RUE0MDAwQjlDQUMgLyogWExpbmtOYW1lc1dyYXBw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBYTGlua05hbWVzV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQlBRUQ5ODAwQTA5NzZCMzhFMDAwNjA5RjYgLyog
U2VsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTZWxl
Y3Rpb24uY3BwOyBwYXRoID0gZWRpdGluZy9TZWxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBRUQ5ODAwQjA5NzZCMzhFMDAwNjA5RjYgLyogU2VsZWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTZWxlY3Rpb24uaDsgcGF0aCA9IGVkaXRp
bmcvU2VsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZGMjQ5MDZE
MThBN0UwMDRBNkZBMyAvKiB4c2xfc3R5bGVzaGVldGltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0geHNsX3N0eWxlc2hlZXRpbXBs
LmNwcDsgcGF0aCA9IHhzbC94c2xfc3R5bGVzaGVldGltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkMwNkYyNEEwNkQxOEE3
RTAwNEE2RkEzIC8qIHhzbF9zdHlsZXNoZWV0aW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB4c2xfc3R5bGVzaGVldGltcGwuaDsgcGF0aCA9
IHhzbC94c2xfc3R5bGVzaGVldGltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDMDZGMjRCMDZEMThBN0UwMDRBNkZBMyAvKiB4
c2x0X3Byb2Nlc3NvcmltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0geHNsdF9wcm9jZXNzb3JpbXBsLmNwcDsgcGF0aCA9IHhzbC94
c2x0X3Byb2Nlc3NvcmltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTM2OTMsNiArMzY5OSw4IEBACiAJCQkJQkUwMkQ0RTcw
NjZGOTA4QTAwNzY4MDlGIC8qIGpzZWRpdGluZy5jcHAgKi8sCiAJCQkJOTM3OEQ5RkEwNzY0MEE0
NjAwNEI5N0JGIC8qIG1hcmt1cC5oICovLAogCQkJCTkzNzhEOUY5MDc2NDBBNDYwMDRCOTdCRiAv
KiBtYXJrdXAuY3BwICovLAorCQkJCUFFRDk4MDBBMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rp
b24uY3BwICovLAorCQkJCUFFRDk4MDBCMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rpb24uaCAq
LywKIAkJCQk5M0FCRTA2NzA3MDI4NUY2MDBCRDkxRjkgLyogU2VsZWN0aW9uQ29udHJvbGxlci5o
ICovLAogCQkJCTkzQUJFMDY2MDcwMjg1RjYwMEJEOTFGOSAvKiBTZWxlY3Rpb25Db250cm9sbGVy
LmNwcCAqLywKIAkJCQlCRUNFNjdCRDA3MDg3QjI1MDAwN0MxNEIgLyogdGV4dF9hZmZpbml0eS5o
ICovLApAQCAtNDYzMSw2ICs0NjM5LDcgQEAKIAkJCQk5M0YxOTlFRjA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRRm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUYwMDgyNDVFNTkwMDFF
OUFCQyAvKiBXZWJDb3JlVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5RjEwODI0NUU1
OTAwMUU5QUJDIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUVE
OTgwMEQwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5RjIwODI0NUU1OTAwMUU5QUJDIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzRjE5OUYzMDgyNDVFNTkwMDFFOUFCQyAvKiB2aXNpYmxlX3Bvc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlGNDA4MjQ1RTU5MDAxRTlBQkMgLyogdmlzaWJs
ZV90ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTUyNDAsNiArNTI0OSw3IEBACiAJCQkJQTgxODVG
NDMwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uSW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTgxODVGNDUwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50RnJhZ21lbnRJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NUY0ODA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1l
bnRJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRUQ5ODAwRjA5NzZCMzhFMDAwNjA5RjYgLyog
U2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTY3NzEsNiArNjc4MSw3IEBACiAJCQkJQTgx
ODVGM0MwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb25JbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg1RjNGMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVu
dEZyYWdtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBRUQ5ODAwQzA5NzZCMzhFMDAw
NjA5RjYgLyogU2VsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NEVDNjEyMDk3Nzc4
RjUwMERBQjUyQyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTcwNTIsNiAr
NzA2Myw3IEBACiAJCQkJQTgxODVGNDQwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50SW1wbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBODE4NUY0NjA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1w
bGVtZW50YXRpb25JbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg1RjQ3MDk3NjU3NjYw
MDU4MjZEOSAvKiBEb2N1bWVudEZyYWdtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
RUQ5ODAwRTA5NzZCMzhFMDAwNjA5RjYgLyogU2VsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gMTIwNzIp
CisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMjYgQEAKKzIwMDYtMDEt
MTMgIER1bmNhbiBXaWxjb3ggIDxkdW5jYW5AbWNsaW5rLml0PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgPGh0dHA6Ly9idWd6aWxsYS5v
cGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMz4KKyAgICAgICAgIkV4dHJhY3QgZGF0
YSBmcm9tIFNlbGVjdGlvbkNvbnRyb2xsZXIiCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3Rv
cnMgdGhlIGRhdGEgcG9ydGlvbnMgb2YgU2VsZWN0aW9uQ29udHJvbGxlciBpbnRvIGl0cworICAg
ICAgICBvd24gY2xhc3MsICJTZWxlY3Rpb24iLgorCisgICAgICAgIFRoZSBleHRyYWN0ZWQgZGF0
YSBhcmUgdGhlIGJhc2UvZXh0ZW50L3N0YXJ0L2VuZCBwb3NpdGlvbnMgYW5kIGN1cnNvcgorICAg
ICAgICBhZmZpbml0eS4gQWxzbyBhIGNvdXBsZSBjYWNoZWQgdmFsdWVzIGdlbmVyYXRlZCBieSB2
YWxpZGF0aW9uIGFyZSBrZXB0IGFyb3VuZAorICAgICAgICBpbiB0aGUgbmV3IGNsYXNzLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBhd2F5IHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgYWZmaW5p
dGllcworICAgICAgICAoc3RhcnQvZW5kL2Jhc2UvZXh0ZW50KSB0aGF0IHdlcmUgbmV2ZXIgaW1w
bGVtZW50ZWQgcHJvcGVybHksIHNpbmNlIGFmZmluaXR5CisgICAgICAgIG9ubHkgbWFrZXMgc2Vu
c2Ugd2hlbiB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQgKGFzIHBlciBkaXNjdXNzaW9uIHdpdGgg
bWpzIGFuZAorICAgICAgICBkYXJpbiBvbiAjd2Via2l0KS4KKworICAgICAgICBObyB0ZXN0IGNh
c2VzIGFkZGVkIGJlY2F1c2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJyaWRnZS9tYWMvTWFj
RnJhbWUubW06CisgICAgICAgIChNYWNGcmFtZTo6ZmluZFN0cmluZyk6CisgICAgICAgIChNYWNG
cmFtZTo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKE1hY0ZyYW1lOjpiYXNl
V3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKE1hY0ZyYW1lOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvbWFjL1dlYkNvcmVG
cmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHNlbGVjdGlvblN0
YXRlXSk6CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBzZWxlY3ROU1JhbmdlOl0pOgor
ICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldKToKKyAgICAg
ICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHNldE1hcmtET01SYW5nZTpdKToKKyAgICAgICAgKC1b
V2ViQ29yZUZyYW1lQnJpZGdlIGVuc3VyZVNlbGVjdGlvblZpc2libGVdKToKKyAgICAgICAgKC1b
V2ViQ29yZUZyYW1lQnJpZGdlIHJhbmdlT2ZDaGFyYWN0ZXJzQXJvdW5kQ2FyZXRdKToKKyAgICAg
ICAgKiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoa2h0
bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAo
a2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChraHRtbDo6
U2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRNb2RpZnlCaWFzKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250
cm9sbGVyOjptb2RpZnlFeHRlbmRpbmdSaWdodEZvcndhcmQpOgorICAgICAgICAoa2h0bWw6OlNl
bGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ1JpZ2h0Rm9yd2FyZCk6CisgICAgICAgIChr
aHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nTGVmdEJhY2t3YXJkKToK
KyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdMZWZ0QmFj
a3dhcmQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeSk6Cisg
ICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0
eSk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6eFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpj
bGVhcik6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZSk6Cisg
ICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KToKKyAgICAgICAg
KGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjp0b1N0cmluZyk6CisgICAgICAgIChraHRtbDo6
U2VsZWN0aW9uQ29udHJvbGxlcjo6Z2V0UmFuZ2VBdCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0
aW9uQ29udHJvbGxlcjo6ZnJhbWUpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmNvbGxhcHNlVG9FbmQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6
OmNvbGxhcHNlVG9TdGFydCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6
bGF5b3V0KToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlY3Qp
OgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om5lZWRzQ2FyZXRSZXBhaW50
KToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpwYWludENhcmV0KToKKyAg
ICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpkZWJ1Z1JlbmRlcmVyKToKKyAgICAg
ICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpmb3JtYXRGb3JEZWJ1Z2dlcik6CisgICAg
ICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvd1RyZWUpOgorICAgICAgICAqIGto
dG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoa2h0bWw6OlNlbGVj
dGlvbkNvbnRyb2xsZXI6OnN0YXRlKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9s
bGVyOjphZmZpbml0eSk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6YmFz
ZSk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6ZXh0ZW50KToKKyAgICAg
ICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzdGFydCk6CisgICAgICAgIChraHRtbDo6
U2VsZWN0aW9uQ29udHJvbGxlcjo6ZW5kKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250
cm9sbGVyOjppc05vbmUpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Omlz
Q2FyZXQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzUmFuZ2UpOgor
ICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzQ2FyZXRPclJhbmdlKToKKyAg
ICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjp0b1JhbmdlKToKKyAgICAgICAgKGto
dG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpiYXNlTm9kZSk6CisgICAgICAgIChraHRtbDo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6ZXh0ZW50Tm9kZSk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6YmFzZU9mZnNldCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJv
bGxlcjo6ZXh0ZW50T2Zmc2V0KToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVy
OjphbmNob3JOb2RlKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjphbmNo
b3JPZmZzZXQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvY3VzTm9k
ZSk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9jdXNPZmZzZXQpOgor
ICAgICAgICAoa2h0bWw6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvYXBw
bHlfc3R5bGVfY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6QXBwbHlTdHlsZUNvbW1hbmQ6
OnVwZGF0ZVN0YXJ0RW5kKToKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVv
dGVfY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1h
bmQuY3BwOgorICAgICAgICAoa2h0bWw6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxp
emVQb3NpdGlvbkRhdGEpOgorICAgICAgICAoa2h0bWw6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAgICAoa2h0bWw6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJl
YWtfY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFy
YXRvcl9jb21tYW5kLmNwcDoKKyAgICAgICAgKGtodG1sOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2luc2VydF90ZXh0
X2NvbW1hbmQuY3BwOgorICAgICAgICAoa2h0bWw6Okluc2VydFRleHRDb21tYW5kOjppbnB1dCk6
CisgICAgICAgICoga2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcDoKKyAg
ICAgICAgKGtodG1sOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
a2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcDoKKyAgICAgICAgKGto
dG1sOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChraHRtbDo6
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNvbXBsZXRlSFRNTFJlcGxhY2VtZW50KToKKyAgICAg
ICAgKiBraHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcDoKKyAgICAgICAgKGtodG1sOjpU
eXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKGtodG1sOjpUeXBpbmdD
b21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChraHRtbDo6VHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKiBraHRtbC94
bWwvRG9jdW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKERvY3VtZW50SW1wbDo6dXBkYXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKiBrd3EvS1dRQWNjT2JqZWN0Lm1tOgorICAgICAgICAoLVtLV1FBY2NP
YmplY3QgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtLV1FBY2NP
YmplY3QgZG9BWFRleHRNYXJrZXJSYW5nZUZvckxpbmU6XSk6CisgICAgICAgICoga3dxL0tXUVJl
bmRlclRyZWVEZWJ1Zy5jcHA6CisgICAgICAgICh3cml0ZVNlbGVjdGlvbik6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChGcmFtZTo6c2VsZWN0Q29udGVudHNPZk5vZGUpOgor
ICAgICAgICAoRnJhbWU6OnNob3VsZENoYW5nZVNlbGVjdGlvbik6CisgICAgICAgIChGcmFtZTo6
Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKToKKyAgICAgICAgKEZyYW1lOjphcHBseVN0eWxlKToK
KyAgICAgICAgKEZyYW1lOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKEZyYW1lOjpz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCk6CisgICAgICAgIChGcmFt
ZTo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKEZyYW1lOjpjZW50ZXJTZWxlY3Rpb25JblZp
c2libGVBcmVhKToKKyAgICAgICAgKEZyYW1lOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKwog
MjAwNi0wMS0xMiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAg
IFJ1YmJlciBzdGFtcGVkIGJ5IEVyaWMuCkluZGV4OiBicmlkZ2UvbWFjL01hY0ZyYW1lLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvTWFjRnJhbWUubW0JKHJldmlzaW9uIDEyMDcyKQorKysg
YnJpZGdlL21hYy9NYWNGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDkgKzQ0NSw5IEBA
IGJvb2wgTWFjRnJhbWU6OmZpbmRTdHJpbmcoTlNTdHJpbmcgKnN0cmkKICAgICBSZWZQdHI8UmFu
Z2VJbXBsPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoeG1sRG9jSW1wbCgpKSk7CiAgICAg
aWYgKHNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpKSB7CiAgICAgICAgIGlmIChmb3J3YXJkKSB7
Ci0gICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9u
KHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmVuZEFmZmluaXR5KCkpKTsKKyAgICAg
ICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0
aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgc2V0RW5kKHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24o
c2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHkoKSkpOworICAgICAg
ICAgICAgc2V0RW5kKHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
KCkuZW5kKCksIHNlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBSZWZQdHI8UmFuZ2VJbXBsPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdl
LmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKSk7CkBAIC00NTYsOSArNDU2LDkgQEAg
Ym9vbCBNYWNGcmFtZTo6ZmluZFN0cmluZyhOU1N0cmluZyAqc3RyaQogICAgIGlmIChzZWxlY3Rp
b24oKS5zdGFydCgpLm5vZGUoKSAmJiAqcmVzdWx0UmFuZ2UgPT0gKnNlbGVjdGlvbigpLnRvUmFu
Z2UoKSkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyh4bWxEb2NJbXBs
KCkpOwogICAgICAgICBpZiAoZm9yd2FyZCkgewotICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNo
UmFuZ2UuZ2V0KCksIFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5lbmQoKSwgc2VsZWN0aW9u
KCkuZW5kQWZmaW5pdHkoKSkpOworICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0
KCksIFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5lbmQoKSwgc2VsZWN0aW9uKCkuYWZmaW5p
dHkoKSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2V0RW5kKHNlYXJjaFJhbmdl
LmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uKCku
c3RhcnRBZmZpbml0eSgpKSk7CisgICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCks
IFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0
eSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKTsKICAgICB9CkBAIC00
NzksNyArNDc5LDcgQEAgYm9vbCBNYWNGcmFtZTo6ZmluZFN0cmluZyhOU1N0cmluZyAqc3RyaQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlv
bkNvbnRyb2xsZXIocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIFZQX1VQU1RSRUFNX0lG
X1BPU1NJQkxFKSk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIocmVzdWx0
UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKICAgICByZXZlYWxTZWxlY3Rpb24oKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTc1MCwxMiArNzUwLDEyIEBAIFFTdHJpbmcgTWFjRnJhbWU6OmFk
dmFuY2VUb05leHRNaXNzcGVsbGkKICAgICBpZiAoc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCkp
IHsKICAgICAgICAgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICBpZiAoc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pIHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChz
ZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpOworICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlv
bigpLmFmZmluaXR5KCkpOwogICAgICAgICAgICAgLy8gV2UgbWF0Y2ggQXBwS2l0J3MgcnVsZTog
U3RhcnQgMSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBzZWxlY3Rpb24uCiAgICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gb25lQmVmb3JlU3RhcnQgPSBzdGFydC5wcmV2aW91cygpOwogICAgICAgICAg
ICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIG9uZUJlZm9yZVN0YXJ0LmlzTm90TnVsbCgp
ID8gb25lQmVmb3JlU3RhcnQgOiBzdGFydCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigp
LmVuZCgpLCBzZWxlY3Rpb24oKS5lbmRBZmZpbml0eSgpKSk7CisgICAgICAgICAgICBzZXRTdGFy
dChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBz
ZWxlY3Rpb24oKS5hZmZpbml0eSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTgxOSw3ICs4
MTksNyBAQCBRU3RyaW5nIE1hY0ZyYW1lOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpCiAgICAgICAg
ICAgICAgICAgICAgIFFTdHJpbmcgcmVzdWx0ID0gY2hhcnMuc3RyaW5nKG1pc3NwZWxsaW5nLmxl
bmd0aCk7CiAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnNldEVuZChjaGFy
cy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCBjaGFycy5yYW5nZSgpLT5zdGFy
dE9mZnNldChleGNlcHRpb24pLCBleGNlcHRpb24pOwogCi0gICAgICAgICAgICAgICAgICAgIHNl
dFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERP
V05TVFJFQU0sIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CisgICAgICAgICAgICAgICAgICAg
IHNldFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCks
IERPV05TVFJFQU0pKTsKICAgICAgICAgICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgbWlzc3BlbGxpbmcgaW4gZG9jdW1lbnQuCiAgICAg
ICAgICAgICAgICAgICAgIHhtbERvY0ltcGwoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0yOTYyLDcgKzI5NjIsNyBAQCBO
U1dyaXRpbmdEaXJlY3Rpb24gTWFjRnJhbWU6OmJhc2VXcml0aW5nCiB7CiAgICAgTlNXcml0aW5n
RGlyZWN0aW9uIHJlc3VsdCA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OwogCi0gICAg
UG9zaXRpb24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCksIGQt
Pm1fc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3Np
dGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9z
ZWxlY3Rpb24uYWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlSW1wbCAqbm9k
ZSA9IHBvcy5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFu
b2RlLT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSkKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTMzMjksMTEgKzMzMjksMTEgQEAgdm9pZCBNYWNGcmFtZTo6cmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbgogICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBpbiBzZWxlY3Rp
b24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLCBvbGRTZWxlY3Rpb24gbWF5IG5v
IGxvbmdlcgogICAgICAgICAgICAgLy8gYmUgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICAgICAg
aWYgKG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5u
b2RlKCktPmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBv
bGRTdGFydChvbGRTZWxlY3Rpb24uc3RhcnQoKSwgb2xkU2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHko
KSk7CisgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlv
bi5zdGFydCgpLCBvbGRTZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgICAgICAgICAgb2xk
QWRqYWNlbnRXb3JkcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnRPZldvcmQob2xkU3RhcnQs
IExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpKTsgICAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG5ld1N0YXJ0KHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLnN0YXJ0QWZmaW5p
dHkoKSk7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQoc2VsZWN0aW9uKCku
c3RhcnQoKSwgc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CiAgICAgICAgICAgICBTZWxlY3Rpb25D
b250cm9sbGVyIG5ld0FkamFjZW50V29yZHMoc3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5ld1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
KTsKIAogICAgICAgICAgICAgaWYgKG9sZEFkamFjZW50V29yZHMgIT0gbmV3QWRqYWNlbnRXb3Jk
cykgewpJbmRleDogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDEyMDcyKQorKysg
YnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1NSwx
MSArODU1LDExIEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVkS0pTID0gRkFMU0U7CiAtIChXZWJT
ZWxlY3Rpb25TdGF0ZSlzZWxlY3Rpb25TdGF0ZQogewogICAgIHN3aXRjaCAobV9mcmFtZS0+c2Vs
ZWN0aW9uKCkuc3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5P
TkU6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Tk9ORToKICAgICAgICAgICAgIHJl
dHVybiBXZWJTZWxlY3Rpb25TdGF0ZU5vbmU7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Q0FSRVQ6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Q0FSRVQ6CiAgICAg
ICAgICAgICByZXR1cm4gV2ViU2VsZWN0aW9uU3RhdGVDYXJldDsKLSAgICAgICAgY2FzZSBTZWxl
Y3Rpb25Db250cm9sbGVyOjpSQU5HRToKKyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpS
QU5HRToKICAgICAgICAgICAgIHJldHVybiBXZWJTZWxlY3Rpb25TdGF0ZVJhbmdlOwogICAgIH0K
ICAgICAKQEAgLTIwMjIsNyArMjAyMiw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
b3JtRWxlbWVudEYKIAogLSAodm9pZClzZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlCiB7Ci0g
ICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoW3NlbGYgY29udmVy
dFRvRE9NUmFuZ2U6cmFuZ2VdLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFksIGtodG1sOjpT
RUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbihTZWxlY3Rp
b25Db250cm9sbGVyKFtzZWxmIGNvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXSwga2h0bWw6OlNFTF9E
RUZBVUxUX0FGRklOSVRZKSk7CiB9CiAKIC0gKE5TUmFuZ2Upc2VsZWN0ZWROU1JhbmdlCkBAIC0y
MDMyLDEyICsyMDMyLDEyIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVu
dEYKIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxOU1NlbGVjdGlvbkFmZmluaXR5PihtX2ZyYW1lLT5zZWxlY3Rpb24o
KS5zdGFydEFmZmluaXR5KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU1NlbGVjdGlvbkFm
ZmluaXR5PihtX2ZyYW1lLT5zZWxlY3Rpb24oKS5hZmZpbml0eSgpKTsKIH0KIAogLSAodm9pZClz
ZXRNYXJrRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICBtX2ZyYW1lLT5zZXRNYXJr
KFNlbGVjdGlvbkNvbnRyb2xsZXIoW3JhbmdlIF9yYW5nZUltcGxdLCBraHRtbDo6U0VMX0RFRkFV
TFRfQUZGSU5JVFksIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgIG1fZnJhbWUt
PnNldE1hcmsoU2VsZWN0aW9uQ29udHJvbGxlcihbcmFuZ2UgX3JhbmdlSW1wbF0sIGtodG1sOjpT
RUxfREVGQVVMVF9BRkZJTklUWSkpOwogfQogCiAtIChET01SYW5nZSAqKW1hcmtET01SYW5nZQpA
QCAtMjUwNyw3ICsyNTA3LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogICAgIGlmICghZG9jdW1lbnRWaWV3KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
UVJlY3QgZXh0ZW50UmVjdCA9IHJlbmRlcmVyLT5jYXJldFJlY3QoZXh0ZW50Lm9mZnNldCgpLCBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS5leHRlbnRBZmZpbml0eSgpKTsKKyAgICBRUmVjdCBleHRlbnRS
ZWN0ID0gcmVuZGVyZXItPmNhcmV0UmVjdChleHRlbnQub2Zmc2V0KCksIG1fZnJhbWUtPnNlbGVj
dGlvbigpLmFmZmluaXR5KCkpOwogICAgIFJlbmRlckxheWVyICpsYXllciA9IHJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpOwogICAgIGlmIChsYXllcikKICAgICAgICAgbGF5ZXItPnNjcm9sbFJl
Y3RUb1Zpc2libGUoZXh0ZW50UmVjdCk7CkBAIC0yNjY0LDcgKzI2NjQsNyBAQCBzdGF0aWMgSFRN
TEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJl
dCgpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0KHNl
bGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gY2FyZXQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsK
ICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IGNhcmV0Lm5leHQoKTsKICAgICBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXMgPSBjYXJldC5wcmV2aW91cygpOwogICAgIGlmIChwcmV2aW91cy5pc051
bGwoKSB8fCBuZXh0LmlzTnVsbCgpIHx8IGNhcmV0ID09IG5leHQgfHwgY2FyZXQgPT0gcHJldmlv
dXMpCkluZGV4OiBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3Ev
S1dRUmVuZGVyVHJlZURlYnVnLmNwcAkocmV2aXNpb24gMTIwNzIpCisrKyBrd3EvS1dRUmVuZGVy
VHJlZURlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2
b2lkIHdyaXRlU2VsZWN0aW9uKFFUZXh0U3RyZWFtICYKICAgICBTZWxlY3Rpb25Db250cm9sbGVy
IHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzQ2Fy
ZXQoKSkgewogICAgICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0
YXJ0KCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQo
KS5ub2RlKCkpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSA9PSBVUFNU
UkVBTSkKKyAgICAgICAgaWYgKHNlbGVjdGlvbi5hZmZpbml0eSgpID09IFVQU1RSRUFNKQogICAg
ICAgICAgICAgdHMgPDwgIiAodXBzdHJlYW0gYWZmaW5pdHkpIjsKICAgICAgICAgdHMgPDwgIlxu
IjsgCiAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CkluZGV4OiBrd3EvS1dR
QWNjT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FBY2NPYmplY3QubW0JKHJldmlzaW9u
IDEyMDcyKQorKysga3dxL0tXUUFjY09iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUzLDgg
Kzk1Myw4IEBAIHN0YXRpYyBRUmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqZWMKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIC8vIHJldHVybiBhIG1hcmtlciByYW5nZSBmb3Ig
dGhlIHNlbGVjdGlvbiBzdGFydCB0byBlbmQKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
UG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24oc2VsLnN0YXJ0KCksIHNlbC5zdGFydEFmZmluaXR5
KCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBWaXNpYmxlUG9zaXRp
b24oc2VsLmVuZCgpLCBzZWwuZW5kQWZmaW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlv
biBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHNlbC5zdGFydCgpLCBzZWwuYWZmaW5p
dHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IFZpc2libGVQb3Np
dGlvbihzZWwuZW5kKCksIHNlbC5hZmZpbml0eSgpKTsKICAgICAgICAgcmV0dXJuIChpZCkgW3Nl
bGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6c3RhcnRQb3NpdGlvbiBhbmRF
bmRQb3M6ZW5kUG9zaXRpb25dOwogICAgIH0KICAgICAKQEAgLTEwNzcsOCArMTA3Nyw4IEBAIHN0
YXRpYyBRUmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqZWMKICAgICAodm9pZClzZWwubW9k
aWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklH
SFQsIGtodG1sOjpMSU5FX0JPVU5EQVJZKTsKIAogICAgIC8vIHJldHVybiBhIG1hcmtlciByYW5n
ZSBmb3IgdGhlIHNlbGVjdGlvbiBzdGFydCB0byBlbmQKLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihzZWwuc3RhcnQoKSwgc2VsLnN0YXJ0QWZmaW5p
dHkoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9u
KHNlbC5lbmQoKSwgc2VsLmVuZEFmZmluaXR5KCkpOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHNlbC5zdGFydCgpLCBzZWwuYWZmaW5pdHkoKSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHNlbC5l
bmQoKSwgc2VsLmFmZmluaXR5KCkpOwogICAgIHJldHVybiAoaWQpIFtzZWxmIHRleHRNYXJrZXJS
YW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnN0YXJ0UG9zaXRpb24gYW5kRW5kUG9zOmVuZFBvc2l0
aW9uXTsKIH0KIApJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDEyMDcyKQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0MzMsNyArMjQzMyw3IEBAIHZvaWQgRnJhbWU6OnNlbGVjdEFsbCgpCiAKIGJvb2wgRnJh
bWU6OnNlbGVjdENvbnRlbnRzT2ZOb2RlKE5vZGVJbXBsKiBub2RlKQogewotICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIgc2VsID0gU2VsZWN0aW9uQ29udHJvbGxlcihQb3NpdGlvbihub2RlLCAwKSwg
a2h0bWw6OkRPV05TVFJFQU0sIFBvc2l0aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSkpLCBr
aHRtbDo6RE9XTlNUUkVBTSk7ICAgIAorICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsID0gU2Vs
ZWN0aW9uQ29udHJvbGxlcihQb3NpdGlvbihub2RlLCAwKSwgUG9zaXRpb24obm9kZSwgbWF4RGVl
cE9mZnNldChub2RlKSksIGtodG1sOjpET1dOU1RSRUFNKTsgICAgCiAgICAgaWYgKHNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWwpKSB7CiAgICAgICAgIHNldFNlbGVjdGlvbihzZWwpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTI0NDMsNyArMjQ0Myw3IEBAIGJvb2wgRnJhbWU6OnNlbGVjdENv
bnRlbnRzT2ZOb2RlKE5vZGVJbXAKIAogYm9vbCBGcmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld3NlbGVjdGlvbikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gTWFjKHRoaXMpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oZC0+bV9zZWxlY3Rpb24sIG5l
d3NlbGVjdGlvbiwgbmV3c2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSwgZmFsc2UpOworICAgIHJl
dHVybiBNYWModGhpcyktPnNob3VsZENoYW5nZVNlbGVjdGlvbihkLT5tX3NlbGVjdGlvbiwgbmV3
c2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBib29sIEZy
YW1lOjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgUmFuZ2VJbXBsICpyYW5nZSkgY29uc3QKQEAg
LTI2OTMsNyArMjY5Myw3IEBAIHZvaWQgRnJhbWU6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShD
U1MKICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZWYoKTsKICAgICB9CiAKLSAgICBOb2RlSW1wbCAq
bm9kZSA9IFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5z
dGFydEFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIE5vZGVJbXBsICpu
b2RlID0gVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmFm
ZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwogICAgIENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbkltcGwgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICBjb21wdXRlZFN0eWxlLmRp
ZmYobXV0YWJsZVN0eWxlKTsKICAgICAKQEAgLTI3MTUsMTQgKzI3MTUsMTQgQEAgdm9pZCBGcmFt
ZTo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTUwogdm9pZCBGcmFtZTo6YXBwbHlTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikK
IHsKICAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxl
Y3Rpb25Db250cm9sbGVyOjpOT05FOgorICAgICAgICBjYXNlIGtodG1sOjpTZWxlY3Rpb246Ok5P
TkU6CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpDQVJFVDogeworICAgICAgICBjYXNlIGtodG1s
OjpTZWxlY3Rpb246OkNBUkVUOiB7CiAgICAgICAgICAgICBjb21wdXRlQW5kU2V0VHlwaW5nU3R5
bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpSQU5HRToKKyAgICAgICAgY2FzZSBr
aHRtbDo6U2VsZWN0aW9uOjpSQU5HRToKICAgICAgICAgICAgIGlmICh4bWxEb2NJbXBsKCkgJiYg
c3R5bGUpIHsKICAgICAgICAgICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IEFwcGx5U3R5
bGVDb21tYW5kKHhtbERvY0ltcGwoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKICAgICAgICAg
ICAgICAgICBjbWQuYXBwbHkoKTsKQEAgLTI3MzQsMTEgKzI3MzQsMTEgQEAgdm9pZCBGcmFtZTo6
YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aQogdm9pZCBGcmFtZTo6YXBwbHlQYXJhZ3JhcGhT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKIHsKICAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAgY2Fz
ZSBTZWxlY3Rpb25Db250cm9sbGVyOjpOT05FOgorICAgICAgICBjYXNlIGtodG1sOjpTZWxlY3Rp
b246Ok5PTkU6CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpDQVJFVDoKLSAgICAgICAgY2FzZSBT
ZWxlY3Rpb25Db250cm9sbGVyOjpSQU5HRToKKyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9u
OjpDQVJFVDoKKyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpSQU5HRToKICAgICAgICAg
ICAgIGlmICh4bWxEb2NJbXBsKCkgJiYgc3R5bGUpIHsKICAgICAgICAgICAgICAgICBFZGl0Q29t
bWFuZFB0ciBjbWQobmV3IEFwcGx5U3R5bGVDb21tYW5kKHhtbERvY0ltcGwoKSwgc3R5bGUsIGVk
aXRpbmdBY3Rpb24sIEFwcGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOwog
ICAgICAgICAgICAgICAgIGNtZC5hcHBseSgpOwpAQCAtMzA2Miw5ICszMDYyLDkgQEAgdm9pZCBG
cmFtZTo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZgogICAgIC8vIENoZWNrIGlmIHRoZSBz
ZWxlY3Rpb24gY29udGFpbnMgdGhlIGVudGlyZSBmcmFtZSBjb250ZW50czsgaWYgbm90LCB0aGVu
IHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCFkLT5tX3NlbGVjdGlvbi5pc1Jhbmdl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQ
b3NpdGlvbihkLT5tX3NlbGVjdGlvbi5zdGFydCgpLCBkLT5tX3NlbGVjdGlvbi5zdGFydEFmZmlu
aXR5KCkpKSkKKyAgICBpZiAoIWlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihkLT5t
X3NlbGVjdGlvbi5zdGFydCgpLCBkLT5tX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWlzRW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oZC0+bV9z
ZWxlY3Rpb24uZW5kKCksIGQtPm1fc2VsZWN0aW9uLmVuZEFmZmluaXR5KCkpKSkKKyAgICBpZiAo
IWlzRW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uZW5kKCksIGQt
Pm1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0
IHRvIHRoZSA8aWZyYW1lPiBvciA8ZnJhbWU+IChvciBldmVuIDxvYmplY3Q+KSBlbGVtZW50IGlu
IHRoZSBwYXJlbnQgZnJhbWUuCkBAIC0zMjM1LDE0ICszMjM1LDE0IEBAIHZvaWQgRnJhbWU6OnJl
dmVhbFNlbGVjdGlvbigpCiAgICAgUVJlY3QgcmVjdDsKICAgICAKICAgICBzd2l0Y2ggKHNlbGVj
dGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpOT05F
OgorICAgICAgICBjYXNlIGtodG1sOjpTZWxlY3Rpb246Ok5PTkU6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpDQVJF
VDoKKyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpDQVJFVDoKICAgICAgICAgICAgIHJl
Y3QgPSBzZWxlY3Rpb24oKS5jYXJldFJlY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFOR0U6CisgICAgICAg
IGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6UkFOR0U6CiAgICAgICAgICAgICByZWN0ID0gc2VsZWN0
aW9uUmVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzY1NywxNCArMzY1Nywx
NCBAQCB2b2lkIEZyYW1lOjpjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhCiAgICAgUVJlY3Qg
cmVjdDsKICAgICAKICAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAg
Y2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpOT05FOgorICAgICAgICBjYXNlIGtodG1sOjpTZWxl
Y3Rpb246Ok5PTkU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpDQVJFVDoKKyAgICAgICAgY2FzZSBraHRtbDo6U2Vs
ZWN0aW9uOjpDQVJFVDoKICAgICAgICAgICAgIHJlY3QgPSBzZWxlY3Rpb24oKS5jYXJldFJlY3Qo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU2VsZWN0
aW9uQ29udHJvbGxlcjo6UkFOR0U6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6UkFO
R0U6CiAgICAgICAgICAgICByZWN0ID0gc2VsZWN0aW9uUmVjdCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzY5MSw3ICszNjkxLDcgQEAgUmVuZGVyU3R5bGUgKkZyYW1lOjpzdHls
ZUZvclNlbGVjdGlvblN0YQogICAgIGlmIChkLT5tX3NlbGVjdGlvbi5pc05vbmUoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCi0gICAgUG9zaXRpb24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKGQt
Pm1fc2VsZWN0aW9uLnN0YXJ0KCksIGQtPm1fc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSkuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24oZC0+bV9z
ZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxl
bnQoKTsKICAgICBpZiAoIXBvcy5pblJlbmRlcmVkQ29udGVudCgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICBOb2RlSW1wbCAqbm9kZSA9IHBvcy5ub2RlKCk7Cg==
</data>
<flag name="review"
          id="1259"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5649</attachid>
            <date>2006-01-13 16:53:05 -0800</date>
            <delta_ts>2006-01-13 22:53:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>Selection.patch</filename>
            <type>text/plain</type>
            <size>107672</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3ht
bC9Eb2N1bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjA4MikKKysrIGtodG1sL3htbC9Eb2N1bWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTI2LDggKzExMjYsOCBAQCB2b2lkIERvY3Vt
ZW50SW1wbDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgY2FudmFzLT5jbGVhclNlbGVjdGlv
bigpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUG9zaXRpb24gc3RhcnRQb3MgPSBWaXNp
YmxlUG9zaXRpb24ocy5zdGFydCgpLCBzLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQo
KTsKLSAgICAgICAgUG9zaXRpb24gZW5kUG9zID0gVmlzaWJsZVBvc2l0aW9uKHMuZW5kKCksIHMu
ZW5kQWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gc3RhcnRQ
b3MgPSBWaXNpYmxlUG9zaXRpb24ocy5zdGFydCgpLCBzLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFs
ZW50KCk7CisgICAgICAgIFBvc2l0aW9uIGVuZFBvcyA9IFZpc2libGVQb3NpdGlvbihzLmVuZCgp
LCBzLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIGlmIChzdGFydFBvcy5p
c05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCAqc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCAqZW5kUmVuZGVyZXIgPSBlbmRQb3Mubm9kZSgpLT5yZW5kZXJl
cigpOwpJbmRleDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CShyZXZpc2lvbiAxMjA4MikKKysrIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNiw4ICs1MDYsOCBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAobV9tYXRjaFN0eWxlKQogICAgICAg
ICBtX2luc2VydGlvblN0eWxlID0gc3R5bGVBdFBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKTsK
ICAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHNlbGVjdGlvbi5zdGFydCgp
LCBzZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZUVuZChzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5lbmRBZmZpbml0eSgpKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZm
aW5pdHkoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoc2VsZWN0aW9uLmVuZCgp
LCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgYm9vbCBzdGFydEF0U3RhcnRPZkJsb2NrID0g
aXNTdGFydE9mQmxvY2sodmlzaWJsZVN0YXJ0KTsKICAgICBib29sIHN0YXJ0QXRFbmRPZkJsb2Nr
ID0gaXNFbmRPZkJsb2NrKHZpc2libGVTdGFydCk7CiAgICAgYm9vbCBzdGFydEF0QmxvY2tCb3Vu
ZGFyeSA9IHN0YXJ0QXRTdGFydE9mQmxvY2sgfHwgc3RhcnRBdEVuZE9mQmxvY2s7CkBAIC04OTYs
NyArODk2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y29tcGxldGVIVAogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKG1fc2VsZWN0UmVwbGFjZW1lbnQpCi0gICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0LCBTRUxfREVGQVVM
VF9BRkZJTklUWSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihzdGFydCwgZW5kLCBTRUxfREVGQVVMVF9B
RkZJTklUWSkpOwogICAgIGVsc2UKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZCwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbi5oCShyZXZpc2lvbiAwKQor
Kysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgS0hUTUxfRURJVElOR19TRUxFQ1RJT05f
SAorI2RlZmluZSBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9ICisKKyNpbmNsdWRlIDxreG1sY29y
ZS9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAieG1sL2RvbV9wb3NpdGlvbi5oIgorI2luY2x1ZGUg
InRleHRfZ3JhbnVsYXJpdHkuaCIKKworbmFtZXNwYWNlIGtodG1sIHsKKworY2xhc3MgU2VsZWN0
aW9uCit7CitwdWJsaWM6CisgICAgZW51bSBFU3RhdGUgeyBOT05FLCBDQVJFVCwgUkFOR0UgfTsK
KyAgICBlbnVtIEVEaXJlY3Rpb24geyBGT1JXQVJELCBCQUNLV0FSRCwgUklHSFQsIExFRlQgfTsK
KyNkZWZpbmUgU0VMX0RFRkFVTFRfQUZGSU5JVFkgRE9XTlNUUkVBTQorCisgICAgZnJpZW5kIGNs
YXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CisKKyAgICB0eXBlZGVmIERPTTo6UG9zaXRpb24gUG9z
aXRpb247CisgICAgdHlwZWRlZiBET006OlJhbmdlSW1wbCBSYW5nZUltcGw7CisgICAgdHlwZWRl
ZiBET006Ok5vZGVJbXBsIE5vZGVJbXBsOworCisgICAgU2VsZWN0aW9uKCk7CisgICAgU2VsZWN0
aW9uKGNvbnN0IFBvc2l0aW9uICYsIGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0eSk7CisKKyAg
ICBFU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2b2lkIHNl
dEFmZmluaXR5KEVBZmZpbml0eSBhZmZpbml0eSkgeyBtX2FmZmluaXR5ID0gYWZmaW5pdHk7IH0K
KyAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2FmZmluaXR5OyB9CisK
KyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICB2b2lkIHNldEJhc2UoUG9zaXRpb24gYmFzZSkgeyBt
X2Jhc2UgPSBiYXNlOyB9CisgICAgdm9pZCBzZXRFeHRlbnQoUG9zaXRpb24gZXh0ZW50KSB7IG1f
ZXh0ZW50ID0gZXh0ZW50OyB9CisgICAgdm9pZCBzZXRTdGFydChQb3NpdGlvbiBzdGFydCkgeyBt
X3N0YXJ0ID0gc3RhcnQ7IH0KKyAgICB2b2lkIHNldEVuZChQb3NpdGlvbiBlbmQpIHsgbV9lbmQg
PSBlbmQ7IH0KKyAgICBQb3NpdGlvbiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9Cisg
ICAgUG9zaXRpb24gZXh0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQ7IH0KKyAgICBQb3Np
dGlvbiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICBQb3NpdGlvbiBlbmQo
KSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorCisgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJl
dHVybiBzdGF0ZSgpID09IE5PTkU7IH0KKyAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVy
biBzdGF0ZSgpID09IENBUkVUOyB9CisgICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGUoKSA9PSBSQU5HRTsgfQorICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiBzdGF0ZSgpICE9IE5PTkU7IH0KKworICAgIGJvb2wgaXNCYXNlRmlyc3QoKSBjb25zdCB7
IHJldHVybiBtX2Jhc2VJc0ZpcnN0OyB9CisKKyAgICBQYXNzUmVmUHRyPERPTTo6UmFuZ2VJbXBs
PiB0b1JhbmdlKCkgY29uc3Q7CisKKyAgICB2b2lkIGRlYnVnUG9zaXRpb24oKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHZhbGlkYXRlKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkg
PSBDSEFSQUNURVIpOworICAgIHZvaWQgYWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KCk7CisKKyAg
ICBQb3NpdGlvbiBtX2Jhc2U7ICAgICAgICAgICAgICAvLyBiYXNlIHBvc2l0aW9uIGZvciB0aGUg
c2VsZWN0aW9uCisgICAgUG9zaXRpb24gbV9leHRlbnQ7ICAgICAgICAgICAgLy8gZXh0ZW50IHBv
c2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCisgICAgUG9zaXRpb24gbV9zdGFydDsgICAgICAgICAg
ICAgLy8gc3RhcnQgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24KKyAgICBQb3NpdGlvbiBtX2Vu
ZDsgICAgICAgICAgICAgICAvLyBlbmQgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24KKworICAg
IEVBZmZpbml0eSBtX2FmZmluaXR5OyAgICAgICAgIC8vIHRoZSB1cHN0cmVhbS9kb3duc3RyZWFt
IGFmZmluaXR5IG9mIHRoZSBjYXJldAorCisgICAgLy8gdGhlc2UgYXJlIGNhY2hlZCwgY2FuIGJl
IHJlY2FsY3VsYXRlZCBieSB2YWxpZGF0ZSgpCisgICAgRVN0YXRlIG1fc3RhdGU7ICAgICAgICAg
ICAgICAgLy8gdGhlIHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24KKyAgICBib29sIG1fYmFzZUlzRmly
c3Q7ICAgICAgICAgICAvLyB0cnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRoZSBleHRlbnQKK307CisK
K2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uICZhLCBjb25zdCBTZWxlY3Rp
b24gJmIpCit7CisgICAgcmV0dXJuIGEuc3RhcnQoKSA9PSBiLnN0YXJ0KCkgJiYgYS5lbmQoKSA9
PSBiLmVuZCgpICYmIGEuYWZmaW5pdHkoKSA9PSBiLmFmZmluaXR5KCk7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgU2VsZWN0aW9uICZhLCBjb25zdCBTZWxlY3Rpb24gJmIpCit7
CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2Uga2h0bWwKKworI2Vu
ZGlmIC8vIEtIVE1MX0VESVRJTkdfU0VMRUNUSU9OX0gKSW5kZXg6IGtodG1sL2VkaXRpbmcvYXBw
bHlfc3R5bGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9hcHBseV9z
dHlsZV9jb21tYW5kLmNwcAkocmV2aXNpb24gMTIwODIpCisrKyBraHRtbC9lZGl0aW5nL2FwcGx5
X3N0eWxlX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6dXBkYXRlU3RhcnRFbmQoUAogICAgIGlmICghbV91c2VFbmRp
bmdTZWxlY3Rpb24gJiYgKG5ld1N0YXJ0ICE9IG1fc3RhcnQgfHwgbmV3RW5kICE9IG1fZW5kKSkK
ICAgICAgICAgbV91c2VFbmRpbmdTZWxlY3Rpb24gPSB0cnVlOwogCi0gICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIobmV3U3RhcnQsIFZQX0RFRkFVTFRfQUZGSU5JVFks
IG5ld0VuZCwgVlBfREVGQVVMVF9BRkZJTklUWSkpOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihT
ZWxlY3Rpb25Db250cm9sbGVyKG5ld1N0YXJ0LCBuZXdFbmQsIFZQX0RFRkFVTFRfQUZGSU5JVFkp
KTsKICAgICBtX3N0YXJ0ID0gbmV3U3RhcnQ7CiAgICAgbV9lbmQgPSBuZXdFbmQ7CiB9CkluZGV4
OiBraHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGto
dG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAJKHJldmlzaW9uIDEyMDgyKQorKysg
a2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEyLDcgKzExMiw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KGNvbnN0IERPTVMK
ICAgICAvLyBEZWxldGUgYW55IGluc2lnbmlmaWNhbnQgdGV4dCB0aGF0IGNvdWxkIGdldCBpbiB0
aGUgd2F5IG9mIHdoaXRlc3BhY2UgdHVybmluZwogICAgIC8vIG91dCBjb3JyZWN0bHkgYWZ0ZXIg
dGhlIGluc2VydGlvbi4KICAgICBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKLSAgICBk
ZWxldGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oc2VsZWN0aW9uLmVuZCgpLnRyYWlsaW5n
V2hpdGVzcGFjZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmRBZmZpbml0eSgpKSk7CisgICAgZGVsZXRl
SW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKHNlbGVjdGlvbi5lbmQoKS50cmFpbGluZ1doaXRl
c3BhY2VQb3NpdGlvbihzZWxlY3Rpb24uYWZmaW5pdHkoKSkpOwogCiAgICAgLy8gRmlndXJlIG91
dCB0aGUgc3RhcnRQb3NpdGlvbgogICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rp
b24uc3RhcnQoKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpp
bnB1dChjb25zdCBET01TCiAgICAgICAgIG1fY2hhcmFjdGVyc0FkZGVkICs9IHRleHQubGVuZ3Ro
KCk7CiAgICAgfQogCi0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIo
c3RhcnRQb3NpdGlvbiwgRE9XTlNUUkVBTSwgZW5kUG9zaXRpb24sIFNFTF9ERUZBVUxUX0FGRklO
SVRZKSk7CisgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24sIERPV05TVFJFQU0pKTsKIAogICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5cGluZyBzdHlsZS4KICAgICAvLyBGSVhNRTogSW1wcm92
ZSB0eXBpbmcgc3R5bGUuCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFu
ZDo6aW5wdXQoY29uc3QgRE9NUwogICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlKTsKIAog
ICAgIGlmICghc2VsZWN0SW5zZXJ0ZWRUZXh0KQotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGVuZGluZ1NlbGVjdGlvbigpLmVuZEFmZmluaXR5KCkp
OworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGVu
ZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpOwogfQogCiBET006OlBvc2l0aW9uIEluc2VydFRl
eHRDb21tYW5kOjppbnNlcnRUYWIoUG9zaXRpb24gcG9zKQpJbmRleDoga2h0bWwvZWRpdGluZy9p
bnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCShyZXZpc2lv
biAxMjA4MikKKysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxNCArMTA3LDE0IEBAIHZvaWQgSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IFBvc2l0aW9uIHBvcyA9IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0
eSA9IHNlbGVjdGlvbi5zdGFydEFmZmluaXR5KCk7CisgICAgRUFmZmluaXR5IGFmZmluaXR5ID0g
c2VsZWN0aW9uLmFmZmluaXR5KCk7CiAgICAgICAgIAogICAgIC8vIERlbGV0ZSB0aGUgY3VycmVu
dCBzZWxlY3Rpb24uCiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgY2Fs
Y3VsYXRlU3R5bGVCZWZvcmVJbnNlcnRpb24ocG9zKTsKICAgICAgICAgZGVsZXRlU2VsZWN0aW9u
KGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIHBvcyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7
Ci0gICAgICAgIGFmZmluaXR5ID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpOwor
ICAgICAgICBhZmZpbml0eSA9IGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCk7CiAgICAgfQog
CiAgICAgcG9zID0gcG9zaXRpb25PdXRzaWRlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50KHBvcyk7
CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJKHJl
dmlzaW9uIDEyMDgyKQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKGlzVGFiU3BhblRleHROb2RlKHBvcy5ub2Rl
KCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbihub2RlVG9JbnNlcnQs
IHBvcyk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihQb3NpdGlvbihub2RlVG9JbnNlcnQt
PnRyYXZlcnNlTmV4dE5vZGUoKSwgMCksIERPV05TVFJFQU0pOwotICAgIH0gZWxzZSBpZiAoaXNF
bmRPZkJsb2NrKFZpc2libGVQb3NpdGlvbihwb3MsIHNlbGVjdGlvbi5zdGFydEFmZmluaXR5KCkp
KSkgeworICAgIH0gZWxzZSBpZiAoaXNFbmRPZkJsb2NrKFZpc2libGVQb3NpdGlvbihwb3MsIHNl
bGVjdGlvbi5hZmZpbml0eSgpKSkpIHsKICAgICAgICAgTE9HKEVkaXRpbmcsICJpbnB1dCBuZXds
aW5lIGNhc2UgMSIpOwogICAgICAgICAvLyBDaGVjayBmb3IgYSB0cmFpbGluZyBCUi4gSWYgdGhl
cmUgaXNuJ3Qgb25lLCB3ZSdsbCBuZWVkIHRvIGluc2VydCBhbiAiZXh0cmEiIG9uZS4KICAgICAg
ICAgLy8gVGhpcyBtYWtlcyB0aGUgInJlYWwiIEJSIHdlIHdhbnQgdG8gaW5zZXJ0IGFwcGVhciBp
biB0aGUgcmVuZGVyaW5nIHdpdGhvdXQgYW55IApJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAkocmV2aXNp
b24gMCkKKysrIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgIAorI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNlbGVjdGlvbi5oIgorCisjaW5jbHVkZSAiZG9tL2RvbV9ub2RlLmgiCisjaW5j
bHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCisjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRl
cl9zdHlsZS5oIgorI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJ2aXNpYmxl
X3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50SW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJ4
bWwvZG9tX25vZGVpbXBsLmgiCisjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgorI2luY2x1
ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgorCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9u
cy5oPgorCisjZGVmaW5lIEVESVRfREVCVUcgMAorCit1c2luZyBuYW1lc3BhY2UgRE9NOworCitu
YW1lc3BhY2Uga2h0bWwgeworCitTZWxlY3Rpb246OlNlbGVjdGlvbigpCisgICAgOiBtX2FmZmlu
aXR5KERPV05TVFJFQU0pCisgICAgLCBtX3N0YXRlKE5PTkUpCisgICAgLCBtX2Jhc2VJc0ZpcnN0
KHRydWUpCit7Cit9CisKK1NlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZiYXNl
LCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHkpCisgICAgOiBtX2Jh
c2UoYmFzZSksIG1fZXh0ZW50KGV4dGVudCkKKyAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCisg
ICAgLCBtX3N0YXRlKE5PTkUpCisgICAgLCBtX2Jhc2VJc0ZpcnN0KHRydWUpCit7CisgICAgdmFs
aWRhdGUoKTsKK30KKwordm9pZCBTZWxlY3Rpb246OmNsZWFyKCkKK3sKKyAgICBtX2FmZmluaXR5
ID0gU0VMX0RFRkFVTFRfQUZGSU5JVFk7CisgICAgbV9iYXNlLmNsZWFyKCk7CisgICAgbV9leHRl
bnQuY2xlYXIoKTsKK30KKworUGFzc1JlZlB0cjxSYW5nZUltcGw+IFNlbGVjdGlvbjo6dG9SYW5n
ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVwZGF0ZWQgbGF5b3V0IHNpbmNlIHRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkCisgICAgLy8gaW4gdGhlIGNvdXJzZSBvZiBydW5uaW5nIGVkaXQgY29tbWFu
ZHMgd2hpY2ggbW9kaWZ5IHRoZSBET00uCisgICAgLy8gRmFpbGluZyB0byBjYWxsIHRoaXMgY2Fu
IHJlc3VsdCBpbiBlcXVpdmFsZW50WFhYUG9zaXRpb24gY2FsbHMgcmV0dXJuaW5nCisgICAgLy8g
aW5jb3JyZWN0IHJlc3VsdHMuCisgICAgbV9zdGFydC5ub2RlKCktPmdldERvY3VtZW50KCktPnVw
ZGF0ZUxheW91dCgpOworCisgICAgUG9zaXRpb24gcywgZTsKKyAgICBpZiAoaXNDYXJldCgpKSB7
CisgICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgYSBjYXJldCwgbW92ZSB0aGUgcmFuZ2Ug
c3RhcnQgdXBzdHJlYW0uIFRoaXMgaGVscHMgdXMgbWF0Y2gKKyAgICAgICAgLy8gdGhlIGNvbnZl
bnRpb25zIG9mIHRleHQgZWRpdG9ycyB0ZXN0ZWQsIHdoaWNoIG1ha2Ugc3R5bGUgZGV0ZXJtaW5h
dGlvbnMgYmFzZWQKKyAgICAgICAgLy8gb24gdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGNhcmV0
LCBpZiBhbnkuIAorICAgICAgICBzID0gbV9zdGFydC51cHN0cmVhbSgpLmVxdWl2YWxlbnRSYW5n
ZUNvbXBsaWFudFBvc2l0aW9uKCk7CisgICAgICAgIGUgPSBzOworICAgIH0KKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIHJhbmdlLCBzZWxlY3QgdGhlIG1pbmlt
dW0gcmFuZ2UgdGhhdCBlbmNvbXBhc3NlcyB0aGUgc2VsZWN0aW9uLgorICAgICAgICAvLyBBZ2Fp
biwgdGhpcyBpcyB0byBtYXRjaCB0aGUgY29udmVudGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3Rl
ZCwgd2hpY2ggbWFrZSBzdHlsZSAKKyAgICAgICAgLy8gZGV0ZXJtaW5hdGlvbnMgYmFzZWQgb24g
dGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc2VsZWN0aW9uLiAKKyAgICAgICAgLy8gRm9yIGlu
c3RhbmNlLCB0aGlzIG9wZXJhdGlvbiBoZWxwcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgIlgiIHNl
bGVjdGVkIGJlbG93IGlzIHRoZSAKKyAgICAgICAgLy8gb25seSB0aGluZyBzZWxlY3RlZC4gVGhl
IHJhbmdlIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byAibGVhayIgb3V0IHRvIHRoZSBlbmQgb2Yg
dGhlIAorICAgICAgICAvLyBwcmV2aW91cyB0ZXh0IG5vZGUsIG9yIHRvIHRoZSBiZWdpbm5pbmcg
b2YgdGhlIG5leHQgdGV4dCBub2RlLCBlYWNoIG9mIHdoaWNoIGhhcyBhIAorICAgICAgICAvLyBk
aWZmZXJlbnQgc3R5bGUuCisgICAgICAgIC8vIAorICAgICAgICAvLyBPbiBhIHRyZWFzdXJlIG1h
cCwgPGI+WDwvYj4gbWFya3MgdGhlIHNwb3QuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICBeIHNlbGVjdGVkCisgICAgICAgIC8vCisgICAgICAgIEFTU0VSVChpc1JhbmdlKCkpOwor
ICAgICAgICBzID0gbV9zdGFydC5kb3duc3RyZWFtKCk7CisgICAgICAgIGUgPSBtX2VuZC51cHN0
cmVhbSgpOworICAgICAgICBpZiAoUmFuZ2VJbXBsOjpjb21wYXJlQm91bmRhcnlQb2ludHMocy5u
b2RlKCksIHMub2Zmc2V0KCksIGUubm9kZSgpLCBlLm9mZnNldCgpKSA+IDApIHsKKyAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhcnQgaXMgYmVmb3JlIHRoZSBlbmQuCisgICAgICAgICAg
ICAvLyBUaGUgZW5kIGNhbiB3aW5kIHVwIGJlZm9yZSB0aGUgc3RhcnQgaWYgY29sbGFwc2VkIHdo
aXRlc3BhY2UgaXMgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQuCisgICAgICAgICAgICBQb3NpdGlv
biB0bXAgPSBzOworICAgICAgICAgICAgcyA9IGU7CisgICAgICAgICAgICBlID0gdG1wOworICAg
ICAgICB9CisgICAgICAgIHMgPSBzLmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7
CisgICAgICAgIGUgPSBlLmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7CisgICAg
fQorCisgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgIFBhc3NSZWZQdHI8UmFuZ2VJbXBs
PiByZXN1bHQobmV3IFJhbmdlSW1wbChzLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKSkpOworICAgIHJl
c3VsdC0+c2V0U3RhcnQocy5ub2RlKCksIHMub2Zmc2V0KCksIGV4Y2VwdGlvbkNvZGUpOworICAg
IGlmIChleGNlcHRpb25Db2RlKSB7CisgICAgICAgIEVSUk9SKCJFeGNlcHRpb24gc2V0dGluZyBS
YW5nZSBzdGFydCBmcm9tIFNlbGVjdGlvbjogJWQiLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIHJlc3VsdC0+c2V0RW5kKGUubm9kZSgpLCBlLm9mZnNldCgp
LCBleGNlcHRpb25Db2RlKTsKKyAgICBpZiAoZXhjZXB0aW9uQ29kZSkgeworICAgICAgICBFUlJP
UigiRXhjZXB0aW9uIHNldHRpbmcgUmFuZ2UgZW5kIGZyb20gU2VsZWN0aW9uOiAlZCIsIGV4Y2Vw
dGlvbkNvZGUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkpCit7CisgICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHJlbmRlcmVkIHBvc2l0aW9ucywg
aWYgcG9zc2libGUuCisgICAgUG9zaXRpb24gb3JpZ2luYWxCYXNlKG1fYmFzZSk7CisgICAgYm9v
bCBiYXNlQW5kRXh0ZW50RXF1YWwgPSBtX2Jhc2UgPT0gbV9leHRlbnQ7CisgICAgaWYgKG1fYmFz
ZS5pc05vdE51bGwoKSkgeworICAgICAgICBtX2Jhc2UgPSBWaXNpYmxlUG9zaXRpb24obV9iYXNl
LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICBpZiAoYmFzZUFuZEV4dGVu
dEVxdWFsKQorICAgICAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2U7CisgICAgfQorICAgIGlmICht
X2V4dGVudC5pc05vdE51bGwoKSAmJiAhYmFzZUFuZEV4dGVudEVxdWFsKSB7CisgICAgICAgIG1f
ZXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZh
bGVudCgpOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2ZSBhIGRhbmds
aW5nIHN0YXJ0IG9yIGVuZAorICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgJiYgbV9leHRlbnQuaXNO
dWxsKCkpIHsKKyAgICAgICAgLy8gTW92ZSB0aGUgcG9zaXRpb24gdG8gdGhlIGVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQgb2YgdGhlIG9yaWdpbmFsIGJhc2UsIGlmIHBvc3NpYmxlLgorICAgICAg
ICAvLyBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGZsYXNoaW5nIHRoZSBjYXJldCBzb21ld2hlcmUg
d2hlbiBhIHJlbmRlcmVkIHBvc2l0aW9uIGZvcgorICAgICAgICAvLyB0aGUgYmFzZSBhbmQgZXh0
ZW50IGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgaWYgKG9yaWdpbmFsQmFzZS5pc05vdE51bGwo
KSkgeworICAgICAgICAgICAgUG9zaXRpb24gcG9zKG9yaWdpbmFsQmFzZS5ub2RlKCktPmVuY2xv
c2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSwgMCk7CisgICAgICAgICAgICBtX2Jhc2UgPSBwb3M7Cisg
ICAgICAgICAgICBtX2V4dGVudCA9IHBvczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIFdlIGhhdmUgbm8gcG9zaXRpb24gdG8gd29yayB3aXRoLiBTZWUgaWYgdGhl
IEJPRFkgZWxlbWVudCBvZiB0aGUgcGFnZQorICAgICAgICAgICAgLy8gaXMgY29udGVudEVkaXRh
YmxlLiBJZiBpdCBpcywgcHV0IHRoZSBjYXJldCB0aGVyZS4KKyAgICAgICAgICAgIC8vTm9kZUlt
cGwgKm5vZGUgPSBkb2N1bWVudCgpCisgICAgICAgICAgICBtX3N0YXJ0LmNsZWFyKCk7CisgICAg
ICAgICAgICBtX2VuZC5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIG1fYmFzZUlzRmlyc3Qg
PSB0cnVlOworICAgIH0gZWxzZSBpZiAobV9iYXNlLmlzTnVsbCgpKSB7CisgICAgICAgIG1fYmFz
ZSA9IG1fZXh0ZW50OworICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKKyAgICB9IGVsc2Ug
aWYgKG1fZXh0ZW50LmlzTnVsbCgpKSB7CisgICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOworICAg
ICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Jhc2VJ
c0ZpcnN0ID0gUmFuZ2VJbXBsOjpjb21wYXJlQm91bmRhcnlQb2ludHMobV9iYXNlLm5vZGUoKSwg
bV9iYXNlLm9mZnNldCgpLCBtX2V4dGVudC5ub2RlKCksIG1fZXh0ZW50Lm9mZnNldCgpKSA8PSAw
OworICAgIH0KKworICAgIGlmIChtX2Jhc2VJc0ZpcnN0KSB7CisgICAgICAgIG1fc3RhcnQgPSBt
X2Jhc2U7CisgICAgICAgIG1fZW5kID0gbV9leHRlbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9zdGFydCA9IG1fZXh0ZW50OworICAgICAgICBtX2VuZCA9IG1fYmFzZTsKKyAgICB9CisgICAg
CisgICAgLy8gRXhwYW5kIHRoZSBzZWxlY3Rpb24gaWYgcmVxdWVzdGVkLgorICAgIHN3aXRjaCAo
Z3JhbnVsYXJpdHkpIHsKKyAgICAgICAgY2FzZSBDSEFSQUNURVI6CisgICAgICAgICAgICAvLyBE
b24ndCBkbyBhbnkgZXhwYW5zaW9uLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V09SRDogeworICAgICAgICAgICAgLy8gR2VuZXJhbCBjYXNlOiBTZWxlY3QgdGhlIHdvcmQgdGhl
IGNhcmV0IGlzIHBvc2l0aW9uZWQgaW5zaWRlIG9mLCBvciBhdCB0aGUgc3RhcnQgb2YgKFJpZ2h0
V29yZElmT25Cb3VuZGFyeSkuCisgICAgICAgICAgICAvLyBFZGdlIGNhc2U6IElmIHRoZSBjYXJl
dCBpcyBhZnRlciB0aGUgbGFzdCB3b3JkIGluIGEgc29mdC13cmFwcGVkIGxpbmUgb3IgdGhlIGxh
c3Qgd29yZCBpbgorICAgICAgICAgICAgLy8gdGhlIGRvY3VtZW50LCBzZWxlY3QgdGhhdCBsYXN0
IHdvcmQgKExlZnRXb3JkSWZPbkJvdW5kYXJ5KS4KKyAgICAgICAgICAgIC8vIEVkZ2UgY2FzZTog
SWYgdGhlIGNhcmV0IGlzIGFmdGVyIHRoZSBsYXN0IHdvcmQgaW4gYSBwYXJhZ3JhcGgsIHNlbGVj
dCBmcm9tIHRoZSB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgLy8gbGFzdCB3b3JkIHRvIHRo
ZSBsaW5lIGJyZWFrIChhbHNvIFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAgICAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0
eSk7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kICAgPSBWaXNpYmxlUG9zaXRpb24o
bV9lbmQsIG1fYWZmaW5pdHkpOworICAgICAgICAgICAgRVdvcmRTaWRlIHNpZGUgPSBSaWdodFdv
cmRJZk9uQm91bmRhcnk7CisgICAgICAgICAgICBpZiAoaXNFbmRPZkRvY3VtZW50KHN0YXJ0KSB8
fCAoaXNFbmRPZkxpbmUoc3RhcnQpICYmICFpc1N0YXJ0T2ZMaW5lKHN0YXJ0KSAmJiAhaXNFbmRP
ZlBhcmFncmFwaChzdGFydCkpKQorICAgICAgICAgICAgICAgIHNpZGUgPSBMZWZ0V29yZElmT25C
b3VuZGFyeTsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mV29yZChzdGFydCwgc2lkZSku
ZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIHNpZGUgPSBSaWdodFdvcmRJZk9uQm91bmRh
cnk7CisgICAgICAgICAgICBpZiAoaXNFbmRPZkRvY3VtZW50KGVuZCkgfHwgKGlzRW5kT2ZMaW5l
KGVuZCkgJiYgIWlzU3RhcnRPZkxpbmUoZW5kKSAmJiAhaXNFbmRPZlBhcmFncmFwaChlbmQpKSkK
KyAgICAgICAgICAgICAgICBzaWRlID0gTGVmdFdvcmRJZk9uQm91bmRhcnk7CisgICAgICAgICAg
ICBtX2VuZCA9IGVuZE9mV29yZChlbmQsIHNpZGUpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIExJ
TkU6IHsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24o
bV9zdGFydCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gZW5kID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZp
bml0eSkpOworICAgICAgICAgICAgLy8gSWYgdGhlIGVuZCBvZiB0aGlzIGxpbmUgaXMgYXQgdGhl
IGVuZCBvZiBhIHBhcmFncmFwaCwgaW5jbHVkZSB0aGUgc3BhY2UgCisgICAgICAgICAgICAvLyBh
ZnRlciB0aGUgZW5kIG9mIHRoZSBsaW5lIGluIHRoZSBzZWxlY3Rpb24uCisgICAgICAgICAgICBp
ZiAoaXNFbmRPZlBhcmFncmFwaChlbmQpKSB7CisgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG5leHQgPSBlbmQubmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChuZXh0LmlzTm90TnVs
bCgpKQorICAgICAgICAgICAgICAgICAgICBlbmQgPSBuZXh0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9lbmQgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgTElORV9CT1VOREFSWToKKyAgICAgICAgICAgIG1f
c3RhcnQgPSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkp
LmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBtX2VuZCA9IGVuZE9mTGluZShWaXNpYmxl
UG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEFSQUdSQVBIOiB7CisgICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gcG9zKG1fc3RhcnQsIG1fYWZmaW5pdHkpOworICAgICAgICAgICAgaWYgKGlzU3Rh
cnRPZkxpbmUocG9zKSAmJiBpc0VuZE9mRG9jdW1lbnQocG9zKSkKKyAgICAgICAgICAgICAgICBw
b3MgPSBwb3MucHJldmlvdXMoKTsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mUGFyYWdy
YXBoKHBvcykuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fZW5k
LCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICAvLyBJbmNsdWRlIHRoZSBzcGFjZSBhZnRlciB0
aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGggaW4gdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mTmV4dFBhcmFncmFwaCA9IHZpc2libGVQYXJhZ3JhcGhFbmQu
bmV4dCgpOworICAgICAgICAgICAgbV9lbmQgPSBzdGFydE9mTmV4dFBhcmFncmFwaC5pc05vdE51
bGwoKSA/IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkgOiB2aXNpYmxlUGFy
YWdyYXBoRW5kLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIERPQ1VNRU5UX0JPVU5EQVJZOgorICAgICAgICAgICAgbV9zdGFydCA9
IHN0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBtX2VuZCA9IGVuZE9mRG9jdW1lbnQoVmlzaWJs
ZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFBBUkFHUkFQSF9CT1VOREFSWToKKyAgICAgICAgICAg
IG1fc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2Fm
ZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZQYXJh
Z3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGp1c3RGb3JFZGl0YWJs
ZUNvbnRlbnQoKTsKKworICAgIC8vIGFkanVzdCB0aGUgc3RhdGUKKyAgICBpZiAobV9zdGFydC5p
c051bGwoKSkgeworICAgICAgICBBU1NFUlQobV9lbmQuaXNOdWxsKCkpOworICAgICAgICBtX3N0
YXRlID0gTk9ORTsKKworICAgICAgICAvLyBlbmZvcmNlIGRvd25zdHJlYW0gYWZmaW5pdHkgaWYg
bm90IGNhcmV0LCBhcyBhZmZpbml0eSBvbmx5CisgICAgICAgIC8vIG1ha2VzIHNlbnNlIGZvciBj
YXJldAorICAgICAgICBtX2FmZmluaXR5ID0gRE9XTlNUUkVBTTsKKyAgICB9IGVsc2UgaWYgKG1f
c3RhcnQgPT0gbV9lbmQgfHwgbV9zdGFydC51cHN0cmVhbSgpID09IG1fZW5kLnVwc3RyZWFtKCkp
IHsKKyAgICAgICAgbV9zdGF0ZSA9IENBUkVUOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fc3Rh
dGUgPSBSQU5HRTsKKworICAgICAgICAvLyBlbmZvcmNlIGRvd25zdHJlYW0gYWZmaW5pdHkgaWYg
bm90IGNhcmV0LCBhcyBhZmZpbml0eSBvbmx5CisgICAgICAgIC8vIG1ha2VzIHNlbnNlIGZvciBj
YXJldAorICAgICAgICBtX2FmZmluaXR5ID0gRE9XTlNUUkVBTTsKKworICAgICAgICAvLyAiQ29u
c3RyYWluIiB0aGUgc2VsZWN0aW9uIHRvIGJlIHRoZSBzbWFsbGVzdCBlcXVpdmFsZW50IHJhbmdl
IG9mIG5vZGVzLgorICAgICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgYXJiaXRyYXJ5IGNob2lj
ZSwgYnV0IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcworICAgICAgICAvLyB1c2VmdWwgdG8g
bWFrZSB0byBtYWtlIHRoZSBzZWxlY3Rpb24gImNhbm9uaWNhbCIgKGlmIG9ubHkgZm9yCisgICAg
ICAgIC8vIHB1cnBvc2VzIG9mIGNvbXBhcmluZyBzZWxlY3Rpb25zKS4gVGhpcyBpcyBhbiBpZGVh
bCBwb2ludCBvZiB0aGUgY29kZQorICAgICAgICAvLyB0byBkbyB0aGlzIG9wZXJhdGlvbiwgc2lu
Y2UgYWxsIHNlbGVjdGlvbiBjaGFuZ2VzIHRoYXQgcmVzdWx0IGluIGEgUkFOR0UgCisgICAgICAg
IC8vIGNvbWUgdGhyb3VnaCBoZXJlIGJlZm9yZSBhbnlvbmUgdXNlcyBpdC4KKyAgICAgICAgbV9z
dGFydCA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOworICAgICAgICBtX2VuZCA9IG1fZW5kLnVwc3Ry
ZWFtKCk7CisgICAgfQorICAgIAorI2lmIEVESVRfREVCVUcKKyAgICBkZWJ1Z1Bvc2l0aW9uKCk7
CisjZW5kaWYKK30KKwordm9pZCBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29udGVudCgp
Cit7CisgICAgaWYgKG1fYmFzZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9k
ZUltcGwgKmJhc2VSb290ID0gbV9iYXNlLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwor
ICAgIE5vZGVJbXBsICpzdGFydFJvb3QgPSBtX3N0YXJ0Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOworICAgIE5vZGVJbXBsICplbmRSb290ID0gbV9lbmQubm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCk7CisgICAgCisgICAgLy8gVGhlIGJhc2UsIHN0YXJ0IGFuZCBlbmQgYXJlIGFs
bCBpbiB0aGUgc2FtZSByZWdpb24uICBObyBhZGp1c3RtZW50IG5lY2Vzc2FyeS4KKyAgICBpZiAo
YmFzZVJvb3QgPT0gc3RhcnRSb290ICYmIGJhc2VSb290ID09IGVuZFJvb3QpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBUaGUgc2VsZWN0aW9uIGlzIGJhc2VkIGluIGFuIGVkaXRhYmxl
IGFyZWEuICBLZWVwIGJvdGggc2lkZXMgZnJvbSByZWFjaGluZyBvdXRzaWRlIHRoYXQgYXJlYS4K
KyAgICBpZiAoYmFzZVJvb3QpIHsKKyAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IGlzIG91dHNpZGUg
dGhlIGJhc2UncyBlZGl0YWJsZSByb290LCBjYXAgaXQgYXQgdGhlIHN0YXJ0IG9mIHRoYXQgZWRp
dGFibGUgcm9vdC4KKyAgICAgICAgaWYgKGJhc2VSb290ICE9IHN0YXJ0Um9vdCkgeworICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0KFBvc2l0aW9uKGJhc2VSb290LCAwKSk7CisgICAg
ICAgICAgICBtX3N0YXJ0ID0gZmlyc3QuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBJZiB0aGUgZW5kIGlzIG91dHNpZGUgdGhlIGJhc2UncyBlZGl0YWJsZSByb290LCBj
YXAgaXQgYXQgdGhlIGVuZCBvZiB0aGF0IGVkaXRhYmxlIHJvb3QuCisgICAgICAgIGlmIChiYXNl
Um9vdCAhPSBlbmRSb290KSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbGFzdChQb3Np
dGlvbihiYXNlUm9vdCwgbWF4RGVlcE9mZnNldChiYXNlUm9vdCkpKTsKKyAgICAgICAgICAgIG1f
ZW5kID0gbGFzdC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICB9CisgICAgLy8gVGhlIHNlbGVj
dGlvbiBpcyBiYXNlZCBvdXRzaWRlIGVkaXRhYmxlIGNvbnRlbnQuICBLZWVwIGJvdGggc2lkZXMg
ZnJvbSByZWFjaGluZyBpbnRvIGVkaXRhYmxlIGNvbnRlbnQuCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gVGhlIHNlbGVjdGlvbiBlbmRzIGluIGVkaXRhYmxlIGNvbnRlbnQsIG1vdmUgYmFja3dh
cmQgdW50aWwgbm9uLWVkaXRhYmxlIGNvbnRlbnQgaXMgcmVhY2hlZC4KKyAgICAgICAgaWYgKGVu
ZFJvb3QpIHsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91czsKKyAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihlbmRSb290LCAwKSkucHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICBlbmRSb290ID0g
cHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
KyAgICAgICAgICAgIH0gd2hpbGUgKGVuZFJvb3QpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBBU1NFUlQoIXByZXZpb3VzLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIG1fZW5kID0gcHJldmlv
dXMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgc2VsZWN0aW9u
IHN0YXJ0cyBpbiBlZGl0YWJsZSBjb250ZW50LCBtb3ZlIGZvcndhcmQgdW50aWwgbm9uLWVkaXRh
YmxlIGNvbnRlbnQgaXMgcmVhY2hlZC4KKyAgICAgICAgaWYgKHN0YXJ0Um9vdCkgeworICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQ7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgbmV4dCA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihzdGFydFJvb3QsIG1heERlZXBP
ZmZzZXQoc3RhcnRSb290KSkpLm5leHQoKTsKKyAgICAgICAgICAgICAgICBzdGFydFJvb3QgPSBu
ZXh0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
ICAgICAgICB9IHdoaWxlIChzdGFydFJvb3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICBB
U1NFUlQoIW5leHQuaXNOdWxsKCkpOworICAgICAgICAgICAgbV9zdGFydCA9IG5leHQuZGVlcEVx
dWl2YWxlbnQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDb3JyZWN0IHRoZSBl
eHRlbnQgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChiYXNlUm9vdCAhPSBtX2V4dGVudC5ub2RlKCkt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2VJc0ZpcnN0
ID8gbV9lbmQgOiBtX3N0YXJ0OworfQorCit2b2lkIFNlbGVjdGlvbjo6ZGVidWdQb3NpdGlvbigp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3N0YXJ0Lm5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy9zdGF0aWMgaW50IGNvbnRleHQgPSA1OworICAgIAorICAgIC8vUmVuZGVyT2JqZWN0ICpy
ID0gMDsKKworICAgIGZwcmludGYoc3RkZXJyLCAiU2VsZWN0aW9uID09PT09PT09PT09PT09PT09
XG4iKTsKKworICAgIGlmIChtX3N0YXJ0ID09IG1fZW5kKSB7CisgICAgICAgIFBvc2l0aW9uIHBv
cyA9IG1fc3RhcnQ7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9zOiAgICAgICAgJXMgJXA6
JWRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1lKCkucXN0cmluZygpLmxhdGluMSgpLCBwb3Mubm9k
ZSgpLCBwb3Mub2Zmc2V0KCkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUG9zaXRpb24g
cG9zID0gbV9zdGFydDsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydDogICAgICAlcyAl
cDolZFxuIiwgcG9zLm5vZGUoKS0+bm9kZU5hbWUoKS5xc3RyaW5nKCkubGF0aW4xKCksIHBvcy5u
b2RlKCksIHBvcy5vZmZzZXQoKSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgICAgICBwb3MgPSBtX2VuZDsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJlbmQ6ICAgICAgICAlcyAlcDolZFxuIiwgcG9zLm5vZGUo
KS0+bm9kZU5hbWUoKS5xc3RyaW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQo
KSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS1cbiIpOworICAgIH0KKyAgICAgICAgICAKKworICAgIGZwcmludGYoc3RkZXJyLCAi
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBET00KSW5kZXg6IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxMjA4
MikKKysrIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMyArMjMsMTEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgS0hU
TUxfRURJVElOR19TRUxFQ1RJT05fSAotI2RlZmluZSBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9I
CisjaWZuZGVmIEtIVE1MX0VESVRJTkdfU0VMRUNUSU9OQ09OVFJPTExFUl9ICisjZGVmaW5lIEtI
VE1MX0VESVRJTkdfU0VMRUNUSU9OQ09OVFJPTExFUl9ICiAKICNpbmNsdWRlIDxxcmVjdC5oPgot
I2luY2x1ZGUgPGt4bWxjb3JlL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0
aW9uLmgiCi0jaW5jbHVkZSAidGV4dF9ncmFudWxhcml0eS5oIgorI2luY2x1ZGUgImVkaXRpbmcv
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlICJlZGl0aW5n
L3Zpc2libGVfdGV4dC5oIgogCkBAIC00NCw3ICs0Miw2IEBAIGNsYXNzIFZpc2libGVQb3NpdGlv
bjsKIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXIKIHsKIHB1YmxpYzoKLSAgICBlbnVtIEVTdGF0
ZSB7IE5PTkUsIENBUkVULCBSQU5HRSB9OwogICAgIGVudW0gRUFsdGVyIHsgTU9WRSwgRVhURU5E
IH07CiAgICAgZW51bSBFRGlyZWN0aW9uIHsgRk9SV0FSRCwgQkFDS1dBUkQsIFJJR0hULCBMRUZU
IH07CiAjZGVmaW5lIFNFTF9ERUZBVUxUX0FGRklOSVRZIERPV05TVFJFQU0KQEAgLTU0LDM0ICs1
MSwzMSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBET006Ok5vZGVJbXBsIE5vZGVJbXBsOwogCiAg
ICAgU2VsZWN0aW9uQ29udHJvbGxlcigpOwotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3Qg
UmFuZ2VJbXBsICosIEVBZmZpbml0eSBiYXNlQWZmaW5pdHksIEVBZmZpbml0eSBleHRlbnRBZmZp
bml0eSk7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBSYW5nZUltcGwgKiwgRUFmZmlu
aXR5IGFmZmluaXR5KTsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmKTsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25z
dCBQb3NpdGlvbiAmLCBFQWZmaW5pdHkgYWZmaW5pdHkpOwotICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXIoY29uc3QgUG9zaXRpb24gJiwgRUFmZmluaXR5LCBjb25zdCBQb3NpdGlvbiAmLCBFQWZmaW5p
dHkpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUG9zaXRpb24gJiwgY29uc3QgUG9z
aXRpb24gJiwgRUFmZmluaXR5KTsKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFNlbGVj
dGlvbkNvbnRyb2xsZXIgJik7CiAKICAgICBTZWxlY3Rpb25Db250cm9sbGVyICZvcGVyYXRvcj0o
Y29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbyk7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciAm
b3BlcmF0b3I9KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcikgeyBtb3ZlVG8ocik7IHJldHVybiAq
dGhpczsgfQogCi0gICAgdm9pZCBtb3ZlVG8oY29uc3QgUmFuZ2VJbXBsICosIEVBZmZpbml0eSBi
YXNlQWZmaW5pdHksIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSk7CisgICAgdm9pZCBtb3ZlVG8o
Y29uc3QgUmFuZ2VJbXBsICosIEVBZmZpbml0eSBhZmZpbml0eSk7CiAgICAgdm9pZCBtb3ZlVG8o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogICAgIHZvaWQgbW92ZVRvKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiAgICAgdm9pZCBtb3ZlVG8oY29u
c3QgUG9zaXRpb24gJiwgRUFmZmluaXR5KTsKLSAgICB2b2lkIG1vdmVUbyhjb25zdCBQb3NpdGlv
biAmLCBFQWZmaW5pdHksIGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0eSk7CisgICAgdm9pZCBt
b3ZlVG8oY29uc3QgUG9zaXRpb24gJiwgY29uc3QgUG9zaXRpb24gJiwgRUFmZmluaXR5KTsKICAg
ICB2b2lkIG1vdmVUbyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICYpOwogCi0gICAgRVN0YXRl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIAotICAgIC8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgc3VwcG9ydCBzZXBhcmF0ZSBiYXNlQWZmaW5pdHkgYW5kIGV4dGVudEFmZmlu
aXR5Ci0gICAgRUFmZmluaXR5IHN0YXJ0QWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2FmZmlu
aXR5OyB9Ci0gICAgRUFmZmluaXR5IGVuZEFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4gbV9hZmZp
bml0eTsgfQotICAgIEVBZmZpbml0eSBiYXNlQWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2Fm
ZmluaXR5OyB9Ci0gICAgRUFmZmluaXR5IGV4dGVudEFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9hZmZpbml0eTsgfQorICAgIFNlbGVjdGlvbjo6RVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zZWwuc3RhdGUoKTsgfQorCisgICAgRUFmZmluaXR5IGFmZmluaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWwuYWZmaW5pdHkoKTsgfQogCiAgICAgYm9vbCBtb2RpZnkoRUFsdGVyLCBFRGly
ZWN0aW9uLCBFVGV4dEdyYW51bGFyaXR5KTsKICAgICBib29sIG1vZGlmeShFQWx0ZXIsIGludCB2
ZXJ0aWNhbERpc3RhbmNlKTsKICAgICBib29sIGV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoRVRleHRH
cmFudWxhcml0eSk7CisKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICB2b2lkIHNldEJhc2UoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICYpOwpAQCAtODksMTAgKzgzLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiAgICAgdm9pZCBzZXRFeHRl
bnQoY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5KTsKIAotICAgIFBvc2l0
aW9uIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KLSAgICBQb3NpdGlvbiBleHRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2V4dGVudDsgfQotICAgIFBvc2l0aW9uIHN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFydDsgfQotICAgIFBvc2l0aW9uIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kOyB9CisgICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmJhc2UoKTsg
fQorICAgIFBvc2l0aW9uIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmV4dGVudCgpOyB9
CisgICAgUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbC5zdGFydCgpOyB9Cisg
ICAgUG9zaXRpb24gZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuZW5kKCk7IH0KIAogICAgIFFS
ZWN0IGNhcmV0UmVjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCBmbGFn
ID0gdHJ1ZSk7CkBAIC0xMDAsMTQgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTW9k
aWZ5QmlhcygpIHsgbV9tb2RpZnlCaWFzU2V0ID0gZmFsc2U7IH0KICAgICB2b2lkIHNldE1vZGlm
eUJpYXMoRUFsdGVyLCBFRGlyZWN0aW9uKTsKICAgICAKLSAgICBib29sIGlzTm9uZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRlKCkgPT0gTk9ORTsgfQotICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkgPT0gQ0FSRVQ7IH0KLSAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiBzdGF0ZSgpID09IFJBTkdFOyB9Ci0gICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRlKCkgIT0gTk9ORTsgfQorICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWwuaXNOb25lKCk7IH0KKyAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVy
biBtX3NlbC5pc0NhcmV0KCk7IH0KKyAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X3NlbC5pc1JhbmdlKCk7IH0KKyAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9zZWwuaXNDYXJldE9yUmFuZ2UoKTsgfQogCi0gICAgUGFzc1JlZlB0cjxET006OlJhbmdl
SW1wbD4gdG9SYW5nZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8RE9NOjpSYW5nZUltcGw+IHRv
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbC50b1JhbmdlKCk7IH0KIAotICAgIHZvaWQgZGVi
dWdQb3NpdGlvbigpIGNvbnN0OwogICAgIHZvaWQgZGVidWdSZW5kZXJlcihraHRtbDo6UmVuZGVy
T2JqZWN0ICpyLCBib29sIHNlbGVjdGVkKSBjb25zdDsKIAogICAgIGZyaWVuZCBjbGFzcyA6OkZy
YW1lOwpAQCAtMTE1LDEwICsxMDgsMTAgQEAgcHVibGljOgogICAgIEZyYW1lICpmcmFtZSgpIGNv
bnN0OwogCiAgICAgLy8gU2FmYXJpIFNlbGVjdGlvbiBPYmplY3QgQVBJCi0gICAgTm9kZUltcGwg
KmJhc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlLm5vZGUoKTsgfQotICAgIE5vZGVJbXBs
ICpleHRlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQubm9kZSgpOyB9Ci0gICAgaW50
IGJhc2VPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Jhc2Uub2Zmc2V0KCk7IH0KLSAgICBpbnQg
ZXh0ZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQub2Zmc2V0KCk7IH0KKyAgICBO
b2RlSW1wbCAqYmFzZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX3NlbC5iYXNlKCkubm9kZSgpOyB9
CisgICAgTm9kZUltcGwgKmV4dGVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3NlbC5leHRlbnQo
KS5ub2RlKCk7IH0KKyAgICBpbnQgYmFzZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmJh
c2UoKS5vZmZzZXQoKTsgfQorICAgIGludCBleHRlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3NlbC5leHRlbnQoKS5vZmZzZXQoKTsgfQogICAgIERPTTo6RE9NU3RyaW5nIHR5cGUoKSBjb25z
dDsKICAgICB2b2lkIHNldEJhc2VBbmRFeHRlbnQoTm9kZUltcGwgKmJhc2VOb2RlLCBpbnQgYmFz
ZU9mZnNldCwgTm9kZUltcGwgKmV4dGVudE5vZGUsIGludCBleHRlbnRPZmZzZXQpOwogICAgIHZv
aWQgc2V0UG9zaXRpb24oTm9kZUltcGwgKm5vZGUsIGludCBvZmZzZXQpOwpAQCAtMTI5LDEwICsx
MjIsMTAgQEAgcHVibGljOgogICAgIC8vIGJ1dCByZWZsZWN0IHRoZSBkaXJlY3Rpb24gaW4gd2hp
Y2ggdGhlIHNlbGVjdGlvbiB3YXMgbWFkZSBieSB0aGUgdXNlci4gIFRoYXQgZG9lcwogICAgIC8v
IG5vdCBtZWFuIHRoYXQgdGhleSBhcmUgYmFzZS9leHRlbnQsIHNpbmNlIHRoZSBiYXNlL2V4dGVu
dCBkb24ndCByZWZsZWN0CiAgICAgLy8gZXhwYW5zaW9uLgotICAgIE5vZGVJbXBsICphbmNob3JO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlSXNGaXJzdCA/IG1fc3RhcnQubm9kZSgpIDogbV9l
bmQubm9kZSgpOyB9Ci0gICAgaW50IGFuY2hvck9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFz
ZUlzRmlyc3QgPyBtX3N0YXJ0Lm9mZnNldCgpIDogbV9lbmQub2Zmc2V0KCk7IH0KLSAgICBOb2Rl
SW1wbCAqZm9jdXNOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlSXNGaXJzdCA/IG1fZW5kLm5v
ZGUoKSA6IG1fc3RhcnQubm9kZSgpOyB9Ci0gICAgaW50IGZvY3VzT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9iYXNlSXNGaXJzdCA/IG1fZW5kLm9mZnNldCgpIDogbV9zdGFydC5vZmZzZXQoKTsg
fQorICAgIE5vZGVJbXBsICphbmNob3JOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuaXNCYXNl
Rmlyc3QoKSA/IG1fc2VsLnN0YXJ0KCkubm9kZSgpIDogbV9zZWwuZW5kKCkubm9kZSgpOyB9Cisg
ICAgaW50IGFuY2hvck9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmlzQmFzZUZpcnN0KCkg
PyBtX3NlbC5zdGFydCgpLm9mZnNldCgpIDogbV9zZWwuZW5kKCkub2Zmc2V0KCk7IH0KKyAgICBO
b2RlSW1wbCAqZm9jdXNOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuaXNCYXNlRmlyc3QoKSA/
IG1fc2VsLmVuZCgpLm5vZGUoKSA6IG1fc2VsLnN0YXJ0KCkubm9kZSgpOyB9CisgICAgaW50IGZv
Y3VzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZWwuaXNCYXNlRmlyc3QoKSA/IG1fc2VsLmVu
ZCgpLm9mZnNldCgpIDogbV9zZWwuc3RhcnQoKS5vZmZzZXQoKTsgfQogICAgIGJvb2wgaXNDb2xs
YXBzZWQoKSBjb25zdCB7IHJldHVybiAhaXNSYW5nZSgpOyB9CiAgICAgRE9NOjpET01TdHJpbmcg
dG9TdHJpbmcoKSBjb25zdDsKICAgICB2b2lkIGNvbGxhcHNlKE5vZGVJbXBsICpub2RlLCBpbnQg
b2Zmc2V0KTsKQEAgLTE2MSwxMCArMTU0LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBlbnVt
IEVQb3NpdGlvblR5cGUgeyBTVEFSVCwgRU5ELCBCQVNFLCBFWFRFTlQgfTsKIAotICAgIHZvaWQg
aW5pdChFQWZmaW5pdHkgYWZmaW5pdHkpOwotICAgIHZvaWQgdmFsaWRhdGUoRVRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSA9IENIQVJBQ1RFUik7Ci0gICAgdm9pZCBhZGp1c3RGb3JFZGl0YWJs
ZUNvbnRlbnQoKTsKLQogICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlFeHRlbmRpbmdSaWdodEZv
cndhcmQoRVRleHRHcmFudWxhcml0eSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG1vZGlmeU1vdmlu
Z1JpZ2h0Rm9yd2FyZChFVGV4dEdyYW51bGFyaXR5KTsKICAgICBWaXNpYmxlUG9zaXRpb24gbW9k
aWZ5RXh0ZW5kaW5nTGVmdEJhY2t3YXJkKEVUZXh0R3JhbnVsYXJpdHkpOwpAQCAtMTc3LDEzICsx
NjYsNyBAQCBwcml2YXRlOgogCiAgICAgaW50IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bihFUG9zaXRpb25UeXBlLCBib29sIHJlY2FsYyA9IGZhbHNlKSBjb25zdDsKIAotICAgIFBvc2l0
aW9uIG1fYmFzZTsgICAgICAgICAgICAgIC8vIGJhc2UgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rp
b24KLSAgICBQb3NpdGlvbiBtX2V4dGVudDsgICAgICAgICAgICAvLyBleHRlbnQgcG9zaXRpb24g
Zm9yIHRoZSBzZWxlY3Rpb24KLSAgICBQb3NpdGlvbiBtX3N0YXJ0OyAgICAgICAgICAgICAvLyBz
dGFydCBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgotICAgIFBvc2l0aW9uIG1fZW5kOyAgICAg
ICAgICAgICAgIC8vIGVuZCBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgotCi0gICAgRVN0YXRl
IG1fc3RhdGU7ICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24KLSAg
ICBFQWZmaW5pdHkgbV9hZmZpbml0eTsgICAgICAgICAvLyB0aGUgdXBzdHJlYW0vZG93bnN0cmVh
bSBhZmZpbml0eSBvZiB0aGUgc2VsZWN0aW9uCisgICAgU2VsZWN0aW9uIG1fc2VsOwogCiAgICAg
UVJlY3QgbV9jYXJldFJlY3Q7ICAgICAgICAgICAgLy8gY2FyZXQgY29vcmRpbmF0ZXMsIHNpemUs
IGFuZCBwb3NpdGlvbgogICAgIApAQCAtMTkyLDcgKzE3NSw2IEBAIHByaXZhdGU6CiAgICAgLy8g
VGhpcyBpcyBmYXN0ZXIgdGhhbiBkb2luZyBhbm90aGVyIGxheW91dCgpLgogICAgIFFQb2ludCBt
X2NhcmV0UG9zaXRpb25PbkxheW91dDsKICAgICAKLSAgICBib29sIG1fYmFzZUlzRmlyc3QgOiAx
OyAgICAgICAvLyB0cnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRoZSBleHRlbnQKICAgICBib29sIG1f
bmVlZHNMYXlvdXQgOiAxOyAgICAgICAvLyB0cnVlIGlmIHRoZSBjYXJldCBhbmQgZXhwZWN0ZWRW
aXNpYmxlIHJlY3RhbmdsZXMgbmVlZCB0byBiZSBjYWxjdWxhdGVkCiAgICAgYm9vbCBtX21vZGlm
eUJpYXNTZXQgOiAxOyAgICAgLy8gdHJ1ZSBpZiB0aGUgc2VsZWN0aW9uIGhhcyBiZWVuIGhvcml6
b250YWxseSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2RpZmllZCB3
aXRoIEVBbHRlcjo6RVhURU5ECkBAIC0yMDAsNyArMTgyLDcgQEAgcHJpdmF0ZToKIAogaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZhLCBjb25zdCBTZWxl
Y3Rpb25Db250cm9sbGVyICZiKQogewotICAgIHJldHVybiBhLnN0YXJ0KCkgPT0gYi5zdGFydCgp
ICYmIGEuZW5kKCkgPT0gYi5lbmQoKSAmJiBhLnN0YXJ0QWZmaW5pdHkoKSA9PSBiLnN0YXJ0QWZm
aW5pdHkoKTsKKyAgICByZXR1cm4gYS5zdGFydCgpID09IGIuc3RhcnQoKSAmJiBhLmVuZCgpID09
IGIuZW5kKCkgJiYgYS5hZmZpbml0eSgpID09IGIuYWZmaW5pdHkoKTsKIH0KIAogaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZhLCBjb25zdCBTZWxlY3Rp
b25Db250cm9sbGVyICZiKQpAQCAtMjEwLDQgKzE5Miw0IEBAIGlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgU2VsZWN0aW9uQ28KIAogfSAvLyBuYW1lc3BhY2Uga2h0bWwKIAotI2VuZGlmIC8v
IEtIVE1MX0VESVRJTkdfU0VMRUNUSU9OX0gKKyNlbmRpZiAvLyBLSFRNTF9FRElUSU5HX1NFTEVD
VElPTkNPTlRST0xMRVJfSApJbmRleDoga2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1h
bmQuY3BwCShyZXZpc2lvbiAxMjA4MikKKysrIGtodG1sL2VkaXRpbmcvbW92ZV9zZWxlY3Rpb25f
Y29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBNb3ZlU2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFwb3Mubm9kZSgpLT5pbkRvY3VtZW50
KCkpCiAgICAgICAgIHBvcyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7CiAKLSAgICBzZXRF
bmRpbmdTZWxlY3Rpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpOwor
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkp
OwogICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoZG9j
dW1lbnQoKSwgbV9mcmFnbWVudC5nZXQoKSwgdHJ1ZSwgbV9zbWFydE1vdmUpKTsKICAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwogfQpJbmRleDoga2h0bWwvZWRpdGluZy9icmVha19i
bG9ja3F1b3RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvYnJlYWtf
YmxvY2txdW90ZV9jb21tYW5kLmNwcAkocmV2aXNpb24gMTIwODIpCisrKyBraHRtbC9lZGl0aW5n
L2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2
MSwxMSBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAogICAg
IC8vIERlbGV0ZSB0aGUgY3VycmVudCBzZWxlY3Rpb24uCiAgICAgUG9zaXRpb24gcG9zID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7Ci0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0aW9uLnN0YXJ0
QWZmaW5pdHkoKTsKKyAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHko
KTsKICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICBkZWxldGVTZWxlY3Rp
b24oZmFsc2UsIGZhbHNlKTsKICAgICAgICAgcG9zID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KS51cHN0cmVhbSgpOwotICAgICAgICBhZmZpbml0eSA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0
QWZmaW5pdHkoKTsKKyAgICAgICAgYWZmaW5pdHkgPSBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0
eSgpOwogICAgIH0KICAgICAKICAgICAvLyBGaW5kIHRoZSB0b3AtbW9zdCBibG9ja3F1b3RlIGZy
b20gdGhlIHN0YXJ0LgpJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxMjA4MikKKysrIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDUwICs2MCw0OCBAQCB1c2luZyBET006OlJhbmdlSW1wbDsK
IG5hbWVzcGFjZSBraHRtbCB7CiAKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRy
b2xsZXIoKQorICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQorICAgICwgbV9tb2RpZnlCaWFzU2V0
KGZhbHNlKQogewotICAgIGluaXQoRE9XTlNUUkVBTSk7CiB9CiAKIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFm
ZmluaXR5KQotICAgIDogbV9iYXNlKHBvcyksIG1fZXh0ZW50KHBvcykKKyAgICA6IG1fc2VsKHBv
cywgcG9zLCBhZmZpbml0eSkKKyAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICAsIG1fbW9k
aWZ5Qmlhc1NldChmYWxzZSkKIHsKLSAgICBpbml0KGFmZmluaXR5KTsKLSAgICB2YWxpZGF0ZSgp
OwogfQogCi1TZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFJh
bmdlSW1wbCAqciwgRUFmZmluaXR5IGJhc2VBZmZpbml0eSwgRUFmZmluaXR5IGV4dGVudEFmZmlu
aXR5KQotICAgIDogbV9iYXNlKHN0YXJ0UG9zaXRpb24ocikpLCBtX2V4dGVudChlbmRQb3NpdGlv
bihyKSkKK1NlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUmFu
Z2VJbXBsICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCisgICAgOiBtX3NlbChzdGFydFBvc2l0aW9u
KHIpLCBlbmRQb3NpdGlvbihyKSwgYWZmaW5pdHkpCisgICAgLCBtX25lZWRzTGF5b3V0KHRydWUp
CisgICAgLCBtX21vZGlmeUJpYXNTZXQoZmFsc2UpCiB7Ci0gICAgaW5pdChiYXNlQWZmaW5pdHkp
OwotICAgIHZhbGlkYXRlKCk7CiB9CiAKLVNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNv
bnRyb2xsZXIoY29uc3QgUG9zaXRpb24gJmJhc2UsIEVBZmZpbml0eSBiYXNlQWZmaW5pdHksIGNv
bnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSkKLSAgICA6IG1f
YmFzZShiYXNlKSwgbV9leHRlbnQoZXh0ZW50KQorU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0
aW9uQ29udHJvbGxlcihjb25zdCBQb3NpdGlvbiAmYmFzZSwgY29uc3QgUG9zaXRpb24gJmV4dGVu
dCwgRUFmZmluaXR5IGFmZmluaXR5KQorICAgIDogbV9zZWwoYmFzZSwgZXh0ZW50LCBhZmZpbml0
eSkKKyAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICAsIG1fbW9kaWZ5Qmlhc1NldChmYWxz
ZSkKIHsKLSAgICBpbml0KGJhc2VBZmZpbml0eSk7Ci0gICAgdmFsaWRhdGUoKTsKIH0KIAogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnZpc2libGVQb3MpCi0gICAgOiBtX2Jhc2UodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgp
KSwgbV9leHRlbnQodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpKQorICAgIDogbV9zZWwodmlz
aWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLCB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCksIHZp
c2libGVQb3MuYWZmaW5pdHkoKSkKKyAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICAsIG1f
bW9kaWZ5Qmlhc1NldChmYWxzZSkKIHsKLSAgICBpbml0KHZpc2libGVQb3MuYWZmaW5pdHkoKSk7
Ci0gICAgdmFsaWRhdGUoKTsKIH0KIAogU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29u
dHJvbGxlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlv
biAmZXh0ZW50KQotICAgIDogbV9iYXNlKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSksIG1fZXh0ZW50
KGV4dGVudC5kZWVwRXF1aXZhbGVudCgpKQorICAgIDogbV9zZWwoYmFzZS5kZWVwRXF1aXZhbGVu
dCgpLCBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSwgYmFzZS5hZmZpbml0eSgpKQorICAgICwgbV9u
ZWVkc0xheW91dCh0cnVlKQorICAgICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQogewotICAgIGlu
aXQoYmFzZS5hZmZpbml0eSgpKTsKLSAgICB2YWxpZGF0ZSgpOwogfQogCiBTZWxlY3Rpb25Db250
cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm8p
Ci0gICAgOiBtX2Jhc2Uoby5tX2Jhc2UpLCBtX2V4dGVudChvLm1fZXh0ZW50KQotICAgICwgbV9z
dGFydChvLm1fc3RhcnQpLCBtX2VuZChvLm1fZW5kKQotICAgICwgbV9zdGF0ZShvLm1fc3RhdGUp
LCBtX2FmZmluaXR5KG8ubV9hZmZpbml0eSkKLSAgICAsIG1fYmFzZUlzRmlyc3Qoby5tX2Jhc2VJ
c0ZpcnN0KQorICAgIDogbV9zZWwoby5tX3NlbCkKICAgICAsIG1fbmVlZHNMYXlvdXQoby5tX25l
ZWRzTGF5b3V0KQogICAgICwgbV9tb2RpZnlCaWFzU2V0KG8ubV9tb2RpZnlCaWFzU2V0KQogewpA
QCAtMTE4LDI3ICsxMTYsMTAgQEAgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJv
bGxlcgogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjppbml0KEVBZmZpbml0
eSBhZmZpbml0eSkKLXsKLSAgICAvLyBGSVhNRTogc2V0IGV4dGVudEFmZmluaXR5Ci0gICAgbV9z
dGF0ZSA9IE5PTkU7IAotICAgIG1fYmFzZUlzRmlyc3QgPSB0cnVlOwotICAgIG1fYWZmaW5pdHkg
PSBhZmZpbml0eTsKLSAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKLSAgICBtX21vZGlmeUJpYXNT
ZXQgPSBmYWxzZTsKLX0KLQogU2VsZWN0aW9uQ29udHJvbGxlciAmU2VsZWN0aW9uQ29udHJvbGxl
cjo6b3BlcmF0b3I9KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm8pCiB7Ci0gICAgbV9iYXNl
ID0gby5tX2Jhc2U7Ci0gICAgbV9leHRlbnQgPSBvLm1fZXh0ZW50OwotICAgIG1fc3RhcnQgPSBv
Lm1fc3RhcnQ7Ci0gICAgbV9lbmQgPSBvLm1fZW5kOwotCi0gICAgbV9zdGF0ZSA9IG8ubV9zdGF0
ZTsKLSAgICBtX2FmZmluaXR5ID0gby5tX2FmZmluaXR5OworICAgIG1fc2VsID0gby5tX3NlbDsK
IAotICAgIG1fYmFzZUlzRmlyc3QgPSBvLm1fYmFzZUlzRmlyc3Q7CiAgICAgbV9uZWVkc0xheW91
dCA9IG8ubV9uZWVkc0xheW91dDsKICAgICBtX21vZGlmeUJpYXNTZXQgPSBvLm1fbW9kaWZ5Qmlh
c1NldDsKICAgICAKQEAgLTE1Nyw1NiArMTM4LDU2IEBAIFNlbGVjdGlvbkNvbnRyb2xsZXIgJlNl
bGVjdGlvbkNvbnRyb2xsZXIKIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZwb3MpCiB7Ci0gICAgLy8gRklYTUU6IHVzZSBleHRlbnRBZmZp
bml0eQotICAgIG1fYWZmaW5pdHkgPSBwb3MuYWZmaW5pdHkoKTsKLSAgICBtX2Jhc2UgPSBwb3Mu
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBtX2V4dGVudCA9IHBvcy5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIHZhbGlkYXRlKCk7CisgICAgbV9zZWwuc2V0QWZmaW5pdHkocG9zLmFmZmluaXR5KCkpOwor
ICAgIG1fc2VsLnNldEJhc2UocG9zLmRlZXBFcXVpdmFsZW50KCkpOworICAgIG1fc2VsLnNldEV4
dGVudChwb3MuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgbV9zZWwudmFsaWRhdGUoKTsKKyAgICBt
X25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3Zl
VG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiYXNlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmV4
dGVudCkKIHsKLSAgICAvLyBGSVhNRTogdXNlIGV4dGVudEFmZmluaXR5Ci0gICAgbV9hZmZpbml0
eSA9IGJhc2UuYWZmaW5pdHkoKTsKLSAgICBtX2Jhc2UgPSBiYXNlLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgbV9leHRlbnQgPSBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICB2YWxpZGF0ZSgp
OworICAgIG1fc2VsLnNldEFmZmluaXR5KGJhc2UuYWZmaW5pdHkoKSk7CisgICAgbV9zZWwuc2V0
QmFzZShiYXNlLmRlZXBFcXVpdmFsZW50KCkpOworICAgIG1fc2VsLnNldEV4dGVudChleHRlbnQu
ZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgbV9zZWwudmFsaWRhdGUoKTsKKyAgICBtX25lZWRzTGF5
b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3Qg
U2VsZWN0aW9uQ29udHJvbGxlciAmbykKIHsKLSAgICAvLyBGSVhNRTogY29weSBleHRlbnRBZmZp
bml0eQotICAgIG1fYWZmaW5pdHkgPSBvLm1fYWZmaW5pdHk7Ci0gICAgbV9iYXNlID0gby5tX3N0
YXJ0OwotICAgIG1fZXh0ZW50ID0gby5tX2VuZDsKLSAgICB2YWxpZGF0ZSgpOworICAgIG1fc2Vs
LnNldEFmZmluaXR5KG8ubV9zZWwuYWZmaW5pdHkoKSk7CisgICAgbV9zZWwuc2V0QmFzZShvLm1f
c2VsLnN0YXJ0KCkpOworICAgIG1fc2VsLnNldEV4dGVudChvLm1fc2VsLmVuZCgpKTsKKyAgICBt
X3NlbC52YWxpZGF0ZSgpOworICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkg
YWZmaW5pdHkpCiB7Ci0gICAgLy8gRklYTUU6IHVzZSBleHRlbnRBZmZpbml0eQotICAgIG1fYWZm
aW5pdHkgPSBhZmZpbml0eTsKLSAgICBtX2Jhc2UgPSBwb3M7Ci0gICAgbV9leHRlbnQgPSBwb3M7
Ci0gICAgdmFsaWRhdGUoKTsKKyAgICBtX3NlbC5zZXRBZmZpbml0eShhZmZpbml0eSk7CisgICAg
bV9zZWwuc2V0QmFzZShwb3MpOworICAgIG1fc2VsLnNldEV4dGVudChwb3MpOworICAgIG1fc2Vs
LnZhbGlkYXRlKCk7CisgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKLXZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlSW1wbCAqciwgRUFmZmluaXR5IGJhc2VB
ZmZpbml0eSwgRUFmZmluaXR5IGV4dGVudEFmZmluaXR5KQordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjptb3ZlVG8oY29uc3QgUmFuZ2VJbXBsICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7Ci0g
ICAgLy8gRklYTUU6IHVzZSBleHRlbnRBZmZpbml0eQotICAgIG1fYWZmaW5pdHkgPSBiYXNlQWZm
aW5pdHk7Ci0gICAgbV9iYXNlID0gc3RhcnRQb3NpdGlvbihyKTsKLSAgICBtX2V4dGVudCA9IGVu
ZFBvc2l0aW9uKHIpOwotICAgIHZhbGlkYXRlKCk7CisgICAgbV9zZWwuc2V0QWZmaW5pdHkoYWZm
aW5pdHkpOworICAgIG1fc2VsLnNldEJhc2Uoc3RhcnRQb3NpdGlvbihyKSk7CisgICAgbV9zZWwu
c2V0RXh0ZW50KGVuZFBvc2l0aW9uKHIpKTsKKyAgICBtX3NlbC52YWxpZGF0ZSgpOworICAgIG1f
bmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVU
byhjb25zdCBQb3NpdGlvbiAmYmFzZSwgRUFmZmluaXR5IGJhc2VBZmZpbml0eSwgY29uc3QgUG9z
aXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGV4dGVudEFmZmluaXR5KQordm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZl
eHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKLSAgICAvLyBGSVhNRTogdXNlIGV4dGVudEFm
ZmluaXR5Ci0gICAgbV9hZmZpbml0eSA9IGJhc2VBZmZpbml0eTsKLSAgICBtX2Jhc2UgPSBiYXNl
OwotICAgIG1fZXh0ZW50ID0gZXh0ZW50OwotICAgIHZhbGlkYXRlKCk7CisgICAgbV9zZWwuc2V0
QWZmaW5pdHkoYWZmaW5pdHkpOworICAgIG1fc2VsLnNldEJhc2UoYmFzZSk7CisgICAgbV9zZWwu
c2V0RXh0ZW50KGV4dGVudCk7CisgICAgbV9zZWwudmFsaWRhdGUoKTsKKyAgICBtX25lZWRzTGF5
b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRNb2RpZnlCaWFz
KEVBbHRlciBhbHRlciwgRURpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC0yMjIsMTMgKzIwMywxMyBA
QCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldE1vZGlmeUJpYXMoCiAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiByaWdodCBmb3IgYmlkaT8KICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBSSUdIVDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGT1JXQVJEOgotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9iYXNlID0gbV9zdGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZXh0ZW50ID0gbV9lbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NlbC5zZXRCYXNlKG1f
c2VsLnN0YXJ0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWwuc2V0RXh0ZW50KG1f
c2VsLmVuZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBjYXNlIExFRlQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQkFDS1dBUkQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2Jhc2UgPSBtX2VuZDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZXh0ZW50ID0gbV9zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Vs
LnNldEJhc2UobV9zZWwuZW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWwuc2V0
RXh0ZW50KG1fc2VsLnN0YXJ0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjM4LDcgKzIxOSw3IEBAIHZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0TW9kaWZ5QmlhcygKIAogVmlzaWJsZVBvc2l0aW9uIFNl
bGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ1JpZ2h0Rm9yd2FyZChFVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5KQogewotICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9leHRlbnQs
IG1fYWZmaW5pdHkpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWwuZXh0ZW50KCksIG1f
c2VsLmFmZmluaXR5KCkpOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICAgICAgY2Fz
ZSBDSEFSQUNURVI6CiAgICAgICAgICAgICBwb3MgPSBwb3MubmV4dCgpOwpAQCAtMjUzLDEwICsy
MzQsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAg
ICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3MsIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbihFWFRFTlQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExJTkVf
Qk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1f
ZW5kLCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUoVmlzaWJsZVBv
c2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBQQVJBR1JBUEhfQk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBl
bmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKTsKKyAgICAg
ICAgICAgIHBvcyA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX3NlbC5lbmQoKSwg
bV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9D
VU1FTlRfQk9VTkRBUlk6CiAgICAgICAgICAgICBwb3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CkBA
IC0yNzIsMzIgKzI1MywzMiBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kCiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgICAgICBjYXNlIENIQVJBQ1RFUjoK
ICAgICAgICAgICAgIGlmIChpc1JhbmdlKCkpIAotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSk7CisgICAgICAgICAgICAgICAgcG9zID0gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1f
YWZmaW5pdHkpLm5leHQoKTsKKyAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24o
bV9zZWwuZXh0ZW50KCksIG1fc2VsLmFmZmluaXR5KCkpLm5leHQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFdPUkQ6Ci0gICAgICAgICAgICBwb3MgPSBuZXh0V29yZFBvc2l0
aW9uKFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAg
cG9zID0gbmV4dFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWwuZXh0ZW50KCksIG1f
c2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBUkFH
UkFQSDoKLSAgICAgICAgICAgIHBvcyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlvbihWaXNpYmxlUG9z
aXRpb24obV9lbmQsIG1fYWZmaW5pdHkpLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24o
RU5ELCBpc1JhbmdlKCkpKTsKKyAgICAgICAgICAgIHBvcyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlv
bihWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpLCB4UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb24oRU5ELCBpc1JhbmdlKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIExJTkU6IHsKICAgICAgICAgICAgIC8vIGRvd24tYXJyb3dpbmcg
ZnJvbSBhIHJhbmdlIHNlbGVjdGlvbiB0aGF0IGVuZHMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBu
ZWVkcwogICAgICAgICAgICAgLy8gdG8gbGVhdmUgdGhlIHNlbGVjdGlvbiBhdCB0aGF0IGxpbmUg
c3RhcnQgKG5vIG5lZWQgdG8gY2FsbCBuZXh0TGluZVBvc2l0aW9uISkKLSAgICAgICAgICAgIHBv
cyA9IFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSk7CisgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpOwogICAgICAg
ICAgICAgaWYgKCFpc1JhbmdlKCkgfHwgIWlzU3RhcnRPZkxpbmUocG9zKSkKICAgICAgICAgICAg
ICAgICBwb3MgPSBuZXh0TGluZVBvc2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uKEVORCwgaXNSYW5nZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIExJTkVfQk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUo
VmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBwb3MgPSBl
bmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQQVJBR1JBUEhfQk9VTkRBUlk6Ci0g
ICAgICAgICAgICBwb3MgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1f
YWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3Np
dGlvbihtX3NlbC5lbmQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRE9DVU1FTlRfQk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBlbmRP
ZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpOworICAgICAgICAg
ICAgcG9zID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWwuZW5kKCksIG1fc2Vs
LmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9z
OwpAQCAtMzA1LDcgKzI4Niw3IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVy
Ojptb2QKIAogVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVu
ZGluZ0xlZnRCYWNrd2FyZChFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewotICAgIFZp
c2libGVQb3NpdGlvbiBwb3MobV9leHRlbnQsIG1fYWZmaW5pdHkpOworICAgIFZpc2libGVQb3Np
dGlvbiBwb3MobV9zZWwuZXh0ZW50KCksIG1fc2VsLmFmZmluaXR5KCkpOwogICAgIHN3aXRjaCAo
Z3JhbnVsYXJpdHkpIHsKICAgICAgICAgY2FzZSBDSEFSQUNURVI6CiAgICAgICAgICAgICBwb3Mg
PSBwb3MucHJldmlvdXMoKTsKQEAgLTMyMCwxMCArMzAxLDEwIEBAIFZpc2libGVQb3NpdGlvbiBT
ZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzTGluZVBv
c2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTElORV9CT1VOREFSWToKLSAgICAgICAgICAg
IHBvcyA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSk7
CisgICAgICAgICAgICBwb3MgPSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zZWwuc3Rh
cnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUEFSQUdSQVBIX0JPVU5EQVJZOgotICAgICAgICAgICAgcG9zID0gc3RhcnRPZlBhcmFncmFw
aChWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgcG9z
ID0gc3RhcnRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwu
YWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9DVU1FTlRf
Qk9VTkRBUlk6CiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsKQEAgLTMz
OCwyNyArMzE5LDI3IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QK
ICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgICAgIGNhc2UgQ0hBUkFDVEVSOgogICAg
ICAgICAgICAgaWYgKGlzUmFuZ2UoKSkgCi0gICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBv
c2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpOworICAgICAgICAgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1f
YWZmaW5pdHkpLnByZXZpb3VzKCk7CisgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0
aW9uKG1fc2VsLmV4dGVudCgpLCBtX3NlbC5hZmZpbml0eSgpKS5wcmV2aW91cygpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV09SRDoKLSAgICAgICAgICAgIHBvcyA9IHByZXZp
b3VzV29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSkpOwor
ICAgICAgICAgICAgcG9zID0gcHJldmlvdXNXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1f
c2VsLmV4dGVudCgpLCBtX3NlbC5hZmZpbml0eSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBQQVJBR1JBUEg6Ci0gICAgICAgICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFw
aFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSwgeFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKFNUQVJULCBpc1JhbmdlKCkpKTsKKyAgICAgICAgICAgIHBv
cyA9IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0
KCksIG1fc2VsLmFmZmluaXR5KCkpLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oU1RB
UlQsIGlzUmFuZ2UoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTElORToK
LSAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzTGluZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbiht
X3N0YXJ0LCBtX2FmZmluaXR5KSwgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKFNUQVJU
LCBpc1JhbmdlKCkpKTsKKyAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzTGluZVBvc2l0aW9uKFZp
c2libGVQb3NpdGlvbihtX3NlbC5zdGFydCgpLCBtX3NlbC5hZmZpbml0eSgpKSwgeFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKFNUQVJULCBpc1JhbmdlKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIExJTkVfQk9VTkRBUlk6Ci0gICAgICAgICAgICBwb3MgPSBzdGFy
dE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpOworICAgICAgICAg
ICAgcG9zID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2Vs
LmFmZmluaXR5KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBUkFHUkFQ
SF9CT1VOREFSWToKLSAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBv
c2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZQ
YXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERPQ1VNRU5UX0JPVU5EQVJZOgot
ICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX3N0YXJ0
LCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQoVmlzaWJs
ZVBvc2l0aW9uKG1fc2VsLnN0YXJ0KCksIG1fc2VsLmFmZmluaXR5KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwpAQCAtNDczLDIwICs0NTQsMjAgQEAgYm9v
bCBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkoRUFsdGVyIAogICAgIGlmICh1cCkKICAgICAg
ICAgdmVydGljYWxEaXN0YW5jZSA9IC12ZXJ0aWNhbERpc3RhbmNlOwogCi0gICAgLy8gY2FuIGR1
bXAgdGhpcyBVUFNUUkVBTSB3aGVuIHdlIGhhdmUgbV9leHRlbnRBZmZpbml0eQotICAgIG1fYWZm
aW5pdHkgPSBVUFNUUkVBTTsKICAgICBzZXRNb2RpZnlCaWFzKGFsdGVyLCB1cCA/IEJBQ0tXQVJE
IDogRk9SV0FSRCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zOwogICAgIGludCB4UG9zID0g
MDsKICAgICBzd2l0Y2ggKGFsdGVyKSB7CiAgICAgICAgIGNhc2UgTU9WRToKLSAgICAgICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbih1cCA/IG1fc3RhcnQgOiBtX2VuZCwgbV9hZmZpbml0eSk7
CisgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24odXAgPyBtX3NlbC5zdGFydCgpIDog
bV9zZWwuZW5kKCksIG1fc2VsLmFmZmluaXR5KCkpOwogICAgICAgICAgICAgeFBvcyA9IHhQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih1cCA/IFNUQVJUIDogRU5ELCBpc1JhbmdlKCkpOwor
ICAgICAgICAgICAgbV9zZWwuc2V0QWZmaW5pdHkodXAgPyBVUFNUUkVBTSA6IERPV05TVFJFQU0p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRVhURU5EOgotICAgICAgICAgICAg
cG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAg
IHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbC5leHRlbnQoKSwgbV9zZWwuYWZmaW5pdHkoKSk7
CiAgICAgICAgICAgICB4UG9zID0geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVO
VCk7CisgICAgICAgICAgICBtX3NlbC5zZXRBZmZpbml0eShET1dOU1RSRUFNKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTM2LDcgKzUxNyw4IEBAIGJvb2wgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6ZXhwYW5kVXNpbmdHcmEKICAgICBpZiAoaXNOb25lKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICB2YWxpZGF0ZShncmFudWxhcml0eSk7CisgICAgbV9zZWwudmFs
aWRhdGUoZ3JhbnVsYXJpdHkpOworICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC01NTAsMTYgKzUzMiwxNiBAQCBpbnQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6eFBvc0ZvclZlcnRpY2FsCiAgICAgUG9zaXRpb24gcG9zOwogICAgIHN3aXRjaCAodHlwZSkg
ewogICAgICAgICBjYXNlIFNUQVJUOgotICAgICAgICAgICAgcG9zID0gbV9zdGFydDsKKyAgICAg
ICAgICAgIHBvcyA9IG1fc2VsLnN0YXJ0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBFTkQ6Ci0gICAgICAgICAgICBwb3MgPSBtX2VuZDsKKyAgICAgICAgICAgIHBvcyA9IG1f
c2VsLmVuZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQkFTRToKLSAgICAg
ICAgICAgIHBvcyA9IG1fYmFzZTsKKyAgICAgICAgICAgIHBvcyA9IG1fc2VsLmJhc2UoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVYVEVOVDoKLSAgICAgICAgICAgIHBvcyA9
IG1fZXh0ZW50OworICAgICAgICAgICAgcG9zID0gbV9zZWwuZXh0ZW50KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTU2OCw4ICs1NTAsOCBAQCBpbnQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6eFBvc0ZvclZlcnRpY2FsCiAgICAgICAgIHJldHVybiB4OwogICAgICAgICAKICAgICBp
ZiAocmVjYWxjIHx8IGZyYW1lLT54UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSA9PSBG
cmFtZTo6Tm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pIHsKLSAgICAgICAgcG9zID0g
VmlzaWJsZVBvc2l0aW9uKHBvcywgbV9hZmZpbml0eSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAg
ICAgeCA9IHBvcy5ub2RlKCktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChwb3Mub2Zmc2V0KCksIG1f
YWZmaW5pdHkpLngoKTsKKyAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgbV9zZWwu
YWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgeCA9IHBvcy5ub2RlKCktPnJl
bmRlcmVyKCktPmNhcmV0UmVjdChwb3Mub2Zmc2V0KCksIG1fc2VsLmFmZmluaXR5KCkpLngoKTsK
ICAgICAgICAgZnJhbWUtPnNldFhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih4KTsKICAg
ICB9CiAgICAgZWxzZSB7CkBAIC01ODAsMzkgKzU2Miw0MSBAQCBpbnQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6eFBvc0ZvclZlcnRpY2FsCiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXIo
KQogewotICAgIG1fYWZmaW5pdHkgPSBTRUxfREVGQVVMVF9BRkZJTklUWTsKLSAgICBtX2Jhc2Uu
Y2xlYXIoKTsKLSAgICBtX2V4dGVudC5jbGVhcigpOwotICAgIHZhbGlkYXRlKCk7CisgICAgbV9z
ZWwuY2xlYXIoKTsKKyAgICBtX3NlbC52YWxpZGF0ZSgpOworICAgIG1fbmVlZHNMYXlvdXQgPSB0
cnVlOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZwb3MpCiB7Ci0gICAgbV9hZmZpbml0eSA9IHBvcy5hZmZpbml0eSgpOwotICAg
IG1fYmFzZSA9IHBvcy5kZWVwRXF1aXZhbGVudCgpOwotICAgIHZhbGlkYXRlKCk7CisgICAgbV9z
ZWwuc2V0QWZmaW5pdHkocG9zLmFmZmluaXR5KCkpOworICAgIG1fc2VsLnNldEJhc2UocG9zLmRl
ZXBFcXVpdmFsZW50KCkpOworICAgIG1fc2VsLnZhbGlkYXRlKCk7CisgICAgbV9uZWVkc0xheW91
dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmcG9zKQogewotICAgIC8vIEZJWE1FOiBTdXBwb3J0IGV4dGVudEFm
ZmluaXR5Ci0gICAgbV9leHRlbnQgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICB2YWxpZGF0
ZSgpOworICAgIG1fc2VsLnNldEFmZmluaXR5KHBvcy5hZmZpbml0eSgpKTsKKyAgICBtX3NlbC5z
ZXRFeHRlbnQocG9zLmRlZXBFcXVpdmFsZW50KCkpOworICAgIG1fc2VsLnZhbGlkYXRlKCk7Cisg
ICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKLXZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0QmFzZShjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYmFzZUFmZmluaXR5KQordm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZp
bml0eSBhZmZpbml0eSkKIHsKLSAgICBtX2FmZmluaXR5ID0gYmFzZUFmZmluaXR5OwotICAgIG1f
YmFzZSA9IHBvczsKLSAgICB2YWxpZGF0ZSgpOworICAgIG1fc2VsLnNldEFmZmluaXR5KGFmZmlu
aXR5KTsKKyAgICBtX3NlbC5zZXRCYXNlKHBvcyk7CisgICAgbV9zZWwudmFsaWRhdGUoKTsKKyAg
ICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpz
ZXRFeHRlbnQoY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGV4dGVudEFmZmluaXR5KQor
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24gJnBvcywg
RUFmZmluaXR5IGFmZmluaXR5KQogewotICAgIC8vIEZJWE1FOiBTdXBwb3J0IGV4dGVudEFmZmlu
aXR5IGZvciByZWFsCi0gICAgbV9hZmZpbml0eSA9IGV4dGVudEFmZmluaXR5OwotICAgIG1fZXh0
ZW50ID0gcG9zOwotICAgIHZhbGlkYXRlKCk7CisgICAgbV9zZWwuc2V0QWZmaW5pdHkoYWZmaW5p
dHkpOworICAgIG1fc2VsLnNldEV4dGVudChwb3MpOworICAgIG1fc2VsLnZhbGlkYXRlKCk7Cisg
ICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
c2V0TmVlZHNMYXlvdXQoYm9vbCBmbGFnKQpAQCAtNjIwLDY2ICs2MDQsNiBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnNldE5lZWRzTGF5b3V0CiAgICAgbV9uZWVkc0xheW91dCA9IGZsYWc7
CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb25Db250cm9sbGVyOjp0b1Jhbmdl
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNOb25lKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gdXBkYXRlZCBsYXlvdXQgc2luY2UgdGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQKLSAgICAvLyBpbiB0aGUgY291cnNlIG9mIHJ1bm5pbmcgZWRpdCBjb21tYW5k
cyB3aGljaCBtb2RpZnkgdGhlIERPTS4KLSAgICAvLyBGYWlsaW5nIHRvIGNhbGwgdGhpcyBjYW4g
cmVzdWx0IGluIGVxdWl2YWxlbnRYWFhQb3NpdGlvbiBjYWxscyByZXR1cm5pbmcKLSAgICAvLyBp
bmNvcnJlY3QgcmVzdWx0cy4KLSAgICBtX3N0YXJ0Lm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0KCk7Ci0KLSAgICBQb3NpdGlvbiBzLCBlOwotICAgIGlmIChpc0NhcmV0KCkpIHsK
LSAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0LCBtb3ZlIHRoZSByYW5nZSBz
dGFydCB1cHN0cmVhbS4gVGhpcyBoZWxwcyB1cyBtYXRjaAotICAgICAgICAvLyB0aGUgY29udmVu
dGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3RlZCwgd2hpY2ggbWFrZSBzdHlsZSBkZXRlcm1pbmF0
aW9ucyBiYXNlZAotICAgICAgICAvLyBvbiB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2FyZXQs
IGlmIGFueS4gCi0gICAgICAgIHMgPSBtX3N0YXJ0LnVwc3RyZWFtKCkuZXF1aXZhbGVudFJhbmdl
Q29tcGxpYW50UG9zaXRpb24oKTsKLSAgICAgICAgZSA9IHM7Ci0gICAgfQotICAgIGVsc2Ugewot
ICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgcmFuZ2UsIHNlbGVjdCB0aGUgbWluaW11
bSByYW5nZSB0aGF0IGVuY29tcGFzc2VzIHRoZSBzZWxlY3Rpb24uCi0gICAgICAgIC8vIEFnYWlu
LCB0aGlzIGlzIHRvIG1hdGNoIHRoZSBjb252ZW50aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVk
LCB3aGljaCBtYWtlIHN0eWxlIAotICAgICAgICAvLyBkZXRlcm1pbmF0aW9ucyBiYXNlZCBvbiB0
aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWxlY3Rpb24uIAotICAgICAgICAvLyBGb3IgaW5z
dGFuY2UsIHRoaXMgb3BlcmF0aW9uIGhlbHBzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAiWCIgc2Vs
ZWN0ZWQgYmVsb3cgaXMgdGhlIAotICAgICAgICAvLyBvbmx5IHRoaW5nIHNlbGVjdGVkLiBUaGUg
cmFuZ2Ugc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvICJsZWFrIiBvdXQgdG8gdGhlIGVuZCBvZiB0
aGUgCi0gICAgICAgIC8vIHByZXZpb3VzIHRleHQgbm9kZSwgb3IgdG8gdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbmV4dCB0ZXh0IG5vZGUsIGVhY2ggb2Ygd2hpY2ggaGFzIGEgCi0gICAgICAgIC8vIGRp
ZmZlcmVudCBzdHlsZS4KLSAgICAgICAgLy8gCi0gICAgICAgIC8vIE9uIGEgdHJlYXN1cmUgbWFw
LCA8Yj5YPC9iPiBtYXJrcyB0aGUgc3BvdC4KLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgIF4gc2VsZWN0ZWQKLSAgICAgICAgLy8KLSAgICAgICAgQVNTRVJUKGlzUmFuZ2UoKSk7Ci0g
ICAgICAgIHMgPSBtX3N0YXJ0LmRvd25zdHJlYW0oKTsKLSAgICAgICAgZSA9IG1fZW5kLnVwc3Ry
ZWFtKCk7Ci0gICAgICAgIGlmIChSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzLm5v
ZGUoKSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0KCkpID4gMCkgewotICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KLSAgICAgICAgICAg
IC8vIFRoZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBpZiBjb2xsYXBzZWQgd2hp
dGVzcGFjZSBpcyB0aGUgb25seSB0aGluZyBzZWxlY3RlZC4KLSAgICAgICAgICAgIFBvc2l0aW9u
IHRtcCA9IHM7Ci0gICAgICAgICAgICBzID0gZTsKLSAgICAgICAgICAgIGUgPSB0bXA7Ci0gICAg
ICAgIH0KLSAgICAgICAgcyA9IHMuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsK
LSAgICAgICAgZSA9IGUuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKLSAgICB9
Ci0KLSAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZUltcGw+
IHJlc3VsdChuZXcgUmFuZ2VJbXBsKHMubm9kZSgpLT5nZXREb2N1bWVudCgpKSk7Ci0gICAgcmVz
dWx0LT5zZXRTdGFydChzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZXhjZXB0aW9uQ29kZSk7Ci0gICAg
aWYgKGV4Y2VwdGlvbkNvZGUpIHsKLSAgICAgICAgRVJST1IoIkV4Y2VwdGlvbiBzZXR0aW5nIFJh
bmdlIHN0YXJ0IGZyb20gU2VsZWN0aW9uQ29udHJvbGxlcjogJWQiLCBleGNlcHRpb25Db2RlKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0RW5kKGUubm9kZSgpLCBl
Lm9mZnNldCgpLCBleGNlcHRpb25Db2RlKTsKLSAgICBpZiAoZXhjZXB0aW9uQ29kZSkgewotICAg
ICAgICBFUlJPUigiRXhjZXB0aW9uIHNldHRpbmcgUmFuZ2UgZW5kIGZyb20gU2VsZWN0aW9uQ29u
dHJvbGxlcjogJWQiLCBleGNlcHRpb25Db2RlKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIERPTVN0cmluZyBTZWxlY3Rpb25Db250cm9sbGVyOjp0
eXBlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOb25lKCkpCkBAIC02OTIsMTcgKzYxNiwxNyBAQCBE
T01TdHJpbmcgU2VsZWN0aW9uQ29udHJvbGxlcjo6dHlwZSgpIGNvCiAKIERPTVN0cmluZyBTZWxl
Y3Rpb25Db250cm9sbGVyOjp0b1N0cmluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIERPTVN0cmlu
ZyhwbGFpblRleHQodG9SYW5nZSgpLmdldCgpKSk7CisgICAgcmV0dXJuIERPTVN0cmluZyhwbGFp
blRleHQobV9zZWwudG9SYW5nZSgpLmdldCgpKSk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2VJbXBs
PiBTZWxlY3Rpb25Db250cm9sbGVyOjpnZXRSYW5nZUF0KGludCBpbmRleCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaW5kZXggPT0gMCA/IHRvUmFuZ2UoKSA6IDA7CisgICAgcmV0dXJuIGluZGV4ID09
IDAgPyBtX3NlbC50b1JhbmdlKCkgOiAwOwogfQogCiBGcmFtZSAqU2VsZWN0aW9uQ29udHJvbGxl
cjo6ZnJhbWUoKSBjb25zdAogewotICAgIHJldHVybiAhaXNOb25lKCkgPyBtX3N0YXJ0Lm5vZGUo
KS0+Z2V0RG9jdW1lbnQoKS0+ZnJhbWUoKSA6IDA7CisgICAgcmV0dXJuICFpc05vbmUoKSA/IG1f
c2VsLnN0YXJ0KCkubm9kZSgpLT5nZXREb2N1bWVudCgpLT5mcmFtZSgpIDogMDsKIH0KIAogdm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRCYXNlQW5kRXh0ZW50KE5vZGVJbXBsICpiYXNlTm9k
ZSwgaW50IGJhc2VPZmZzZXQsIE5vZGVJbXBsICpleHRlbnROb2RlLCBpbnQgZXh0ZW50T2Zmc2V0
KQpAQCAtNzI1LDEyICs2NDksMTIgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjb2xsYXBz
ZShOb2RlSQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvbGxhcHNlVG9FbmQoKQogewot
ICAgIG1vdmVUbyhWaXNpYmxlUG9zaXRpb24obV9lbmQsIERPV05TVFJFQU0pKTsKKyAgICBtb3Zl
VG8oVmlzaWJsZVBvc2l0aW9uKG1fc2VsLmVuZCgpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Y29sbGFwc2VUb1N0YXJ0KCkKIHsKLSAgICBtb3ZlVG8oVmlz
aWJsZVBvc2l0aW9uKG1fc3RhcnQsIERPV05TVFJFQU0pKTsKKyAgICBtb3ZlVG8oVmlzaWJsZVBv
c2l0aW9uKG1fc2VsLnN0YXJ0KCksIERPV05TVFJFQU0pKTsKIH0KIAogdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjplbXB0eSgpCkBAIC03NDUsMjMgKzY2OSwyMyBAQCB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OmV4dGVuZChOb2RlSW1wCiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bGF5
b3V0KCkKIHsKLSAgICBpZiAoaXNOb25lKCkgfHwgIW1fc3RhcnQubm9kZSgpLT5pbkRvY3VtZW50
KCkgfHwgIW1fZW5kLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CisgICAgaWYgKGlzTm9uZSgpIHx8
ICFtX3NlbC5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpIHx8ICFtX3NlbC5lbmQoKS5ub2Rl
KCktPmluRG9jdW1lbnQoKSkgewogICAgICAgICBtX2NhcmV0UmVjdCA9IFFSZWN0KCk7CiAgICAg
ICAgIG1fY2FyZXRQb3NpdGlvbk9uTGF5b3V0ID0gUVBvaW50KCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX3N0YXJ0Lm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVy
aW5nKCk7CisgICAgbV9zZWwuc3RhcnQoKS5ub2RlKCktPmdldERvY3VtZW50KCktPnVwZGF0ZVJl
bmRlcmluZygpOwogICAgIAogICAgIG1fY2FyZXRSZWN0ID0gUVJlY3QoKTsKICAgICBtX2NhcmV0
UG9zaXRpb25PbkxheW91dCA9IFFQb2ludCgpOwogICAgICAgICAKICAgICBpZiAoaXNDYXJldCgp
KSB7Ci0gICAgICAgIFBvc2l0aW9uIHBvcyA9IG1fc3RhcnQ7Ci0gICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOworICAgICAg
ICBQb3NpdGlvbiBwb3MgPSBtX3NlbC5zdGFydCgpOworICAgICAgICBwb3MgPSBWaXNpYmxlUG9z
aXRpb24obV9zZWwuc3RhcnQoKSwgbV9zZWwuYWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsK
ICAgICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSkgewogICAgICAgICAgICAgQVNTRVJUKHBvcy5u
b2RlKCktPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgbV9jYXJldFJlY3QgPSBwb3Mubm9kZSgp
LT5yZW5kZXJlcigpLT5jYXJldFJlY3QocG9zLm9mZnNldCgpLCBtX2FmZmluaXR5KTsKKyAgICAg
ICAgICAgIG1fY2FyZXRSZWN0ID0gcG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBv
cy5vZmZzZXQoKSwgbV9zZWwuYWZmaW5pdHkoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGludCB4LCB5OwogICAgICAgICAgICAgcG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQ
b3NpdGlvbih4LCB5KTsKQEAgLTc4MCw5ICs3MDQsOSBAQCBRUmVjdCBTZWxlY3Rpb25Db250cm9s
bGVyOjpjYXJldFJlY3QoKSBjCiAgICAgCiAgICAgUVJlY3QgY2FyZXQgPSBtX2NhcmV0UmVjdDsK
ICAgICAKLSAgICBpZiAobV9zdGFydC5ub2RlKCkgJiYgbV9zdGFydC5ub2RlKCktPnJlbmRlcmVy
KCkpIHsKKyAgICBpZiAobV9zZWwuc3RhcnQoKS5ub2RlKCkgJiYgbV9zZWwuc3RhcnQoKS5ub2Rl
KCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaW50IHgsIHk7Ci0gICAgICAgIG1fc3RhcnQubm9k
ZSgpLT5yZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOworICAgICAgICBtX3NlbC5z
dGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKICAgICAg
ICAgUVBvaW50IGRpZmYgPSBRUG9pbnQoeCwgeSkgLSBtX2NhcmV0UG9zaXRpb25PbkxheW91dDsK
ICAgICAgICAgY2FyZXQubW92ZVRvcExlZnQoZGlmZik7CiAgICAgfQpAQCAtODA0LDEwICs3Mjgs
MTAgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpuZWVkc0NhcmV0UmVwYQogICAgIGlmICgh
aXNDYXJldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc3RhcnQubm9kZSgpLT5n
ZXREb2N1bWVudCgpKQorICAgIGlmICghbV9zZWwuc3RhcnQoKS5ub2RlKCktPmdldERvY3VtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEtIVE1MVmlldyAqdiA9IG1fc3RhcnQubm9kZSgp
LT5nZXREb2N1bWVudCgpLT52aWV3KCk7CisgICAgS0hUTUxWaWV3ICp2ID0gbV9zZWwuc3RhcnQo
KS5ub2RlKCktPmdldERvY3VtZW50KCktPnZpZXcoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtODM0LDcgKzc1OCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bmVl
ZHNDYXJldFJlcGEKIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpwYWludENhcmV0KFFQYWlu
dGVyICpwLCBjb25zdCBRUmVjdCAmcmVjdCkKIHsKLSAgICBpZiAobV9zdGF0ZSAhPSBDQVJFVCkK
KyAgICBpZiAoISBtX3NlbC5pc0NhcmV0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
X25lZWRzTGF5b3V0KQpAQCAtODQ2LDIwMSArNzcwLDYgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpwYWludENhcmV0KFFQYQogICAgICAgICBwLT5maWxsUmVjdChjYXJldCAmIHJlY3QsIFFC
cnVzaCgpKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjphZGp1c3RGb3JFZGl0YWJs
ZUNvbnRlbnQoKQotewotICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIE5vZGVJbXBsICpiYXNlUm9vdCA9IG1fYmFzZS5ub2RlKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKLSAgICBOb2RlSW1wbCAqc3RhcnRSb290ID0gbV9zdGFydC5ub2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBOb2RlSW1wbCAqZW5kUm9vdCA9IG1fZW5kLm5vZGUoKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIAotICAgIC8vIFRoZSBiYXNlLCBzdGFydCBhbmQg
ZW5kIGFyZSBhbGwgaW4gdGhlIHNhbWUgcmVnaW9uLiAgTm8gYWRqdXN0bWVudCBuZWNlc3Nhcnku
Ci0gICAgaWYgKGJhc2VSb290ID09IHN0YXJ0Um9vdCAmJiBiYXNlUm9vdCA9PSBlbmRSb290KQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBpcyBiYXNlZCBpbiBh
biBlZGl0YWJsZSBhcmVhLiAgS2VlcCBib3RoIHNpZGVzIGZyb20gcmVhY2hpbmcgb3V0c2lkZSB0
aGF0IGFyZWEuCi0gICAgaWYgKGJhc2VSb290KSB7Ci0gICAgICAgIC8vIElmIHRoZSBzdGFydCBp
cyBvdXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUgcm9vdCwgY2FwIGl0IGF0IHRoZSBzdGFydCBv
ZiB0aGF0IGVkaXRhYmxlIHJvb3QuCi0gICAgICAgIGlmIChiYXNlUm9vdCAhPSBzdGFydFJvb3Qp
IHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdChQb3NpdGlvbihiYXNlUm9vdCwg
MCkpOwotICAgICAgICAgICAgbV9zdGFydCA9IGZpcnN0LmRlZXBFcXVpdmFsZW50KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gSWYgdGhlIGVuZCBpcyBvdXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFi
bGUgcm9vdCwgY2FwIGl0IGF0IHRoZSBlbmQgb2YgdGhhdCBlZGl0YWJsZSByb290LgotICAgICAg
ICBpZiAoYmFzZVJvb3QgIT0gZW5kUm9vdCkgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGxhc3QoUG9zaXRpb24oYmFzZVJvb3QsIG1heERlZXBPZmZzZXQoYmFzZVJvb3QpKSk7Ci0gICAg
ICAgICAgICBtX2VuZCA9IGxhc3QuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgfQotICAgIC8v
IFRoZSBzZWxlY3Rpb24gaXMgYmFzZWQgb3V0c2lkZSBlZGl0YWJsZSBjb250ZW50LiAgS2VlcCBi
b3RoIHNpZGVzIGZyb20gcmVhY2hpbmcgaW50byBlZGl0YWJsZSBjb250ZW50LgotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIFRoZSBzZWxlY3Rpb24gZW5kcyBpbiBlZGl0YWJsZSBjb250ZW50LCBt
b3ZlIGJhY2t3YXJkIHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50IGlzIHJlYWNoZWQuCi0gICAg
ICAgIGlmIChlbmRSb290KSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXM7
Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgcHJldmlvdXMgPSBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24oZW5kUm9vdCwgMCkpLnByZXZpb3VzKCk7Ci0gICAgICAgICAgICAgICAg
ZW5kUm9vdCA9IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChlbmRSb290KTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQVNTRVJUKCFwcmV2aW91cy5pc051bGwoKSk7Ci0gICAgICAgICAgICBtX2Vu
ZCA9IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhl
IHNlbGVjdGlvbiBzdGFydHMgaW4gZWRpdGFibGUgY29udGVudCwgbW92ZSBmb3J3YXJkIHVudGls
IG5vbi1lZGl0YWJsZSBjb250ZW50IGlzIHJlYWNoZWQuCi0gICAgICAgIGlmIChzdGFydFJvb3Qp
IHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0OwotICAgICAgICAgICAgZG8gewot
ICAgICAgICAgICAgICAgIG5leHQgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oc3RhcnRSb290
LCBtYXhEZWVwT2Zmc2V0KHN0YXJ0Um9vdCkpKS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgc3Rh
cnRSb290ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwotICAgICAgICAgICAgfSB3aGlsZSAoc3RhcnRSb290KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKCFuZXh0LmlzTnVsbCgpKTsKLSAgICAgICAgICAgIG1fc3RhcnQgPSBu
ZXh0LmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQ29y
cmVjdCB0aGUgZXh0ZW50IGlmIG5lY2Vzc2FyeS4KLSAgICBpZiAoYmFzZVJvb3QgIT0gbV9leHRl
bnQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCi0gICAgICAgIG1fZXh0ZW50ID0gbV9i
YXNlSXNGaXJzdCA/IG1fZW5kIDogbV9zdGFydDsKLX0KLQotdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjp2YWxpZGF0ZShFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIC8vIE1v
dmUgdGhlIHNlbGVjdGlvbiB0byByZW5kZXJlZCBwb3NpdGlvbnMsIGlmIHBvc3NpYmxlLgotICAg
IFBvc2l0aW9uIG9yaWdpbmFsQmFzZShtX2Jhc2UpOwotICAgIGJvb2wgYmFzZUFuZEV4dGVudEVx
dWFsID0gbV9iYXNlID09IG1fZXh0ZW50OwotICAgIGlmIChtX2Jhc2UuaXNOb3ROdWxsKCkpIHsK
LSAgICAgICAgbV9iYXNlID0gVmlzaWJsZVBvc2l0aW9uKG1fYmFzZSwgbV9hZmZpbml0eSkuZGVl
cEVxdWl2YWxlbnQoKTsKLSAgICAgICAgaWYgKGJhc2VBbmRFeHRlbnRFcXVhbCkKLSAgICAgICAg
ICAgIG1fZXh0ZW50ID0gbV9iYXNlOwotICAgIH0KLSAgICBpZiAobV9leHRlbnQuaXNOb3ROdWxs
KCkgJiYgIWJhc2VBbmRFeHRlbnRFcXVhbCkgewotICAgICAgICBtX2V4dGVudCA9IFZpc2libGVQ
b3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICB9Ci0K
LSAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IGhhdmUgYSBkYW5nbGluZyBzdGFydCBvciBlbmQK
LSAgICBpZiAobV9iYXNlLmlzTnVsbCgpICYmIG1fZXh0ZW50LmlzTnVsbCgpKSB7Ci0gICAgICAg
IC8vIE1vdmUgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50IG9m
IHRoZSBvcmlnaW5hbCBiYXNlLCBpZiBwb3NzaWJsZS4KLSAgICAgICAgLy8gVGhpcyBoYXMgdGhl
IGVmZmVjdCBvZiBmbGFzaGluZyB0aGUgY2FyZXQgc29tZXdoZXJlIHdoZW4gYSByZW5kZXJlZCBw
b3NpdGlvbiBmb3IKLSAgICAgICAgLy8gdGhlIGJhc2UgYW5kIGV4dGVudCBjYW5ub3QgYmUgZm91
bmQuCi0gICAgICAgIGlmIChvcmlnaW5hbEJhc2UuaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgICAg
IFBvc2l0aW9uIHBvcyhvcmlnaW5hbEJhc2Uubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCksIDApOwotICAgICAgICAgICAgbV9iYXNlID0gcG9zOwotICAgICAgICAgICAgbV9leHRl
bnQgPSBwb3M7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBo
YXZlIG5vIHBvc2l0aW9uIHRvIHdvcmsgd2l0aC4gU2VlIGlmIHRoZSBCT0RZIGVsZW1lbnQgb2Yg
dGhlIHBhZ2UKLSAgICAgICAgICAgIC8vIGlzIGNvbnRlbnRFZGl0YWJsZS4gSWYgaXQgaXMsIHB1
dCB0aGUgY2FyZXQgdGhlcmUuCi0gICAgICAgICAgICAvL05vZGVJbXBsICpub2RlID0gZG9jdW1l
bnQoKQotICAgICAgICAgICAgbV9zdGFydC5jbGVhcigpOwotICAgICAgICAgICAgbV9lbmQuY2xl
YXIoKTsKLSAgICAgICAgfQotICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKLSAgICB9IGVs
c2UgaWYgKG1fYmFzZS5pc051bGwoKSkgewotICAgICAgICBtX2Jhc2UgPSBtX2V4dGVudDsKLSAg
ICAgICAgbV9iYXNlSXNGaXJzdCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChtX2V4dGVudC5pc051
bGwoKSkgewotICAgICAgICBtX2V4dGVudCA9IG1fYmFzZTsKLSAgICAgICAgbV9iYXNlSXNGaXJz
dCA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9iYXNlSXNGaXJzdCA9IFJhbmdlSW1w
bDo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fYmFzZS5ub2RlKCksIG1fYmFzZS5vZmZzZXQoKSwg
bV9leHRlbnQubm9kZSgpLCBtX2V4dGVudC5vZmZzZXQoKSkgPD0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAobV9iYXNlSXNGaXJzdCkgewotICAgICAgICBtX3N0YXJ0ID0gbV9iYXNlOwotICAgICAgICBt
X2VuZCA9IG1fZXh0ZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3RhcnQgPSBtX2V4dGVu
dDsKLSAgICAgICAgbV9lbmQgPSBtX2Jhc2U7Ci0gICAgfQotICAgIAotICAgIC8vIEV4cGFuZCB0
aGUgc2VsZWN0aW9uIGlmIHJlcXVlc3RlZC4KLSAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0g
ICAgICAgIGNhc2UgQ0hBUkFDVEVSOgotICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYW55IGV4cGFu
c2lvbi4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdPUkQ6IHsKLSAgICAgICAg
ICAgIC8vIEdlbmVyYWwgY2FzZTogU2VsZWN0IHRoZSB3b3JkIHRoZSBjYXJldCBpcyBwb3NpdGlv
bmVkIGluc2lkZSBvZiwgb3IgYXQgdGhlIHN0YXJ0IG9mIChSaWdodFdvcmRJZk9uQm91bmRhcnkp
LgotICAgICAgICAgICAgLy8gRWRnZSBjYXNlOiBJZiB0aGUgY2FyZXQgaXMgYWZ0ZXIgdGhlIGxh
c3Qgd29yZCBpbiBhIHNvZnQtd3JhcHBlZCBsaW5lIG9yIHRoZSBsYXN0IHdvcmQgaW4KLSAgICAg
ICAgICAgIC8vIHRoZSBkb2N1bWVudCwgc2VsZWN0IHRoYXQgbGFzdCB3b3JkIChMZWZ0V29yZElm
T25Cb3VuZGFyeSkuCi0gICAgICAgICAgICAvLyBFZGdlIGNhc2U6IElmIHRoZSBjYXJldCBpcyBh
ZnRlciB0aGUgbGFzdCB3b3JkIGluIGEgcGFyYWdyYXBoLCBzZWxlY3QgZnJvbSB0aGUgdGhlIGVu
ZCBvZiB0aGUKLSAgICAgICAgICAgIC8vIGxhc3Qgd29yZCB0byB0aGUgbGluZSBicmVhayAoYWxz
byBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpOwotICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZCAgID0gVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5
KTsKLSAgICAgICAgICAgIEVXb3JkU2lkZSBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5Owot
ICAgICAgICAgICAgaWYgKGlzRW5kT2ZEb2N1bWVudChzdGFydCkgfHwgKGlzRW5kT2ZMaW5lKHN0
YXJ0KSAmJiAhaXNTdGFydE9mTGluZShzdGFydCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoc3RhcnQp
KSkKLSAgICAgICAgICAgICAgICBzaWRlID0gTGVmdFdvcmRJZk9uQm91bmRhcnk7Ci0gICAgICAg
ICAgICBtX3N0YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQsIHNpZGUpLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgICAgICAgICBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OwotICAgICAgICAgICAg
aWYgKGlzRW5kT2ZEb2N1bWVudChlbmQpIHx8IChpc0VuZE9mTGluZShlbmQpICYmICFpc1N0YXJ0
T2ZMaW5lKGVuZCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kKSkpCi0gICAgICAgICAgICAgICAg
c2lkZSA9IExlZnRXb3JkSWZPbkJvdW5kYXJ5OwotICAgICAgICAgICAgbV9lbmQgPSBlbmRPZldv
cmQoZW5kLCBzaWRlKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSBMSU5FOiB7Ci0gICAgICAgICAg
ICBtX3N0YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5p
dHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9
IGVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKTsKLSAgICAgICAg
ICAgIC8vIElmIHRoZSBlbmQgb2YgdGhpcyBsaW5lIGlzIGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3Jh
cGgsIGluY2x1ZGUgdGhlIHNwYWNlIAotICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGVuZCBvZiB0
aGUgbGluZSBpbiB0aGUgc2VsZWN0aW9uLgotICAgICAgICAgICAgaWYgKGlzRW5kT2ZQYXJhZ3Jh
cGgoZW5kKSkgewotICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gZW5kLm5l
eHQoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dC5pc05vdE51bGwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZW5kID0gbmV4dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZW5kID0g
ZW5kLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIExJTkVfQk9VTkRBUlk6Ci0gICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZkxp
bmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgp
OwotICAgICAgICAgICAgbV9lbmQgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBt
X2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFBBUkFHUkFQSDogewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3N0
YXJ0LCBtX2FmZmluaXR5KTsKLSAgICAgICAgICAgIGlmIChpc1N0YXJ0T2ZMaW5lKHBvcykgJiYg
aXNFbmRPZkRvY3VtZW50KHBvcykpCi0gICAgICAgICAgICAgICAgcG9zID0gcG9zLnByZXZpb3Vz
KCk7Ci0gICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChwb3MpLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpOwot
ICAgICAgICAgICAgLy8gSW5jbHVkZSB0aGUgc3BhY2UgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgcGFy
YWdyYXBoIGluIHRoZSBzZWxlY3Rpb24uCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRPZk5leHRQYXJhZ3JhcGggPSB2aXNpYmxlUGFyYWdyYXBoRW5kLm5leHQoKTsKLSAgICAgICAg
ICAgIG1fZW5kID0gc3RhcnRPZk5leHRQYXJhZ3JhcGguaXNOb3ROdWxsKCkgPyBzdGFydE9mTmV4
dFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpIDogdmlzaWJsZVBhcmFncmFwaEVuZC5kZWVwRXF1
aXZhbGVudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBE
T0NVTUVOVF9CT1VOREFSWToKLSAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mRG9jdW1lbnQo
VmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgICAgICAgICAgbV9lbmQgPSBlbmRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX2VuZCwg
bV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBQQVJBR1JBUEhfQk9VTkRBUlk6Ci0gICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRP
ZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgICAgICAgICBtX2VuZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3Np
dGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgYWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KCk7Ci0KLSAg
ICAvLyBhZGp1c3QgdGhlIHN0YXRlCi0gICAgaWYgKG1fc3RhcnQuaXNOdWxsKCkpIHsKLSAgICAg
ICAgQVNTRVJUKG1fZW5kLmlzTnVsbCgpKTsKLSAgICAgICAgbV9zdGF0ZSA9IE5PTkU7Ci0gICAg
fSBlbHNlIGlmIChtX3N0YXJ0ID09IG1fZW5kIHx8IG1fc3RhcnQudXBzdHJlYW0oKSA9PSBtX2Vu
ZC51cHN0cmVhbSgpKSB7Ci0gICAgICAgIG1fc3RhdGUgPSBDQVJFVDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBtX3N0YXRlID0gUkFOR0U7Ci0gICAgICAgIC8vICJDb25zdHJhaW4iIHRoZSBzZWxl
Y3Rpb24gdG8gYmUgdGhlIHNtYWxsZXN0IGVxdWl2YWxlbnQgcmFuZ2Ugb2Ygbm9kZXMuCi0gICAg
ICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBhcmJpdHJhcnkgY2hvaWNlLCBidXQgZXhwZXJpZW5j
ZSBzaG93cyB0aGF0IGl0IGlzCi0gICAgICAgIC8vIHVzZWZ1bCB0byBtYWtlIHRvIG1ha2UgdGhl
IHNlbGVjdGlvbiAiY2Fub25pY2FsIiAoaWYgb25seSBmb3IKLSAgICAgICAgLy8gcHVycG9zZXMg
b2YgY29tcGFyaW5nIHNlbGVjdGlvbnMpLiBUaGlzIGlzIGFuIGlkZWFsIHBvaW50IG9mIHRoZSBj
b2RlCi0gICAgICAgIC8vIHRvIGRvIHRoaXMgb3BlcmF0aW9uLCBzaW5jZSBhbGwgc2VsZWN0aW9u
IGNoYW5nZXMgdGhhdCByZXN1bHQgaW4gYSBSQU5HRSAKLSAgICAgICAgLy8gY29tZSB0aHJvdWdo
IGhlcmUgYmVmb3JlIGFueW9uZSB1c2VzIGl0LgotICAgICAgICBtX3N0YXJ0ID0gbV9zdGFydC5k
b3duc3RyZWFtKCk7Ci0gICAgICAgIG1fZW5kID0gbV9lbmQudXBzdHJlYW0oKTsKLSAgICB9Ci0K
LSAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKLSAgICAKLSNpZiBFRElUX0RFQlVHCi0gICAgZGVi
dWdQb3NpdGlvbigpOwotI2VuZGlmCi19Ci0KIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGVi
dWdSZW5kZXJlcihSZW5kZXJPYmplY3QgKnIsIGJvb2wgc2VsZWN0ZWQpIGNvbnN0CiB7CiAgICAg
aWYgKHItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CkBAIC0xMDU5LDEwICs3ODgsMTAgQEAg
dm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpkZWJ1Z1JlbmRlcmVyKAogICAgICAgICBpbnQgdGV4
dExlbmd0aCA9IHRleHQubGVuZ3RoKCk7CiAgICAgICAgIGlmIChzZWxlY3RlZCkgewogICAgICAg
ICAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAgICAgICAgICBpZiAoci0+bm9kZSgpID09IG1fc3Rh
cnQubm9kZSgpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IG1fc3RhcnQub2Zmc2V0KCk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChyLT5ub2RlKCkgPT0gbV9lbmQubm9kZSgpKQotICAgICAgICAg
ICAgICAgIG9mZnNldCA9IG1fZW5kLm9mZnNldCgpOworICAgICAgICAgICAgaWYgKHItPm5vZGUo
KSA9PSBtX3NlbC5zdGFydCgpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3Nl
bC5zdGFydCgpLm9mZnNldCgpOworICAgICAgICAgICAgZWxzZSBpZiAoci0+bm9kZSgpID09IG1f
c2VsLmVuZCgpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbC5lbmQoKS5v
ZmZzZXQoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGludCBwb3M7CiAgICAgICAg
ICAgICBJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpbmROZXh0SW5saW5lVGV4
dEJveChvZmZzZXQsIHBvcyk7CkBAIC0xMTE0LDM0ICs4NDMsNiBAQCB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIoCiAgICAgfQogfQogCi12b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmRlYnVnUG9zaXRpb24oKSBjb25zdAotewotICAgIGlmICghbV9zdGFydC5ub2RlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vc3RhdGljIGludCBjb250ZXh0ID0gNTsKLSAgICAK
LSAgICAvL1JlbmRlck9iamVjdCAqciA9IDA7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIlNlbGVj
dGlvbkNvbnRyb2xsZXIgPT09PT09PT09PT09PT09PT1cbiIpOwotCi0gICAgaWYgKG1fc3RhcnQg
PT0gbV9lbmQpIHsKLSAgICAgICAgUG9zaXRpb24gcG9zID0gbV9zdGFydDsKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJwb3M6ICAgICAgICAlcyAlcDolZFxuIiwgcG9zLm5vZGUoKS0+bm9kZU5h
bWUoKS5xc3RyaW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQoKSk7Ci0gICAg
fQotICAgIGVsc2UgewotICAgICAgICBQb3NpdGlvbiBwb3MgPSBtX3N0YXJ0OwotICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgInN0YXJ0OiAgICAgICVzICVwOiVkXG4iLCBwb3Mubm9kZSgpLT5ub2Rl
TmFtZSgpLnFzdHJpbmcoKS5sYXRpbjEoKSwgcG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpKTsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIik7Ci0gICAgICAgIHBvcyA9IG1fZW5kOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVu
ZDogICAgICAgICVzICVwOiVkXG4iLCBwb3Mubm9kZSgpLT5ub2RlTmFtZSgpLnFzdHJpbmcoKS5s
YXRpbjEoKSwgcG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpKTsKLSAgICAgICAgZnByaW50ZihzdGRl
cnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgfQotICAg
ICAgICAgIAotCi0gICAgZnByaW50ZihzdGRlcnIsICI9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PVxuIik7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIEZvcm1hdEJ1ZmZlclNp
emUgMTAyNAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFy
ICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKQEAgLTExNTUsMTAgKzg1NiwxMCBAQCB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvcm1hdEZvckRlYnVnCiAgICAgZWxzZSB7CiAgICAg
ICAgIGNoYXIgc1tGb3JtYXRCdWZmZXJTaXplXTsKICAgICAgICAgcmVzdWx0ICs9ICJmcm9tICI7
Ci0gICAgICAgIG1fc3RhcnQuZm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVyU2l6ZSk7
CisgICAgICAgIG1fc2VsLnN0YXJ0KCkuZm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVy
U2l6ZSk7CiAgICAgICAgIHJlc3VsdCArPSBzOwogICAgICAgICByZXN1bHQgKz0gIiB0byAiOwot
ICAgICAgICBtX2VuZC5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBGb3JtYXRCdWZmZXJTaXplKTsKKyAg
ICAgICAgbV9zZWwuZW5kKCkuZm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVyU2l6ZSk7
CiAgICAgICAgIHJlc3VsdCArPSBzOwogICAgIH0KICAgICAgICAgICAKQEAgLTExNjgsOCArODY5
LDggQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpmb3JtYXRGb3JEZWJ1ZwogCiB2b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OnNob3dUcmVlKCkgY29uc3QKIHsKLSAgICBpZiAobV9zdGFydC5u
b2RlKCkpCi0gICAgICAgIG1fc3RhcnQubm9kZSgpLT5zaG93VHJlZUFuZE1hcmsobV9zdGFydC5u
b2RlKCksICJTIiwgbV9lbmQubm9kZSgpLCAiRSIpOworICAgIGlmIChtX3NlbC5zdGFydCgpLm5v
ZGUoKSkKKyAgICAgICAgbV9zZWwuc3RhcnQoKS5ub2RlKCktPnNob3dUcmVlQW5kTWFyayhtX3Nl
bC5zdGFydCgpLm5vZGUoKSwgIlMiLCBtX3NlbC5lbmQoKS5ub2RlKCksICJFIik7CiB9CiAjZW5k
aWYKIApJbmRleDoga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAko
cmV2aXNpb24gMTIwODIpCisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MywyMSArMTUzLDIxIEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVAKICAgICAvLwogICAgIC8vIEhhbmRsZSBsZWFkaW5n
IGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBhcyB3ZWxsIGFzIHNtYXJ0IGRlbGV0ZSBhZGp1c3Rt
ZW50cyB0byB0aGUgc2VsZWN0aW9uCiAgICAgLy8KLSAgICBtX2xlYWRpbmdXaGl0ZXNwYWNlID0g
bV91cHN0cmVhbVN0YXJ0LmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24obV9zZWxlY3Rpb25Ub0Rl
bGV0ZS5zdGFydEFmZmluaXR5KCkpOworICAgIG1fbGVhZGluZ1doaXRlc3BhY2UgPSBtX3Vwc3Ry
ZWFtU3RhcnQubGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihtX3NlbGVjdGlvblRvRGVsZXRlLmFm
ZmluaXR5KCkpOwogICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlID0gbV9kb3duc3RyZWFtRW5kLnRy
YWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogCiAgICAgaWYg
KG1fc21hcnREZWxldGUpIHsKICAgICAKICAgICAgICAgLy8gc2tpcCBzbWFydCBkZWxldGUgaWYg
dGhlIHNlbGVjdGlvbiB0byBkZWxldGUgYWxyZWFkeSBzdGFydHMgb3IgZW5kcyB3aXRoIHdoaXRl
c3BhY2UKLSAgICAgICAgUG9zaXRpb24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fdXBzdHJlYW1T
dGFydCwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydEFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50
KCk7CisgICAgICAgIFBvc2l0aW9uIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3Vwc3RyZWFtU3Rh
cnQsIG1fc2VsZWN0aW9uVG9EZWxldGUuYWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKICAg
ICAgICAgYm9vbCBza2lwU21hcnREZWxldGUgPSBwb3MudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRp
b24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOb3ROdWxsKCk7CiAgICAgICAgIGlmICgh
c2tpcFNtYXJ0RGVsZXRlKQogICAgICAgICAgICAgc2tpcFNtYXJ0RGVsZXRlID0gbV9kb3duc3Ry
ZWFtRW5kLmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1
ZSkuaXNOb3ROdWxsKCk7CiAKICAgICAgICAgLy8gZXh0ZW5kIHNlbGVjdGlvbiB1cHN0cmVhbSBp
ZiB0aGVyZSBpcyB3aGl0ZXNwYWNlIHRoZXJlCi0gICAgICAgIGJvb2wgaGFzTGVhZGluZ1doaXRl
c3BhY2VCZWZvcmVBZGp1c3RtZW50ID0gbV91cHN0cmVhbVN0YXJ0LmxlYWRpbmdXaGl0ZXNwYWNl
UG9zaXRpb24obV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydEFmZmluaXR5KCksIHRydWUpLmlzTm90
TnVsbCgpOworICAgICAgICBib29sIGhhc0xlYWRpbmdXaGl0ZXNwYWNlQmVmb3JlQWRqdXN0bWVu
dCA9IG1fdXBzdHJlYW1TdGFydC5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKG1fc2VsZWN0aW9u
VG9EZWxldGUuYWZmaW5pdHkoKSwgdHJ1ZSkuaXNOb3ROdWxsKCk7CiAgICAgICAgIGlmICghc2tp
cFNtYXJ0RGVsZXRlICYmIGhhc0xlYWRpbmdXaGl0ZXNwYWNlQmVmb3JlQWRqdXN0bWVudCkgewot
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24o
c3RhcnQsIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnRBZmZpbml0eSgpKS5wcmV2aW91cygpOwor
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24o
c3RhcnQsIG1fc2VsZWN0aW9uVG9EZWxldGUuYWZmaW5pdHkoKSkucHJldmlvdXMoKTsKICAgICAg
ICAgICAgIHBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIC8v
IEV4cGFuZCBvdXQgb25lIGNoYXJhY3RlciB1cHN0cmVhbSBmb3Igc21hcnQgZGVsZXRlIGFuZCBy
ZWNhbGN1bGF0ZQogICAgICAgICAgICAgLy8gcG9zaXRpb25zIGJhc2VkIG9uIHRoaXMgY2hhbmdl
LgpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlh
bGl6ZVAKICAgICAgICAgaWYgKCFza2lwU21hcnREZWxldGUgJiYgIWhhc0xlYWRpbmdXaGl0ZXNw
YWNlQmVmb3JlQWRqdXN0bWVudCAmJiBtX2Rvd25zdHJlYW1FbmQudHJhaWxpbmdXaGl0ZXNwYWNl
UG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOb3ROdWxsKCkpIHsKICAgICAg
ICAgICAgIC8vIEV4cGFuZCBvdXQgb25lIGNoYXJhY3RlciBkb3duc3RyZWFtIGZvciBzbWFydCBk
ZWxldGUgYW5kIHJlY2FsY3VsYXRlCiAgICAgICAgICAgICAvLyBwb3NpdGlvbnMgYmFzZWQgb24g
dGhpcyBjaGFuZ2UuCi0gICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24oZW5kLCBtX3Nl
bGVjdGlvblRvRGVsZXRlLmVuZEFmZmluaXR5KCkpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKGVuZCwgbV9zZWxlY3Rpb25Ub0RlbGV0
ZS5hZmZpbml0eSgpKS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIG1fdXBz
dHJlYW1FbmQgPSBwb3MudXBzdHJlYW0oKTsKICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVuZCA9
IHBvcy5kb3duc3RyZWFtKCk7CiAgICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZSA9IG1f
ZG93bnN0cmVhbUVuZC50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWUF9ERUZBVUxUX0FGRklO
SVRZKTsKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Omlu
aXRpYWxpemVQCiAgICAgLy8gSGFuZGxlIGRldGVjdGluZyBpZiB0aGUgbGluZSBjb250YWluaW5n
IHRoZSBzZWxlY3Rpb24gZW5kIGlzIGl0c2VsZiBmdWxseSBzZWxlY3RlZC4KICAgICAvLyBUaGlz
IGlzIG9uZSBvZiB0aGUgdGVzdHMgdGhhdCBkZXRlcm1pbmVzIGlmIGJsb2NrIG1lcmdpbmcgb2Yg
Y29udGVudCBuZWVkcyB0byBiZSBkb25lLgogICAgIC8vCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVFbmQoZW5kLCBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZEFmZmluaXR5KCkpOworICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKGVuZCwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5hZmZpbml0
eSgpKTsKICAgICBpZiAoaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKSkgewogICAgICAgICBQ
b3NpdGlvbiBwcmV2aW91c0xpbmVTdGFydCA9IHByZXZpb3VzTGluZVBvc2l0aW9uKHZpc2libGVF
bmQsIDApLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIGlmIChwcmV2aW91c0xpbmVTdGFydC5p
c051bGwoKSB8fCBSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhwcmV2aW91c0xpbmVT
dGFydCwgbV9kb3duc3RyZWFtU3RhcnQpID49IDApCkBAIC0yOTUsNyArMjk1LDcgQEAgYm9vbCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTcGVjaQogdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKIHsKICAgICBpbnQgc3RhcnRPZmZzZXQgPSBt
X3Vwc3RyZWFtU3RhcnQub2Zmc2V0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQg
PSBWaXNpYmxlUG9zaXRpb24obV9kb3duc3RyZWFtRW5kLCBtX3NlbGVjdGlvblRvRGVsZXRlLmVu
ZEFmZmluaXR5KCkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kID0gVmlzaWJsZVBv
c2l0aW9uKG1fZG93bnN0cmVhbUVuZCwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5hZmZpbml0eSgpKTsK
ICAgICBib29sIGVuZEF0RW5kT2ZCbG9jayA9IGlzRW5kT2ZCbG9jayh2aXNpYmxlRW5kKTsKIAog
ICAgIC8vIEhhbmRsZSBzb21lIHNwZWNpYWwgY2FzZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiBiZWdp
bnMgYW5kIGVuZHMgb24gc3BlY2lmaWMgdmlzaWJsZSB1bml0cy4KQEAgLTMxNiw3ICszMTYsNyBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgICAgIG1fc3Rh
cnROb2RlID0gbV9zdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgc3RhcnRP
ZmZzZXQgPSAwOwogICAgIH0KLSAgICBpZiAobV9zdGFydEJsb2NrICE9IG1fZW5kQmxvY2sgJiYg
aXNTdGFydE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKG1fdXBzdHJlYW1TdGFydCwgbV9zZWxlY3Rp
b25Ub0RlbGV0ZS5zdGFydEFmZmluaXR5KCkpKSkgeworICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0g
bV9lbmRCbG9jayAmJiBpc1N0YXJ0T2ZCbG9jayhWaXNpYmxlUG9zaXRpb24obV91cHN0cmVhbVN0
YXJ0LCBtX3NlbGVjdGlvblRvRGVsZXRlLmFmZmluaXR5KCkpKSkgewogICAgICAgICBpZiAoIW1f
c3RhcnRCbG9jay0+aXNBbmNlc3RvcihtX2VuZEJsb2NrLmdldCgpKSAmJiAhaXNTdGFydE9mQmxv
Y2sodmlzaWJsZUVuZCkgJiYgZW5kQXRFbmRPZkJsb2NrKSB7CiAgICAgICAgICAgICAvLyBEZWxl
dGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgYmxvY2ssIGJ1dCBub3QgdGhlIGJsb2NrIGl0c2Vs
Zi4KICAgICAgICAgICAgIG1fc3RhcnROb2RlID0gbV9zdGFydEJsb2NrLT5maXJzdENoaWxkKCk7
CkBAIC02NTQsNyArNjU0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gc2F2ZSB0aGlzIHRvIGxhdGVyIG1ha2UgdGhl
IHNlbGVjdGlvbiB3aXRoCi0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gbV9zZWxlY3Rpb25Ub0Rl
bGV0ZS5zdGFydEFmZmluaXR5KCk7CisgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gbV9zZWxlY3Rp
b25Ub0RlbGV0ZS5hZmZpbml0eSgpOwogICAgIAogICAgIC8vIHNldCB1cCBvdXIgc3RhdGUKICAg
ICBpbml0aWFsaXplUG9zaXRpb25EYXRhKCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL3R5cGluZ19j
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNw
cAkocmV2aXNpb24gMTIwODIpCisrKyBraHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZUtleVByZXNzZWQoRG9jCiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBTZWxlY3Rpb25Db250
cm9sbGVyIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKHNlbGVj
dGlvbi5pc0NhcmV0KCkgJiYgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxl
Y3Rpb24uc3RhcnRBZmZpbml0eSgpKS5wcmV2aW91cygpLmlzTnVsbCgpKSB7CisgICAgICAgIGlm
IChzZWxlY3Rpb24uaXNDYXJldCgpICYmIFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQo
KSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpLnByZXZpb3VzKCkuaXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIC8vIGRvIG5vdGhpbmcgZm9yIGEgZGVsZXRlIGtleSBhdCB0aGUgc3RhcnQgb2YgYW4gZWRp
dGFibGUgZWxlbWVudC4KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTkzLDcgKzkzLDcg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgIH0KICAgICBl
bHNlIHsKICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGlzRW5kT2ZEb2N1
bWVudChWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5zdGFydEFm
ZmluaXR5KCkpKSkgeworICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBpc0VuZE9m
RG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZm
aW5pdHkoKSkpKSB7CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nIGZvciBhIGRlbGV0ZSBrZXkg
YXQgdGhlIHN0YXJ0IG9mIGFuIGVkaXRhYmxlIGVsZW1lbnQuCiAgICAgICAgIH0KICAgICAgICAg
ZWxzZSB7CkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3Bl
bGxpbmdzQWZ0ZQogICAgIC8vIFNpbmNlIHRoZSB3b3JkIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQg
c2VsZWN0aW9uIGlzIG5ldmVyIG1hcmtlZCwgdGhpcyBkb2VzIGEgY2hlY2sgdG8KICAgICAvLyBz
ZWUgaWYgdHlwaW5nIG1hZGUgYSBuZXcgd29yZCB0aGF0IGlzIG5vdCBpbiB0aGUgY3VycmVudCBz
ZWxlY3Rpb24uIEJhc2ljYWxseSwgeW91CiAgICAgLy8gZ2V0IHRoaXMgYnkgYmVpbmcgYXQgdGhl
IGVuZCBvZiBhIHdvcmQgYW5kIHR5cGluZyBhIHNwYWNlLiAgICAKLSAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgZW5kaW5nU2VsZWN0aW9uKCkuc3Rh
cnRBZmZpbml0eSgpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoZW5kaW5nU2VsZWN0aW9u
KCkuc3RhcnQoKSwgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CiAgICAgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzID0gc3RhcnQucHJldmlvdXMoKTsKICAgICBpZiAocHJldmlvdXMuaXNO
b3ROdWxsKCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQocHJl
dmlvdXMsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKQEAgLTMyNywyMSArMzI3LDIxIEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCgpCiAgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICAKICAgICBzd2l0Y2ggKGVuZGluZ1NlbGVjdGlvbigp
LnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpSQU5HRToKKyAg
ICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpSQU5HRToKICAgICAgICAgICAgIHNlbGVjdGlv
blRvRGVsZXRlID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpDQVJFVDogeworICAgICAgICBjYXNlIGtodG1s
OjpTZWxlY3Rpb246OkNBUkVUOiB7CiAgICAgICAgICAgICAvLyBIYW5kbGUgZGVsZXRlIGF0IGJl
Z2lubmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAgICAgLy8gRG8gbm90aGluZyBpbiB0aGUg
Y2FzZSB0aGF0IHRoZSBjYXJldCBpcyBhdCB0aGUgc3RhcnQgb2YgYQogICAgICAgICAgICAgLy8g
cm9vdCBlZGl0YWJsZSBlbGVtZW50IG9yIGF0IHRoZSBzdGFydCBvZiBhIGRvY3VtZW50LgogICAg
ICAgICAgICAgUG9zaXRpb24gcG9zKGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgICAg
ICAgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBlbmRpbmdTZWxlY3Rp
b24oKS5zdGFydEFmZmluaXR5KCkpLnByZXZpb3VzKCkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAg
ICAgICAgIFBvc2l0aW9uIGVuZCA9IFZpc2libGVQb3NpdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIFBvc2l0
aW9uIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5p
dHkoKSkucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgUG9zaXRpb24g
ZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKSku
ZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIGlmIChzdGFydC5pc05vdE51bGwoKSAmJiBl
bmQuaXNOb3ROdWxsKCkgJiYgc3RhcnQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0g
ZW5kLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHNlbGVj
dGlvblRvRGVsZXRlID0gU2VsZWN0aW9uQ29udHJvbGxlcihzdGFydCwgU0VMX0RFRkFVTFRfQUZG
SU5JVFksIGVuZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOworICAgICAgICAgICAgICAgIHNlbGVj
dGlvblRvRGVsZXRlID0gU2VsZWN0aW9uQ29udHJvbGxlcihzdGFydCwgZW5kLCBTRUxfREVGQVVM
VF9BRkZJTklUWSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5PTkU6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlv
bjo6Tk9ORToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMzU4LDIxICszNTgsMjEgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpm
b3J3YXJkRGVsZXRlS2V5UHJlcwogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uVG9E
ZWxldGU7CiAgICAgCiAgICAgc3dpdGNoIChlbmRpbmdTZWxlY3Rpb24oKS5zdGF0ZSgpKSB7Ci0g
ICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFOR0U6CisgICAgICAgIGNhc2Uga2h0
bWw6OlNlbGVjdGlvbjo6UkFOR0U6CiAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IGVu
ZGluZ1NlbGVjdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0
aW9uQ29udHJvbGxlcjo6Q0FSRVQ6IHsKKyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpD
QVJFVDogewogICAgICAgICAgICAgLy8gSGFuZGxlIGRlbGV0ZSBhdCBiZWdpbm5pbmctb2YtYmxv
Y2sgY2FzZS4KICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgaW4gdGhlIGNhc2UgdGhhdCB0aGUg
Y2FyZXQgaXMgYXQgdGhlIHN0YXJ0IG9mIGEKICAgICAgICAgICAgIC8vIHJvb3QgZWRpdGFibGUg
ZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudC4KICAgICAgICAgICAgIFBvc2l0
aW9uIHBvcyhlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgICAgIFBvc2l0aW9u
IHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZp
bml0eSgpKS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgIFBvc2l0aW9uIGVu
ZCA9IFZpc2libGVQb3NpdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHko
KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0ID0gVmlzaWJs
ZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkubmV4dCgpLmRlZXBF
cXVpdmFsZW50KCk7CisgICAgICAgICAgICBQb3NpdGlvbiBlbmQgPSBWaXNpYmxlUG9zaXRpb24o
cG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwogICAg
ICAgICAgICAgaWYgKHN0YXJ0LmlzTm90TnVsbCgpICYmIGVuZC5pc05vdE51bGwoKSAmJiBzdGFy
dC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBlbmQubm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rp
b25Db250cm9sbGVyKHN0YXJ0LCBTRUxfREVGQVVMVF9BRkZJTklUWSwgZW5kLCBTRUxfREVGQVVM
VF9BRkZJTklUWSk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rp
b25Db250cm9sbGVyKHN0YXJ0LCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6
Tk9ORToKKyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpOT05FOgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjA4MikKKysrIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU5OSw2ICsxNTk5LDEw
IEBACiAJCUE4OEFENUFBMDk1MjUxMzEwMDFERDE5NiAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGNkZC
MDg5NzAxRjEwMEJBNTExNCAvKiBTVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCAqLzsgfTsKIAkJQThG
RDhCODYwODdDQjQ0QzAwREMzNzA3IC8qIEtXUVdNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBOEMwODc5RUM2NDAwNkE5MTcyIC8q
IEtXUVdNYXRyaXguY3BwICovOyB9OwogCQlBOEZEOEI4NzA4N0NCNDU3MDBEQzM3MDcgLyogS1dR
V01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTg1RDdBOEQwODc5RUM2NDAwNkE5MTcyIC8qIEtXUVdNYXRyaXguaCAqLzsgfTsKKwkJQUVEOTgw
MEMwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRUQ5ODAwQTA5NzZCMzhFMDAwNjA5RjYgLyogU2Vs
ZWN0aW9uLmNwcCAqLzsgfTsKKwkJQUVEOTgwMEQwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUVEOTgw
MEIwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlvbi5oICovOyB9OworCQlBRUQ5ODAwRTA5NzZC
MzhFMDAwNjA5RjYgLyogU2VsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFFRDk4MDBBMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rpb24u
Y3BwICovOyB9OworCQlBRUQ5ODAwRjA5NzZCMzhFMDAwNjA5RjYgLyogU2VsZWN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRUQ5ODAwQjA5NzZC
MzhFMDAwNjA5RjYgLyogU2VsZWN0aW9uLmggKi87IH07CiAJCUJDMTc5ODkyMDg4RDk3NUYwMDYw
NjhBNSAvKiByZW5kZXJfdGhlbWVfbWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMxNzk4OEYwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVt
ZV9tYWMubW0gKi87IH07CiAJCUJDMTc5ODkzMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhl
bWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMx
Nzk4OTAwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZS5jcHAgKi87IH07CiAJCUJDMTc5
ODk0MDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODkxMDg4RDk3NUYwMDYwNjhBNSAvKiBy
ZW5kZXJfdGhlbWUuaCAqLzsgfTsKQEAgLTI0MjcsNiArMjQzMSw4IEBACiAJCUE4QzMyOTY3MDkz
QkI3QjIwMDBCOUNBQyAvKiBTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFUG9pbnRM
aWdodEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzMyRDg5MDkzRDhCRkEwMDBCOUNBQyAvKiB4bGlua2F0
dHJzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0geGxpbmthdHRy
cy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCUE4QzMyRDk2MDkzRDhFQTQwMDBCOUNBQyAvKiBYTGlua05hbWVzV3JhcHBlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhM
aW5rTmFtZXNXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CisJCUFFRDk4MDBBMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNlbGVjdGlvbi5j
cHA7IHBhdGggPSBlZGl0aW5nL1NlbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFFRDk4MDBCMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNlbGVjdGlvbi5oOyBwYXRoID0gZWRpdGluZy9TZWxl
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwNkYyNDkwNkQxOEE3RTAw
NEE2RkEzIC8qIHhzbF9zdHlsZXNoZWV0aW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB4c2xfc3R5bGVzaGVldGltcGwuY3BwOyBw
YXRoID0geHNsL3hzbF9zdHlsZXNoZWV0aW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzA2RjI0QTA2RDE4QTdFMDA0QTZG
QTMgLyogeHNsX3N0eWxlc2hlZXRpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHhzbF9zdHlsZXNoZWV0aW1wbC5oOyBwYXRoID0geHNsL3hz
bF9zdHlsZXNoZWV0aW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKIAkJQkMwNkYyNEIwNkQxOEE3RTAwNEE2RkEzIC8qIHhzbHRfcHJv
Y2Vzc29yaW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSB4c2x0X3Byb2Nlc3NvcmltcGwuY3BwOyBwYXRoID0geHNsL3hzbHRfcHJv
Y2Vzc29yaW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwpAQCAtMzcxNSw2ICszNzIxLDggQEAKIAkJCQlCRTAyRDRFNzA2NkY5MDhB
MDA3NjgwOUYgLyoganNlZGl0aW5nLmNwcCAqLywKIAkJCQk5Mzc4RDlGQTA3NjQwQTQ2MDA0Qjk3
QkYgLyogbWFya3VwLmggKi8sCiAJCQkJOTM3OEQ5RjkwNzY0MEE0NjAwNEI5N0JGIC8qIG1hcmt1
cC5jcHAgKi8sCisJCQkJQUVEOTgwMEEwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlvbi5jcHAg
Ki8sCisJCQkJQUVEOTgwMEIwOTc2QjM4RTAwMDYwOUY2IC8qIFNlbGVjdGlvbi5oICovLAogCQkJ
CTkzQUJFMDY3MDcwMjg1RjYwMEJEOTFGOSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmggKi8sCiAJ
CQkJOTNBQkUwNjYwNzAyODVGNjAwQkQ5MUY5IC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwICov
LAogCQkJCUJFQ0U2N0JEMDcwODdCMjUwMDA3QzE0QiAvKiB0ZXh0X2FmZmluaXR5LmggKi8sCkBA
IC00NjQ3LDYgKzQ2NTUsNyBAQAogCQkJCTkzRjE5OUVGMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FG
b3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5RjAwODI0NUU1OTAwMUU5QUJDIC8q
IFdlYkNvcmVWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlGMTA4MjQ1RTU5MDAxRTlB
QkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRUQ5ODAwRDA5
NzZCMzhFMDAwNjA5RjYgLyogU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlG
MjA4MjQ1RTU5MDAxRTlBQkMgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMTk5RjMwODI0NUU1OTAwMUU5QUJDIC8qIHZpc2libGVfcG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRjE5OUY0MDgyNDVFNTkwMDFFOUFCQyAvKiB2aXNpYmxlX3RleHQu
aCBpbiBIZWFkZXJzICovLApAQCAtNTI1Niw2ICs1MjY1LDcgQEAKIAkJCQlBODE4NUY0MzA5NzY1
NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb25JbXBsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODE4NUY0NTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRGcmFnbWVudEltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4MTg1RjQ4MDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudEltcGwu
aCBpbiBIZWFkZXJzICovLAorCQkJCUFFRDk4MDBGMDk3NkIzOEUwMDA2MDlGNiAvKiBTZWxlY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjFBNUYzMDk3ODM5NjAwMDYxQTEyMyAvKiBJbnRT
aXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0YxQTYyOTA5NzgzQ0QyMDA2MUExMjMgLyogS1dR
UmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3M0UyNjAwOTc4NjgyNzAwRURGRjhBIC8qIEZs
b2F0U2l6ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02Nzg3LDYgKzY3OTcsNyBAQAogCQkJCUE4MTg1
RjNDMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTgxODVGM0UwOTc2NTc2NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODE4NUYzRjA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRG
cmFnbWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUVEOTgwMEMwOTc2QjM4RTAwMDYw
OUY2IC8qIFNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTRFQzYxMjA5Nzc3OEY1
MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNG
MUE2MUMwOTc4M0JERDAwNjFBMTIzIC8qIEludFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNGMUE2MjgwOTc4M0NEMjAwNjFBMTIzIC8qIEtXUVJlY3QubW0gaW4gU291cmNlcyAqLywKQEAg
LTcwNzEsNiArNzA4Miw3IEBACiAJCQkJQTgxODVGNDQwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3Vt
ZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODE4NUY0NjA5NzY1NzY2MDA1ODI2RDkg
LyogRE9NSW1wbGVtZW50YXRpb25JbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MTg1RjQ3
MDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudEZyYWdtZW50SW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBRUQ5ODAwRTA5NzZCMzhFMDAwNjA5RjYgLyogU2VsZWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRjFBNUYyMDk3ODM5NjAwMDYxQTEyMyAvKiBJbnRTaXplLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDRjFBNjJBMDk3ODNDRDIwMDYxQTEyMyAvKiBLV1FSZWN0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM3M0UyMTQwOTc4NTQ2MzAwRURGRjhBIC8qIEludFNpemUubW0g
aW4gU291cmNlcyAqLywKSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJ
KHJldmlzaW9uIDEyMDgyKQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTU0IEBACisyMDA2LTAxLTE0ICBEdW5jYW4gV2lsY294ICA8ZHVuY2FuQG1jbGluay5pdD4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIDxo
dHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTY1MjM+CisgICAg
ICAgICJFeHRyYWN0IGRhdGEgZnJvbSBTZWxlY3Rpb25Db250cm9sbGVyIgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkYXRhIHBvcnRpb25zIG9mIFNlbGVjdGlvbkNvbnRyb2xs
ZXIgaW50byBpdHMKKyAgICAgICAgb3duIGNsYXNzLCAiU2VsZWN0aW9uIi4KKworICAgICAgICBU
aGUgZXh0cmFjdGVkIGRhdGEgYXJlIHRoZSBiYXNlL2V4dGVudC9zdGFydC9lbmQgcG9zaXRpb25z
IGFuZCBjdXJzb3IKKyAgICAgICAgYWZmaW5pdHkuIEFsc28gYSBjb3VwbGUgY2FjaGVkIHZhbHVl
cyBnZW5lcmF0ZWQgYnkgdmFsaWRhdGlvbiBhcmUga2VwdCBhcm91bmQKKyAgICAgICAgaW4gdGhl
IG5ldyBjbGFzcy4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgYXdheSB3aXRoIGFsbCB0aGUg
ZGlmZmVyZW50IGFmZmluaXRpZXMKKyAgICAgICAgKHN0YXJ0L2VuZC9iYXNlL2V4dGVudCkgdGhh
dCB3ZXJlIG5ldmVyIGltcGxlbWVudGVkIHByb3Blcmx5LCBzaW5jZSBhZmZpbml0eQorICAgICAg
ICBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0IChhcyBwZXIg
ZGlzY3Vzc2lvbiB3aXRoIG1qcyBhbmQKKyAgICAgICAgZGFyaW4gb24gI3dlYmtpdCkuCisKKyAg
ICAgICAgTm8gdGVzdCBjYXNlcyBhZGRlZCBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3RvcmluZy4K
KworCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJyaWRnZS9tYWMvTWFjRnJhbWUubW06CisgICAgICAgIChNYWNGcmFtZTo6ZmluZFN0cmlu
Zyk6CisgICAgICAgIChNYWNGcmFtZTo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAg
ICAgKE1hY0ZyYW1lOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKE1hY0ZyYW1lOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBi
cmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1l
QnJpZGdlIHNlbGVjdGlvblN0YXRlXSk6CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBz
ZWxlY3ROU1JhbmdlOl0pOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2Ugc2VsZWN0aW9u
QWZmaW5pdHldKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHNldE1hcmtET01SYW5n
ZTpdKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGVuc3VyZVNlbGVjdGlvblZpc2li
bGVdKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIHJhbmdlT2ZDaGFyYWN0ZXJzQXJv
dW5kQ2FyZXRdKToKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbjo6U2VsZWN0aW9uKToKKyAgICAgICAgKGtodG1s
OjpTZWxlY3Rpb246OmNsZWFyKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb246OnRvUmFuZ2Up
OgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbjo6dmFsaWRhdGUpOgorICAgICAgICAoa2h0bWw6
OlNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KToKKyAgICAgICAgKGtodG1sOjpT
ZWxlY3Rpb246OmRlYnVnUG9zaXRpb24pOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvU2VsZWN0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbjo6KToKKyAgICAgICAgKGto
dG1sOjpTZWxlY3Rpb246OnN0YXRlKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb246OnNldEFm
ZmluaXR5KToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb246OmFmZmluaXR5KToKKyAgICAgICAg
KGtodG1sOjpTZWxlY3Rpb246OnNldEJhc2UpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbjo6
c2V0RXh0ZW50KToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb246OnNldFN0YXJ0KToKKyAgICAg
ICAgKGtodG1sOjpTZWxlY3Rpb246OnNldEVuZCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9u
OjpiYXNlKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb246OmV4dGVudCk6CisgICAgICAgIChr
aHRtbDo6U2VsZWN0aW9uOjpzdGFydCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uOjplbmQp
OgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbjo6aXNOb25lKToKKyAgICAgICAgKGtodG1sOjpT
ZWxlY3Rpb246OmlzQ2FyZXQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbjo6aXNSYW5nZSk6
CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uOjppc0NhcmV0T3JSYW5nZSk6CisgICAgICAgIChr
aHRtbDo6U2VsZWN0aW9uOjppc0Jhc2VGaXJzdCk6CisgICAgICAgIChraHRtbDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChraHRtbDo6b3BlcmF0b3IhPSk6CisgICAgICAgICoga2h0bWwvZWRpdGlu
Zy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250
cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6Om1vdmVUbyk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0TW9k
aWZ5Qmlhcyk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0
ZW5kaW5nUmlnaHRGb3J3YXJkKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVy
Ojptb2RpZnlNb3ZpbmdSaWdodEZvcndhcmQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNv
bnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0xlZnRCYWNrd2FyZCk6CisgICAgICAgIChraHRtbDo6
U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nTGVmdEJhY2t3YXJkKToKKyAgICAgICAg
KGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkpOgorICAgICAgICAoa2h0bWw6OlNl
bGVjdGlvbkNvbnRyb2xsZXI6OmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkpOgorICAgICAgICAoa2h0
bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbik6
CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAo
a2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UpOgorICAgICAgICAoa2h0bWw6OlNl
bGVjdGlvbkNvbnRyb2xsZXI6OnNldEV4dGVudCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6dG9TdHJpbmcpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmdldFJhbmdlQXQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmZy
YW1lKToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpjb2xsYXBzZVRvRW5k
KToKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpjb2xsYXBzZVRvU3RhcnQp
OgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmxheW91dCk6CisgICAgICAg
IChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZWN0KToKKyAgICAgICAgKGtodG1s
OjpTZWxlY3Rpb25Db250cm9sbGVyOjpuZWVkc0NhcmV0UmVwYWludCk6CisgICAgICAgIChraHRt
bDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldCk6CisgICAgICAgIChraHRtbDo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6ZGVidWdSZW5kZXJlcik6CisgICAgICAgIChraHRtbDo6U2VsZWN0
aW9uQ29udHJvbGxlcjo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAgICAoa2h0bWw6OlNlbGVj
dGlvbkNvbnRyb2xsZXI6OnNob3dUcmVlKToKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpz
dGF0ZSk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6YWZmaW5pdHkpOgor
ICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmJhc2UpOgorICAgICAgICAoa2h0
bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmV4dGVudCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0
aW9uQ29udHJvbGxlcjo6c3RhcnQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OmVuZCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6aXNOb25lKToK
KyAgICAgICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjppc0NhcmV0KToKKyAgICAgICAg
KGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjppc1JhbmdlKToKKyAgICAgICAgKGtodG1sOjpT
ZWxlY3Rpb25Db250cm9sbGVyOjppc0NhcmV0T3JSYW5nZSk6CisgICAgICAgIChraHRtbDo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6dG9SYW5nZSk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29u
dHJvbGxlcjo6YmFzZU5vZGUpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6
OmV4dGVudE5vZGUpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmJhc2VP
ZmZzZXQpOgorICAgICAgICAoa2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmV4dGVudE9mZnNl
dCk6CisgICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6YW5jaG9yTm9kZSk6Cisg
ICAgICAgIChraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6YW5jaG9yT2Zmc2V0KToKKyAgICAg
ICAgKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpmb2N1c05vZGUpOgorICAgICAgICAoa2h0
bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvY3VzT2Zmc2V0KToKKyAgICAgICAgKGtodG1sOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQu
Y3BwOgorICAgICAgICAoa2h0bWw6OkFwcGx5U3R5bGVDb21tYW5kOjp1cGRhdGVTdGFydEVuZCk6
CisgICAgICAgICoga2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwOgor
ICAgICAgICAoa2h0bWw6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAqIGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcDoKKyAgICAgICAg
KGtodG1sOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFsaXplUG9zaXRpb25EYXRhKToK
KyAgICAgICAgKGtodG1sOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVs
ZXRlKToKKyAgICAgICAgKGtodG1sOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwOgor
ICAgICAgICAoa2h0bWw6Okluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAqIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHA6
CisgICAgICAgIChraHRtbDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBs
eSk6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcDoKKyAg
ICAgICAgKGtodG1sOjpJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQpOgorICAgICAgICAqIGtodG1s
L2VkaXRpbmcvbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6TW92
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvcmVw
bGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoa2h0bWw6OlJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpjb21wbGV0ZUhUTUxSZXBsYWNlbWVudCk6CisgICAgICAgICoga2h0bWwvZWRpdGlu
Zy90eXBpbmdfY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6VHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChraHRtbDo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERl
bGV0ZUtleVByZXNzZWQpOgorICAgICAgICAoa2h0bWw6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZyk6CisgICAgICAgICoga2h0bWwveG1sL0RvY3VtZW50SW1wbC5j
cHA6CisgICAgICAgIChEb2N1bWVudEltcGw6OnVwZGF0ZVNlbGVjdGlvbik6CisgICAgICAgICog
a3dxL0tXUUFjY09iamVjdC5tbToKKyAgICAgICAgKC1bS1dRQWNjT2JqZWN0IGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpdKToKKyAgICAgICAgKC1bS1dRQWNjT2JqZWN0IGRvQVhUZXh0TWFy
a2VyUmFuZ2VGb3JMaW5lOl0pOgorICAgICAgICAqIGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3Bw
OgorICAgICAgICAod3JpdGVTZWxlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAoRnJhbWU6OnNlbGVjdENvbnRlbnRzT2ZOb2RlKToKKyAgICAgICAgKEZyYW1lOjpz
aG91bGRDaGFuZ2VTZWxlY3Rpb24pOgorICAgICAgICAoRnJhbWU6OmNvbXB1dGVBbmRTZXRUeXBp
bmdTdHlsZSk6CisgICAgICAgIChGcmFtZTo6YXBwbHlTdHlsZSk6CisgICAgICAgIChGcmFtZTo6
YXBwbHlQYXJhZ3JhcGhTdHlsZSk6CisgICAgICAgIChGcmFtZTo6c2VsZWN0RnJhbWVFbGVtZW50
SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQpOgorICAgICAgICAoRnJhbWU6OnJldmVhbFNlbGVjdGlv
bik6CisgICAgICAgIChGcmFtZTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSk6CisgICAg
ICAgIChGcmFtZTo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydCk6CisKIDIwMDYtMDEtMTMgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogICAgICAgICAKICAgICAgICAgQ29udmVydCBRU2l6
ZUYgdG8gRmxvYXRTaXplIGFuZCBtb3ZlIGl0IHRvIHRoZSBwbGF0Zm9ybQpJbmRleDogYnJpZGdl
L21hYy9NYWNGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL01hY0ZyYW1lLm1tCShy
ZXZpc2lvbiAxMjA4MikKKysrIGJyaWRnZS9tYWMvTWFjRnJhbWUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ0NSw5ICs0NDUsOSBAQCBib29sIE1hY0ZyYW1lOjpmaW5kU3RyaW5nKE5TU3RyaW5nICpz
dHJpCiAgICAgUmVmUHRyPFJhbmdlSW1wbD4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKHht
bERvY0ltcGwoKSkpOwogICAgIGlmIChzZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKSkgewogICAg
ICAgICBpZiAoZm9yd2FyZCkgewotICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0
KCksIFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5lbmRB
ZmZpbml0eSgpKSk7CisgICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgVmlz
aWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmFmZmluaXR5KCkp
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQo
KSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb24oKS5zdGFydEFm
ZmluaXR5KCkpKTsKKyAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0eSgpKSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgUmVmUHRyPFJhbmdlSW1wbD4gcmVzdWx0UmFuZ2UoZmluZFBs
YWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZykpOwpA
QCAtNDU2LDkgKzQ1Niw5IEBAIGJvb2wgTWFjRnJhbWU6OmZpbmRTdHJpbmcoTlNTdHJpbmcgKnN0
cmkKICAgICBpZiAoc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCkgJiYgKnJlc3VsdFJhbmdlID09
ICpzZWxlY3Rpb24oKS50b1JhbmdlKCkpIHsKICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9m
Q29udGVudHMoeG1sRG9jSW1wbCgpKTsKICAgICAgICAgaWYgKGZvcndhcmQpIHsKLSAgICAgICAg
ICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
KCkuZW5kKCksIHNlbGVjdGlvbigpLmVuZEFmZmluaXR5KCkpKTsKKyAgICAgICAgICAgIHNldFN0
YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuZW5kKCks
IHNlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0
YXJ0KCksIHNlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHkoKSkpOworICAgICAgICAgICAgc2V0RW5k
KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3RhcnQoKSwg
c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdFJhbmdl
ID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNl
RmxhZyk7CiAgICAgfQpAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgTWFjRnJhbWU6OmZpbmRTdHJp
bmcoTlNTdHJpbmcgKnN0cmkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHNl
dFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RS
RUFNLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rp
b25Db250cm9sbGVyKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7CiAgICAgcmV2ZWFs
U2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03NTAsMTIgKzc1MCwxMiBAQCBR
U3RyaW5nIE1hY0ZyYW1lOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpCiAgICAgaWYgKHNlbGVjdGlv
bigpLnN0YXJ0KCkubm9kZSgpKSB7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gdHJ1
ZTsKICAgICAgICAgaWYgKHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uKCkuc3RhcnRB
ZmZpbml0eSgpKTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24o
KS5zdGFydCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0eSgpKTsKICAgICAgICAgICAgIC8vIFdlIG1h
dGNoIEFwcEtpdCdzIHJ1bGU6IFN0YXJ0IDEgY2hhcmFjdGVyIGJlZm9yZSB0aGUgc2VsZWN0aW9u
LgogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9uZUJlZm9yZVN0YXJ0ID0gc3RhcnQucHJl
dmlvdXMoKTsKICAgICAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBvbmVCZWZv
cmVTdGFydC5pc05vdE51bGwoKSA/IG9uZUJlZm9yZVN0YXJ0IDogc3RhcnQpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIFZpc2libGVQ
b3NpdGlvbihzZWxlY3Rpb24oKS5lbmQoKSwgc2VsZWN0aW9uKCkuZW5kQWZmaW5pdHkoKSkpOwor
ICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIFZpc2libGVQb3NpdGlvbihz
ZWxlY3Rpb24oKS5lbmQoKSwgc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC04MTksNyArODE5LDcgQEAgUVN0cmluZyBNYWNGcmFtZTo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaQogICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHJlc3VsdCA9IGNoYXJzLnN0
cmluZyhtaXNzcGVsbGluZy5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGlu
Z1JhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwg
Y2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKIAotICAg
ICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihtaXNzcGVs
bGluZ1JhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOwor
ICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihtaXNz
cGVsbGluZ1JhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dmVhbFNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIG1pc3NwZWxsaW5n
IGluIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICB4bWxEb2NJbXBsKCktPmFkZE1hcmtl
cihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAt
Mjk2Miw3ICsyOTYyLDcgQEAgTlNXcml0aW5nRGlyZWN0aW9uIE1hY0ZyYW1lOjpiYXNlV3JpdGlu
ZwogewogICAgIE5TV3JpdGluZ0RpcmVjdGlvbiByZXN1bHQgPSBOU1dyaXRpbmdEaXJlY3Rpb25M
ZWZ0VG9SaWdodDsKIAotICAgIFBvc2l0aW9uIHBvcyA9IFZpc2libGVQb3NpdGlvbihkLT5tX3Nl
bGVjdGlvbi5zdGFydCgpLCBkLT5tX3NlbGVjdGlvbi5zdGFydEFmZmluaXR5KCkpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgUG9zaXRpb24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0
aW9uLnN0YXJ0KCksIGQtPm1fc2VsZWN0aW9uLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7
CiAgICAgTm9kZUltcGwgKm5vZGUgPSBwb3Mubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCkpCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMzI5LDExICszMzI5LDExIEBAIHZvaWQgTWFjRnJh
bWU6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24KICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjaGFuZ2UgaW4gc2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlvbiwg
b2xkU2VsZWN0aW9uIG1heSBubyBsb25nZXIKICAgICAgICAgICAgIC8vIGJlIGluIHRoZSBkb2N1
bWVudC4KICAgICAgICAgICAgIGlmIChvbGRTZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkgJiYgb2xk
U2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gb2xkU3RhcnQob2xkU2VsZWN0aW9uLnN0YXJ0KCksIG9sZFNlbGVj
dGlvbi5zdGFydEFmZmluaXR5KCkpOworICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBv
bGRTdGFydChvbGRTZWxlY3Rpb24uc3RhcnQoKSwgb2xkU2VsZWN0aW9uLmFmZmluaXR5KCkpOwog
ICAgICAgICAgICAgICAgIG9sZEFkamFjZW50V29yZHMgPSBTZWxlY3Rpb25Db250cm9sbGVyKHN0
YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChvbGRT
dGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7ICAgCiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxl
Y3Rpb24oKS5zdGFydEFmZmluaXR5KCkpOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5l
d1N0YXJ0KHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmFmZmluaXR5KCkpOwogICAg
ICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBuZXdBZGphY2VudFdvcmRzKHN0YXJ0T2ZXb3Jk
KG5ld1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdTdGFydCwgUmln
aHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAKICAgICAgICAgICAgIGlmIChvbGRBZGphY2VudFdvcmRz
ICE9IG5ld0FkamFjZW50V29yZHMpIHsKSW5kZXg6IGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJp
ZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShy
ZXZpc2lvbiAxMjA4MikKKysrIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTUsMTEgKzg1NSwxMSBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplZEtK
UyA9IEZBTFNFOwogLSAoV2ViU2VsZWN0aW9uU3RhdGUpc2VsZWN0aW9uU3RhdGUKIHsKICAgICBz
d2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxl
Y3Rpb25Db250cm9sbGVyOjpOT05FOgorICAgICAgICBjYXNlIGtodG1sOjpTZWxlY3Rpb246Ok5P
TkU6CiAgICAgICAgICAgICByZXR1cm4gV2ViU2VsZWN0aW9uU3RhdGVOb25lOwotICAgICAgICBj
YXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNBUkVUOgorICAgICAgICBjYXNlIGtodG1sOjpTZWxl
Y3Rpb246OkNBUkVUOgogICAgICAgICAgICAgcmV0dXJuIFdlYlNlbGVjdGlvblN0YXRlQ2FyZXQ7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFOR0U6CisgICAgICAgIGNhc2Ug
a2h0bWw6OlNlbGVjdGlvbjo6UkFOR0U6CiAgICAgICAgICAgICByZXR1cm4gV2ViU2VsZWN0aW9u
U3RhdGVSYW5nZTsKICAgICB9CiAgICAgCkBAIC0yMDIyLDcgKzIwMjIsNyBAQCBzdGF0aWMgSFRN
TEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKHZvaWQpc2VsZWN0TlNSYW5nZToo
TlNSYW5nZSlyYW5nZQogewotICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbihTZWxlY3Rpb25Db250
cm9sbGVyKFtzZWxmIGNvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXSwga2h0bWw6OlNFTF9ERUZBVUxU
X0FGRklOSVRZLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICBtX2ZyYW1lLT5z
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihbc2VsZiBjb252ZXJ0VG9ET01SYW5nZTpy
YW5nZV0sIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogfQogCiAtIChOU1JhbmdlKXNl
bGVjdGVkTlNSYW5nZQpAQCAtMjAzMiwxMiArMjAzMiwxMiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9u
QWZmaW5pdHkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlNTZWxlY3Rpb25BZmZpbml0eT4o
bV9mcmFtZS0+c2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TlNTZWxlY3Rpb25BZmZpbml0eT4obV9mcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHko
KSk7CiB9CiAKIC0gKHZvaWQpc2V0TWFya0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0g
ICAgbV9mcmFtZS0+c2V0TWFyayhTZWxlY3Rpb25Db250cm9sbGVyKFtyYW5nZSBfcmFuZ2VJbXBs
XSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5J
VFkpKTsKKyAgICBtX2ZyYW1lLT5zZXRNYXJrKFNlbGVjdGlvbkNvbnRyb2xsZXIoW3JhbmdlIF9y
YW5nZUltcGxdLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKIH0KIAogLSAoRE9NUmFu
Z2UgKiltYXJrRE9NUmFuZ2UKQEAgLTI1MDcsNyArMjUwNyw3IEBAIHN0YXRpYyBIVE1MRm9ybUVs
ZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBpZiAoIWRvY3VtZW50VmlldykKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIFFSZWN0IGV4dGVudFJlY3QgPSByZW5kZXJlci0+Y2FyZXRSZWN0
KGV4dGVudC5vZmZzZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCkuZXh0ZW50QWZmaW5pdHkoKSk7
CisgICAgUVJlY3QgZXh0ZW50UmVjdCA9IHJlbmRlcmVyLT5jYXJldFJlY3QoZXh0ZW50Lm9mZnNl
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5hZmZpbml0eSgpKTsKICAgICBSZW5kZXJMYXllciAq
bGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICBpZiAobGF5ZXIpCiAgICAg
ICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGV4dGVudFJlY3QpOwpAQCAtMjY2NCw3ICsy
NjY0LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIGlm
ICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFZpc2li
bGVQb3NpdGlvbiBjYXJldChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLnN0YXJ0QWZmaW5p
dHkoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxl
Y3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSBjYXJldC5uZXh0
KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gY2FyZXQucHJldmlvdXMoKTsKICAg
ICBpZiAocHJldmlvdXMuaXNOdWxsKCkgfHwgbmV4dC5pc051bGwoKSB8fCBjYXJldCA9PSBuZXh0
IHx8IGNhcmV0ID09IHByZXZpb3VzKQpJbmRleDoga3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAJKHJldmlzaW9uIDEyMDgy
KQorKysga3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNiw3
ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVNlbGVjdGlvbihRVGV4dFN0cmVhbSAmCiAgICAg
U2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAg
aWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKICAgICAgICAgdHMgPDwgImNhcmV0OiBwb3NpdGlv
biAiIDw8IHNlbGVjdGlvbi5zdGFydCgpLm9mZnNldCgpIDw8ICIgb2YgIiA8PCBub2RlUG9zaXRp
b24oc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbi5zdGFy
dEFmZmluaXR5KCkgPT0gVVBTVFJFQU0pCisgICAgICAgIGlmIChzZWxlY3Rpb24uYWZmaW5pdHko
KSA9PSBVUFNUUkVBTSkKICAgICAgICAgICAgIHRzIDw8ICIgKHVwc3RyZWFtIGFmZmluaXR5KSI7
CiAgICAgICAgIHRzIDw8ICJcbiI7IAogICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzUmFuZ2Uo
KSkgewpJbmRleDoga3dxL0tXUUFjY09iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRQWNj
T2JqZWN0Lm1tCShyZXZpc2lvbiAxMjA4MikKKysrIGt3cS9LV1FBY2NPYmplY3QubW0JKHdvcmtp
bmcgY29weSkKQEAgLTk1Myw4ICs5NTMsOCBAQCBzdGF0aWMgUVJlY3QgYm91bmRpbmdCb3hSZWN0
KFJlbmRlck9iamVjCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAvLyByZXR1cm4g
YSBtYXJrZXIgcmFuZ2UgZm9yIHRoZSBzZWxlY3Rpb24gc3RhcnQgdG8gZW5kCi0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHNlbC5zdGFydCgp
LCBzZWwuc3RhcnRBZmZpbml0eSgpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0
aW9uID0gVmlzaWJsZVBvc2l0aW9uKHNlbC5lbmQoKSwgc2VsLmVuZEFmZmluaXR5KCkpOworICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihzZWwu
c3RhcnQoKSwgc2VsLmFmZmluaXR5KCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBWaXNpYmxlUG9zaXRpb24oc2VsLmVuZCgpLCBzZWwuYWZmaW5pdHkoKSk7CiAgICAg
ICAgIHJldHVybiAoaWQpIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25z
OnN0YXJ0UG9zaXRpb24gYW5kRW5kUG9zOmVuZFBvc2l0aW9uXTsKICAgICB9CiAgICAgCkBAIC0x
MDc3LDggKzEwNzcsOCBAQCBzdGF0aWMgUVJlY3QgYm91bmRpbmdCb3hSZWN0KFJlbmRlck9iamVj
CiAgICAgKHZvaWQpc2VsLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQsIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OlJJR0hULCBraHRtbDo6TElORV9CT1VOREFSWSk7CiAKICAgICAvLyBy
ZXR1cm4gYSBtYXJrZXIgcmFuZ2UgZm9yIHRoZSBzZWxlY3Rpb24gc3RhcnQgdG8gZW5kCi0gICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24oc2VsLnN0YXJ0
KCksIHNlbC5zdGFydEFmZmluaXR5KCkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlv
biA9IFZpc2libGVQb3NpdGlvbihzZWwuZW5kKCksIHNlbC5lbmRBZmZpbml0eSgpKTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihzZWwuc3RhcnQo
KSwgc2VsLmFmZmluaXR5KCkpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IFZp
c2libGVQb3NpdGlvbihzZWwuZW5kKCksIHNlbC5hZmZpbml0eSgpKTsKICAgICByZXR1cm4gKGlk
KSBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczpzdGFydFBvc2l0aW9u
IGFuZEVuZFBvczplbmRQb3NpdGlvbl07CiB9CiAKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA4MikKKysrIHBhZ2UvRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMzLDcgKzI0MzMsNyBAQCB2b2lkIEZyYW1lOjpzZWxl
Y3RBbGwoKQogCiBib29sIEZyYW1lOjpzZWxlY3RDb250ZW50c09mTm9kZShOb2RlSW1wbCogbm9k
ZSkKIHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIo
UG9zaXRpb24obm9kZSwgMCksIGtodG1sOjpET1dOU1RSRUFNLCBQb3NpdGlvbihub2RlLCBtYXhE
ZWVwT2Zmc2V0KG5vZGUpKSwga2h0bWw6OkRPV05TVFJFQU0pOyAgICAKKyAgICBTZWxlY3Rpb25D
b250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obm9kZSwgMCksIFBv
c2l0aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSkpLCBraHRtbDo6RE9XTlNUUkVBTSk7ICAg
IAogICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgewogICAgICAgICBzZXRTZWxl
Y3Rpb24oc2VsKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDQzLDcgKzI0NDMsNyBAQCBi
b29sIEZyYW1lOjpzZWxlY3RDb250ZW50c09mTm9kZShOb2RlSW1wCiAKIGJvb2wgRnJhbWU6OnNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZuZXdzZWxlY3Rp
b24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIE1hYyh0aGlzKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KGQtPm1fc2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24sIG5ld3NlbGVjdGlvbi5zdGFydEFmZmluaXR5
KCksIGZhbHNlKTsKKyAgICByZXR1cm4gTWFjKHRoaXMpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24o
ZC0+bV9zZWxlY3Rpb24sIG5ld3NlbGVjdGlvbiwgbmV3c2VsZWN0aW9uLmFmZmluaXR5KCksIGZh
bHNlKTsKIH0KIAogYm9vbCBGcmFtZTo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFJhbmdlSW1w
bCAqcmFuZ2UpIGNvbnN0CkBAIC0yNjkzLDcgKzI2OTMsNyBAQCB2b2lkIEZyYW1lOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUoQ1NTCiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVmKCk7CiAgICAg
fQogCi0gICAgTm9kZUltcGwgKm5vZGUgPSBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3Rh
cnQoKSwgc2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUo
KTsKKyAgICBOb2RlSW1wbCAqbm9kZSA9IFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFy
dCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKICAg
ICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsIGNvbXB1dGVkU3R5bGUobm9kZSk7CiAg
ICAgY29tcHV0ZWRTdHlsZS5kaWZmKG11dGFibGVTdHlsZSk7CiAgICAgCkBAIC0yNzE1LDE0ICsy
NzE1LDE0IEBAIHZvaWQgRnJhbWU6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1MKIHZvaWQg
RnJhbWU6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBFZGl0QWN0
aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0ZSgpKSB7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Tk9ORToKKyAgICAgICAgY2FzZSBr
aHRtbDo6U2VsZWN0aW9uOjpOT05FOgogICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q0FSRVQ6IHsK
KyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpDQVJFVDogewogICAgICAgICAgICAgY29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFO
R0U6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6UkFOR0U6CiAgICAgICAgICAgICBp
ZiAoeG1sRG9jSW1wbCgpICYmIHN0eWxlKSB7CiAgICAgICAgICAgICAgICAgRWRpdENvbW1hbmRQ
dHIgY21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZCh4bWxEb2NJbXBsKCksIHN0eWxlLCBlZGl0aW5n
QWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgY21kLmFwcGx5KCk7CkBAIC0yNzM0LDExICsyNzM0
LDExIEBAIHZvaWQgRnJhbWU6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGkKIHZvaWQgRnJh
bWU6OmFwcGx5UGFyYWdyYXBoU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0
ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Tk9ORToKKyAgICAgICAg
Y2FzZSBraHRtbDo6U2VsZWN0aW9uOjpOT05FOgogICAgICAgICAgICAgLy8gZG8gbm90aGluZwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q0FS
RVQ6Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFOR0U6CisgICAgICAgIGNh
c2Uga2h0bWw6OlNlbGVjdGlvbjo6Q0FSRVQ6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlv
bjo6UkFOR0U6CiAgICAgICAgICAgICBpZiAoeG1sRG9jSW1wbCgpICYmIHN0eWxlKSB7CiAgICAg
ICAgICAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZCh4bWxE
b2NJbXBsKCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VC
bG9ja1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgICAgICBjbWQuYXBwbHkoKTsKQEAgLTMwNjIs
OSArMzA2Miw5IEBAIHZvaWQgRnJhbWU6OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWYKICAg
ICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIHRoZSBlbnRpcmUgZnJhbWUgY29u
dGVudHM7IGlmIG5vdCwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgogICAgIGlmICghZC0+
bV9zZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1N0YXJ0
T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9z
ZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpKSkpCisgICAgaWYgKCFpc1N0YXJ0T2ZEb2N1bWVudChW
aXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9zZWxlY3Rpb24uYWZm
aW5pdHkoKSkpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0VuZE9mRG9jdW1lbnQoVmlz
aWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0aW9uLmVuZCgpLCBkLT5tX3NlbGVjdGlvbi5lbmRBZmZp
bml0eSgpKSkpCisgICAgaWYgKCFpc0VuZE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKGQtPm1f
c2VsZWN0aW9uLmVuZCgpLCBkLT5tX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEdldCB0byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAob3IgZXZlbiA8
b2JqZWN0PikgZWxlbWVudCBpbiB0aGUgcGFyZW50IGZyYW1lLgpAQCAtMzIzNSwxNCArMzIzNSwx
NCBAQCB2b2lkIEZyYW1lOjpyZXZlYWxTZWxlY3Rpb24oKQogICAgIFFSZWN0IHJlY3Q7CiAgICAg
CiAgICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0
aW9uQ29udHJvbGxlcjo6Tk9ORToKKyAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpOT05F
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU2VsZWN0
aW9uQ29udHJvbGxlcjo6Q0FSRVQ6CisgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Q0FS
RVQ6CiAgICAgICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCkuY2FyZXRSZWN0KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlJBTkdFOgorICAgICAgICBjYXNlIGtodG1sOjpTZWxlY3Rpb246OlJBTkdFOgogICAgICAg
ICAgICAgcmVjdCA9IHNlbGVjdGlvblJlY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTM2NTcsMTQgKzM2NTcsMTQgQEAgdm9pZCBGcmFtZTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNp
YmxlQXJlYQogICAgIFFSZWN0IHJlY3Q7CiAgICAgCiAgICAgc3dpdGNoIChzZWxlY3Rpb24oKS5z
dGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Tk9ORToKKyAgICAg
ICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpOT05FOgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q0FSRVQ6CisgICAg
ICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Q0FSRVQ6CiAgICAgICAgICAgICByZWN0ID0gc2Vs
ZWN0aW9uKCkuY2FyZXRSZWN0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJBTkdFOgorICAgICAgICBjYXNlIGto
dG1sOjpTZWxlY3Rpb246OlJBTkdFOgogICAgICAgICAgICAgcmVjdCA9IHNlbGVjdGlvblJlY3Qo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM2OTEsNyArMzY5MSw3IEBAIFJlbmRl
clN0eWxlICpGcmFtZTo6c3R5bGVGb3JTZWxlY3Rpb25TdGEKICAgICBpZiAoZC0+bV9zZWxlY3Rp
b24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIFBvc2l0aW9uIHBvcyA9
IFZpc2libGVQb3NpdGlvbihkLT5tX3NlbGVjdGlvbi5zdGFydCgpLCBkLT5tX3NlbGVjdGlvbi5z
dGFydEFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcG9zID0gVmlz
aWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCksIGQtPm1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgaWYgKCFwb3MuaW5SZW5kZXJlZENvbnRlbnQo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBwb3Mubm9kZSgpOwo=
</data>
<flag name="review"
          id="1262"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>