<?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>44080</bug_id>
          
          <creation_ts>2010-08-16 16:10:04 -0700</creation_ts>
          <short_desc>String find/reverseFind methods need tidying up</short_desc>
          <delta_ts>2010-08-17 04:11:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44099</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>265278</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-16 16:10:04 -0700</bug_when>
    <thetext>These methods have a couple of problems with their interface, and implementation.

These methods take and int index, and return an int – however this is problematic since on 64-bit string indices may have a full 32-bit range.  This spills out into surrounding code, which unsafely casts string indices from unsigned to int.  Code checking the result of these methods check for a mix of &quot;== -1&quot;, &quot;&lt; 0&quot;, and &quot;== notFound&quot;.  Clean this up by changing these methods to take an unsigned starting index, and return a size_t. with a failed match indicated by notFound.  reverseFind also has a special meaning for the starting index argument, in that a negative index is interpreted as an offset back from the end of the string.  Remove this functionality, in the (1!) case where it is used we should just calculate the offset by subtracting from the string&apos;s length.

The implementation has a few problems too.  The code is not in webkit style, in using assorted abbreviations in variable names, and implementations of similar find methods with differing argument types were unnecessarily inconsistent.  When find is passed const char* data the string would be handled as latin1 (zero extended to UTF-16) for all characters but the first; this is sign extended.  Case-insensitive find is broken for unicode strings; the hashing optimization is not unicode safe, and could result in false negatives.

Unify UString find methods to match String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265281</commentid>
    <comment_count>1</comment_count>
      <attachid>64531</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-16 16:14:13 -0700</bug_when>
    <thetext>Created attachment 64531
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265283</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 16:15:38 -0700</bug_when>
    <thetext>Attachment 64531 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/text/StringImpl.h:304:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/wtf/text/StringImpl.cpp:616:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/network/HTTPParsers.cpp:249:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/css/CSSStyleSelector.cpp:2127:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/LinkHash.cpp:99:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/LinkHash.cpp:100:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 6 in 56 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265286</commentid>
    <comment_count>3</comment_count>
      <attachid>64531</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-16 16:20:44 -0700</bug_when>
    <thetext>Comment on attachment 64531
The patch

My only comment is that I think findCaseInsensitive should be renamed findIgnoringCase to match equalIgnoringCase (same for the reverse find case). Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265308</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-16 17:26:38 -0700</bug_when>
    <thetext>fixed in r65468</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64531</attachid>
            <date>2010-08-16 16:14:13 -0700</date>
            <delta_ts>2010-08-16 16:20:44 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>find.patch</filename>
            <type>text/plain</type>
            <size>107089</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1NDY2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTAtMDgtMTYgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIEJ1ZyA0NDA4MCAt
IFN0cmluZyBmaW5kL3JldmVyc2VGaW5kIG1ldGhvZHMgbmVlZCB0aWR5aW5nIHVwCisgICAgICAg
IFRoZXNlIG1ldGhvZHMgaGF2ZSBhIGNvdXBsZSBvZiBwcm9ibGVtcyB3aXRoIHRoZWlyIGludGVy
ZmFjZSwgYW5kIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoZXNlIG1ldGhvZHMgdGFrZSBh
bmQgaW50IGluZGV4LCBhbmQgcmV0dXJuIGFuIGludCDigJMgaG93ZXZlciB0aGlzIGlzIHByb2Js
ZW1hdGljCisgICAgICAgIHNpbmNlIG9uIDY0LWJpdCBzdHJpbmcgaW5kaWNlcyBtYXkgaGF2ZSBh
IGZ1bGwgMzItYml0IHJhbmdlLiAgVGhpcyBzcGlsbHMgb3V0IGludG8KKyAgICAgICAgc3Vycm91
bmRpbmcgY29kZSwgd2hpY2ggdW5zYWZlbHkgY2FzdHMgc3RyaW5nIGluZGljZXMgZnJvbSB1bnNp
Z25lZCB0byBpbnQuIENvZGUKKyAgICAgICAgY2hlY2tpbmcgdGhlIHJlc3VsdCBvZiB0aGVzZSBt
ZXRob2RzIGNoZWNrIGZvciBhIG1peCBvZiAiPT0gLTEiLCAiPCAwIiwgYW5kCisgICAgICAgICI9
PSBub3RGb3VuZCIuICBDbGVhbiB0aGlzIHVwIGJ5IGNoYW5naW5nIHRoZXNlIG1ldGhvZHMgdG8g
dGFrZSBhbiB1bnNpZ25lZAorICAgICAgICBzdGFydGluZyBpbmRleCwgYW5kIHJldHVybiBhIHNp
emVfdC4gd2l0aCBhIGZhaWxlZCBtYXRjaCBpbmRpY2F0ZWQgYnkgbm90Rm91bmQuCisgICAgICAg
IHJldmVyc2VGaW5kIGFsc28gaGFzIGEgc3BlY2lhbCBtZWFuaW5nIGZvciB0aGUgc3RhcnRpbmcg
aW5kZXggYXJndW1lbnQsIGluIHRoYXQgYQorICAgICAgICBuZWdhdGl2ZSBpbmRleCBpcyBpbnRl
cnByZXRlZCBhcyBhbiBvZmZzZXQgYmFjayBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gUmVt
b3ZlCisgICAgICAgIHRoaXMgZnVuY3Rpb25hbGl0eSwgaW4gdGhlICgxISkgY2FzZSB3aGVyZSBp
dCBpcyB1c2VkIHdlIHNob3VsZCBqdXN0IGNhbGN1bGF0ZSB0aGUKKyAgICAgICAgb2Zmc2V0IGJ5
IHN1YnRyYWN0aW5nIGZyb20gdGhlIHN0cmluZydzIGxlbmd0aC4KKworICAgICAgICBUaGUgaW1w
bGVtZW50YXRpb24gaGFzIGEgZmV3IHByb2JsZW1zIHRvby4gIFRoZSBjb2RlIGlzIG5vdCBpbiB3
ZWJraXQgc3R5bGUsIGluCisgICAgICAgIHVzaW5nIGFzc29ydGVkIGFiYnJldmlhdGlvbnMgaW4g
dmFyaWFibGUgbmFtZXMsIGFuZCBpbXBsZW1lbnRhdGlvbnMgb2Ygc2ltaWxhcgorICAgICAgICBm
aW5kIG1ldGhvZHMgd2l0aCBkaWZmZXJpbmcgYXJndW1lbnQgdHlwZXMgd2VyZSB1bm5lY2Vzc2Fy
aWx5IGluY29uc2lzdGVudC4gV2hlbgorICAgICAgICBmaW5kIGlzIHBhc3NlZCBjb25zdCBjaGFy
KiBkYXRhIHRoZSBzdHJpbmcgd291bGQgYmUgaGFuZGxlZCBhcyBsYXRpbjEgKHplcm8KKyAgICAg
ICAgZXh0ZW5kZWQgdG8gVVRGLTE2KSBmb3IgYWxsIGNoYXJhY3RlcnMgYnV0IHRoZSBmaXJzdDsg
dGhpcyBpcyBzaWduIGV4dGVuZGVkLgorICAgICAgICBDYXNlLWluc2Vuc2l0aXZlIGZpbmQgaXMg
YnJva2VuIGZvciB1bmljb2RlIHN0cmluZ3M7IHRoZSBoYXNoaW5nIG9wdGltaXphdGlvbiBpcwor
ICAgICAgICBub3QgdW5pY29kZSBzYWZlLCBhbmQgY291bGQgcmVzdWx0IGluIGZhbHNlIG5lZ2F0
aXZlcy4KKworICAgICAgICBVbmlmeSBVU3RyaW5nIGZpbmQgbWV0aG9kcyB0byBtYXRjaCBTdHJp
bmcuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6ZXNjYXBlUXVvdGVzKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6c3Vic3RpdHV0ZSk6
CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
OjpyZXBsYWNlQ2hhcmFjdGVyKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cDo6UmVnRXhwKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cEtleS5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBLZXk6OmdldEZsYWdzVmFsdWUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3Vic3RpdHV0ZUJhY2ty
ZWZlcmVuY2VzU2xvdyk6CisgICAgICAgIChKU0M6OnN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFz
dEluZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAg
ICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6ZmluZCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OnJldmVy
c2VGaW5kKToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuaDoKKyAgICAgICAgKFdU
Rjo6QXRvbWljU3RyaW5nOjpmaW5kKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmluZCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OmZpbmRDYXNlSW5zZW5zaXRpdmUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpy
ZXZlcnNlRmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJldmVyc2VGaW5kQ2FzZUlu
c2Vuc2l0aXZlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZW5kc1dpdGgpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJ
bXBsLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnN0YXJ0c1dpdGgpOgorICAgICAgICAq
IHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6c3BsaXQpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZp
bmQpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnJldmVyc2VGaW5kKToKKyAgICAgICAgKFdURjo6
U3RyaW5nOjpmaW5kQ2FzZUluc2Vuc2l0aXZlKToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpyZXZl
cnNlRmluZENhc2VJbnNlbnNpdGl2ZSk6CisgICAgICAgIChXVEY6OlN0cmluZzo6Y29udGFpbnMp
OgorICAgICAgICAoV1RGOjpmaW5kKToKKyAgICAgICAgKFdURjo6cmV2ZXJzZUZpbmQpOgorCiAy
MDEwLTA4LTE2ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAg
ICAgICAgIFt3eF0gQnVpbGQgZml4LCBkbyBub3QgYnVpbGQgV2ViQ29yZSBhcyBhIGNvbnZlbmll
bmNlIGxpYnJhcnkgYXMgdGhpcyBsZWFkcyB0bwpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAkocmV2aXNpb24gNjU0NjUpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5l
eHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSwxOSArMzE5LDIyIEBAIF9fWk4zSlNDOWNvbnN0cnVj
dEVQTlNfOUV4ZWNTdGF0ZUVOU183SlMKIF9fWk4zSlNDZXFFUktOU183VVN0cmluZ0VQS2MKIF9f
Wk4zSlNDZ3RFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VTMl8K
LV9fWk4zV1RGMTBTdHJpbmdJbXBsMTFyZXZlcnNlRmluZEVQUzBfaWIKLV9fWk4zV1RGMTBTdHJp
bmdJbXBsMTFyZXZlcnNlRmluZEV0aQorX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VGaW5k
RVBTMF9qCitfX1pOM1dURjEwU3RyaW5nSW1wbDExcmV2ZXJzZUZpbmRFdGoKIF9fWk4zV1RGMTBT
dHJpbmdJbXBsMTJzaGFyZWRCdWZmZXJFdgogX19aTjNXVEYxMFN0cmluZ0ltcGwxOHNpbXBsaWZ5
V2hpdGVTcGFjZUV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDE5Y2hhcmFjdGVyU3RhcnRpbmdBdEVq
CiBfX1pOM1dURjEwU3RyaW5nSW1wbDE5Y3JlYXRlVW5pbml0aWFsaXplZEVqUlB0CitfX1pOM1dU
RjEwU3RyaW5nSW1wbDE5ZmluZENhc2VJbnNlbnNpdGl2ZUVQS2NqCitfX1pOM1dURjEwU3RyaW5n
SW1wbDE5ZmluZENhc2VJbnNlbnNpdGl2ZUVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGwyMmNv
bnRhaW5zT25seVdoaXRlc3BhY2VFdgogX19aTjNXVEYxMFN0cmluZ0ltcGwyM2RlZmF1bHRXcml0
aW5nRGlyZWN0aW9uRXYKK19fWk4zV1RGMTBTdHJpbmdJbXBsMjZyZXZlcnNlRmluZENhc2VJbnNl
bnNpdGl2ZUVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGwzN2NyZWF0ZVN0cmlwcGluZ051bGxD
aGFyYWN0ZXJzU2xvd0Nhc2VFUEt0agotX19aTjNXVEYxMFN0cmluZ0ltcGw0ZmluZEVQRmJ0RWkK
LV9fWk4zV1RGMTBTdHJpbmdJbXBsNGZpbmRFUEtjaWIKLV9fWk4zV1RGMTBTdHJpbmdJbXBsNGZp
bmRFUFMwX2liCi1fX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRXRpCitfX1pOM1dURjEwU3RyaW5n
SW1wbDRmaW5kRVBGYnRFagorX19aTjNXVEYxMFN0cmluZ0ltcGw0ZmluZEVQS2NqCitfX1pOM1dU
RjEwU3RyaW5nSW1wbDRmaW5kRVBTMF9qCitfX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRXRqCiBf
X1pOM1dURjEwU3RyaW5nSW1wbDVhZG9wdEVSTlNfMTJTdHJpbmdCdWZmZXJFCiBfX1pOM1dURjEw
U3RyaW5nSW1wbDVlbXB0eUV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDVsb3dlckV2CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
OCArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBVU3RyaW5nIGVzY2FwZVF1b3Rlcyhj
b25zdCBVU3RyaW5nJiBzdHIpCiB7CiAgICAgVVN0cmluZyByZXN1bHQgPSBzdHI7Ci0gICAgdW5z
aWduZWQgcG9zID0gMDsKLSAgICB3aGlsZSAoKHBvcyA9IHJlc3VsdC5maW5kKCdcIicsIHBvcykp
ICE9IFVTdHJpbmc6Ok5vdEZvdW5kKSB7CisgICAgc2l6ZV90IHBvcyA9IDA7CisgICAgd2hpbGUg
KChwb3MgPSByZXN1bHQuZmluZCgnXCInLCBwb3MpKSAhPSBub3RGb3VuZCkgewogICAgICAgICBy
ZXN1bHQgPSBtYWtlU3RyaW5nKHJlc3VsdC5zdWJzdHIoMCwgcG9zKSwgIlwiXFxcIlwiIiwgcmVz
dWx0LnN1YnN0cihwb3MgKyAxKSk7CiAgICAgICAgIHBvcyArPSA0OwogICAgIH0KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiA2
NTQ2NSkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMg
dm9pZCBzdWJzdGl0dXRlKFVTdHJpbmcmIHN0cmluZywgY29uc3QgVVN0cmluZyYgc3Vic3RyaW5n
KQogewotICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gc3RyaW5nLmZpbmQoIiVzIik7Ci0gICAgQVNT
RVJUKHBvc2l0aW9uICE9IFVTdHJpbmc6Ok5vdEZvdW5kKTsKKyAgICBzaXplX3QgcG9zaXRpb24g
PSBzdHJpbmcuZmluZCgiJXMiKTsKKyAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwog
ICAgIHN0cmluZyA9IG1ha2VTdHJpbmcoc3RyaW5nLnN1YnN0cigwLCBwb3NpdGlvbiksIHN1YnN0
cmluZywgc3RyaW5nLnN1YnN0cihwb3NpdGlvbiArIDIpKTsKIH0KIApJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsOCBAQCB2
b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4CiBKU1ZhbHVlIEpTU3RyaW5n
OjpyZXBsYWNlQ2hhcmFjdGVyKEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgY2hhcmFjdGVyLCBjb25z
dCBVU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKICAgICBpZiAoIWlzUm9wZSgpKSB7Ci0gICAgICAg
IHVuc2lnbmVkIG1hdGNoUG9zaXRpb24gPSBtX3ZhbHVlLmZpbmQoY2hhcmFjdGVyKTsKLSAgICAg
ICAgaWYgKG1hdGNoUG9zaXRpb24gPT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgIHNpemVf
dCBtYXRjaFBvc2l0aW9uID0gbV92YWx1ZS5maW5kKGNoYXJhY3Rlcik7CisgICAgICAgIGlmICht
YXRjaFBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUodGhp
cyk7CiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBtX3ZhbHVlLnN1YnN0cigwLCBtYXRj
aFBvc2l0aW9uKSwgcmVwbGFjZW1lbnQsIG1fdmFsdWUuc3Vic3RyKG1hdGNoUG9zaXRpb24gKyAx
KSk7CiAgICAgfQpAQCAtMTE5LDcgKzExOSw3IEBAIEpTVmFsdWUgSlNTdHJpbmc6OnJlcGxhY2VD
aGFyYWN0ZXIoRXhlY1MKICAgICAvLyBDb3VudCB0b3RhbCBmaWJlcnMgYW5kIGZpbmQgbWF0Y2hp
bmcgc3RyaW5nLgogICAgIHNpemVfdCBmaWJlckNvdW50ID0gMDsKICAgICBTdHJpbmdJbXBsKiBt
YXRjaFN0cmluZyA9IDA7Ci0gICAgaW50IG1hdGNoUG9zaXRpb24gPSAtMTsKKyAgICBzaXplX3Qg
bWF0Y2hQb3NpdGlvbiA9IG5vdEZvdW5kOwogICAgIGZvciAoUm9wZUl0ZXJhdG9yIGl0KG1fb3Ro
ZXIubV9maWJlcnMuZGF0YSgpLCBtX2ZpYmVyQ291bnQpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgKytmaWJlckNvdW50OwogICAgICAgICBpZiAobWF0Y2hTdHJpbmcpCkBAIC0xMjcsNyAr
MTI3LDcgQEAgSlNWYWx1ZSBKU1N0cmluZzo6cmVwbGFjZUNoYXJhY3RlcihFeGVjUwogCiAgICAg
ICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9ICppdDsKICAgICAgICAgbWF0Y2hQb3NpdGlvbiA9IHN0
cmluZy0+ZmluZChjaGFyYWN0ZXIpOwotICAgICAgICBpZiAobWF0Y2hQb3NpdGlvbiA9PSAtMSkK
KyAgICAgICAgaWYgKG1hdGNoUG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgbWF0Y2hTdHJpbmcgPSBzdHJpbmc7CiAgICAgfQpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwLmNwcAkocmV2aXNpb24gNjU0NjUpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDExICs1NiwxMSBAQCBpbmxp
bmUgUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9iCiAgICAgLy8gTk9URTogVGhlIGds
b2JhbCBmbGFnIGlzIGhhbmRsZWQgb24gYSBjYXNlLWJ5LWNhc2UgYmFzaXMgYnkgZnVuY3Rpb25z
IGxpa2UKICAgICAvLyBTdHJpbmc6Om1hdGNoIGFuZCBSZWdFeHBPYmplY3Q6Om1hdGNoLgogICAg
IGlmICghZmxhZ3MuaXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKGZsYWdzLmZpbmQoJ2cnKSAhPSBV
U3RyaW5nOjpOb3RGb3VuZCkKKyAgICAgICAgaWYgKGZsYWdzLmZpbmQoJ2cnKSAhPSBub3RGb3Vu
ZCkKICAgICAgICAgICAgIG1fZmxhZ0JpdHMgfD0gR2xvYmFsOwotICAgICAgICBpZiAoZmxhZ3Mu
ZmluZCgnaScpICE9IFVTdHJpbmc6Ok5vdEZvdW5kKQorICAgICAgICBpZiAoZmxhZ3MuZmluZCgn
aScpICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgbV9mbGFnQml0cyB8PSBJZ25vcmVDYXNlOwot
ICAgICAgICBpZiAoZmxhZ3MuZmluZCgnbScpICE9IFVTdHJpbmc6Ok5vdEZvdW5kKQorICAgICAg
ICBpZiAoZmxhZ3MuZmluZCgnbScpICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgbV9mbGFnQml0
cyB8PSBNdWx0aWxpbmU7CiAgICAgfQogICAgIGNvbXBpbGUoZ2xvYmFsRGF0YSk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDY1NDY1KQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTEgKzczLDEx
IEBAIHN0cnVjdCBSZWdFeHBLZXkgewogICAgIGludCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJp
bmcgZmxhZ3MpIAogICAgIHsKICAgICAgICAgZmxhZ3NWYWx1ZSA9IDA7Ci0gICAgICAgIGlmIChm
bGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgIGlmIChmbGFncy5m
aW5kKCdnJykgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7Ci0gICAg
ICAgIGlmIChmbGFncy5maW5kKCdpJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgIGlm
IChmbGFncy5maW5kKCdpJykgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICBmbGFnc1ZhbHVlICs9
IDI7Ci0gICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisg
ICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICBmbGFn
c1ZhbHVlICs9IDE7CiAgICAgICAgIHJldHVybiBmbGFnc1ZhbHVlOwogICAgIH0KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDY1NDY1
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgYm9vbCBTdHJpbmdQcm90b3R5cGU6OmdldE93blBy
b3BlcnR5RGVzYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25z
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgVVN0cmlu
ZyBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXNTbG93KGNvbnN0IFVTdHJpbmcmIHJlcGxhY2VtZW50
LCBjb25zdCBVU3RyaW5nJiBzb3VyY2UsIGNvbnN0IGludCogb3ZlY3RvciwgUmVnRXhwKiByZWcs
IHVuc2lnbmVkIGkpCitzdGF0aWMgTkVWRVJfSU5MSU5FIFVTdHJpbmcgc3Vic3RpdHV0ZUJhY2ty
ZWZlcmVuY2VzU2xvdyhjb25zdCBVU3RyaW5nJiByZXBsYWNlbWVudCwgY29uc3QgVVN0cmluZyYg
c291cmNlLCBjb25zdCBpbnQqIG92ZWN0b3IsIFJlZ0V4cCogcmVnLCBzaXplX3QgaSkKIHsKICAg
ICBWZWN0b3I8VUNoYXI+IHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQ7CiAgICAgaW50IG9mZnNldCA9
IDA7CkBAIC0yMDcsNyArMjA3LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBVU3RyaW5nIHN1YnN0
aXR1dGVCYQogICAgICAgICBpICs9IDEgKyBhZHZhbmNlOwogICAgICAgICBvZmZzZXQgPSBpICsg
MTsKICAgICAgICAgc3Vic3RpdHV0ZWRSZXBsYWNlbWVudC5hcHBlbmQoc291cmNlLmNoYXJhY3Rl
cnMoKSArIGJhY2tyZWZTdGFydCwgYmFja3JlZkxlbmd0aCk7Ci0gICAgfSB3aGlsZSAoKGkgPSBy
ZXBsYWNlbWVudC5maW5kKCckJywgaSArIDEpKSAhPSBVU3RyaW5nOjpOb3RGb3VuZCk7CisgICAg
fSB3aGlsZSAoKGkgPSByZXBsYWNlbWVudC5maW5kKCckJywgaSArIDEpKSAhPSBub3RGb3VuZCk7
CiAKICAgICBpZiAocmVwbGFjZW1lbnQubGVuZ3RoKCkgLSBvZmZzZXQpCiAgICAgICAgIHN1YnN0
aXR1dGVkUmVwbGFjZW1lbnQuYXBwZW5kKHJlcGxhY2VtZW50LmNoYXJhY3RlcnMoKSArIG9mZnNl
dCwgcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSBvZmZzZXQpOwpAQCAtMjE4LDggKzIxOCw4IEBAIHN0
YXRpYyBORVZFUl9JTkxJTkUgVVN0cmluZyBzdWJzdGl0dXRlQmEKIAogc3RhdGljIGlubGluZSBV
U3RyaW5nIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyhjb25zdCBVU3RyaW5nJiByZXBsYWNlbWVu
dCwgY29uc3QgVVN0cmluZyYgc291cmNlLCBjb25zdCBpbnQqIG92ZWN0b3IsIFJlZ0V4cCogcmVn
KQogewotICAgIHVuc2lnbmVkIGkgPSByZXBsYWNlbWVudC5maW5kKCckJywgMCk7Ci0gICAgaWYg
KFVOTElLRUxZKGkgIT0gVVN0cmluZzo6Tm90Rm91bmQpKQorICAgIHNpemVfdCBpID0gcmVwbGFj
ZW1lbnQuZmluZCgnJCcsIDApOworICAgIGlmIChVTkxJS0VMWShpICE9IG5vdEZvdW5kKSkKICAg
ICAgICAgcmV0dXJuIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlc1Nsb3cocmVwbGFjZW1lbnQsIHNv
dXJjZSwgb3ZlY3RvciwgcmVnLCBpKTsKICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiB9CkBAIC00
MjksOSArNDI5LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNvdXJjZVZhbC0+cmVwbGFjZUNoYXJhY3Rl
cihleGVjLCBwYXR0ZXJuU3RyaW5nWzBdLCByZXBsYWNlbWVudFN0cmluZykpOwogICAgIAogICAg
IGNvbnN0IFVTdHJpbmcmIHNvdXJjZSA9IHNvdXJjZVZhbC0+dmFsdWUoZXhlYyk7Ci0gICAgdW5z
aWduZWQgbWF0Y2hQb3MgPSBzb3VyY2UuZmluZChwYXR0ZXJuU3RyaW5nKTsKKyAgICBzaXplX3Qg
bWF0Y2hQb3MgPSBzb3VyY2UuZmluZChwYXR0ZXJuU3RyaW5nKTsKIAotICAgIGlmIChtYXRjaFBv
cyA9PSBVU3RyaW5nOjpOb3RGb3VuZCkKKyAgICBpZiAobWF0Y2hQb3MgPT0gbm90Rm91bmQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc291cmNlVmFsKTsKIAogICAgIGludCBtYXRj
aExlbiA9IHBhdHRlcm5TdHJpbmcubGVuZ3RoKCk7CkBAIC01NDIsOCArNTQyLDggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICBwb3MgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGRwb3MpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHJlc3VsdCA9IHMuZmluZCh1
MiwgcG9zKTsKLSAgICBpZiAocmVzdWx0ID09IFVTdHJpbmc6Ok5vdEZvdW5kKQorICAgIHNpemVf
dCByZXN1bHQgPSBzLmZpbmQodTIsIHBvcyk7CisgICAgaWYgKHJlc3VsdCA9PSBub3RGb3VuZCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihleGVjLCAtMSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZXhlYywgcmVzdWx0KSk7CiB9CkBAIC01
NzEsOCArNTcxLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgICAgICBkcG9zID0gbGVuOwogI2VuZGlmCiAKLSAgICB1bnNpZ25lZCByZXN1bHQgPSBzLnJm
aW5kKHUyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZHBvcykpOwotICAgIGlmIChyZXN1bHQgPT0g
VVN0cmluZzo6Tm90Rm91bmQpCisgICAgc2l6ZV90IHJlc3VsdCA9IHMucmV2ZXJzZUZpbmQodTIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkcG9zKSk7CisgICAgaWYgKHJlc3VsdCA9PSBub3RGb3Vu
ZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihleGVjLCAtMSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZXhlYywgcmVzdWx0KSk7CiB9CkBA
IC03MzYsOSArNzM2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgICAgICAgICAgd2hpbGUgKGkgIT0gbGltaXQgJiYgcDAgPCBzLmxlbmd0aCgpIC0gMSkK
ICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dChleGVjLCBpKyssIGpzU2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nKGV4ZWMsIHMsIHAwKyspKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHBvczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgd2hpbGUgKGkgIT0gbGlt
aXQgJiYgKHBvcyA9IHMuZmluZCh1MiwgcDApKSAhPSBVU3RyaW5nOjpOb3RGb3VuZCkgeworICAg
ICAgICAgICAgc2l6ZV90IHBvczsKKyAgICAgICAgICAgIHdoaWxlIChpICE9IGxpbWl0ICYmIChw
b3MgPSBzLmZpbmQodTIsIHAwKSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgICAgICByZXN1
bHQtPnB1dChleGVjLCBpKyssIGpzU3Vic3RyaW5nKGV4ZWMsIHMsIHAwLCBwb3MgLSBwMCkpOwog
ICAgICAgICAgICAgICAgIHAwID0gcG9zICsgdTIubGVuZ3RoKCk7CiAgICAgICAgICAgICB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDgz
ICs0MTMsNiBAQCB1aW50MzJfdCBVU3RyaW5nOjp0b1N0cmljdFVJbnQzMihib29sKiBvCiAgICAg
fQogfQogCi11bnNpZ25lZCBVU3RyaW5nOjpmaW5kKGNvbnN0IFVTdHJpbmcmIGYsIHVuc2lnbmVk
IHBvcykgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBmc3ogPSBmLmxlbmd0aCgpOwotCi0gICAgaWYg
KGZzeiA9PSAxKSB7Ci0gICAgICAgIFVDaGFyIGNoID0gZlswXTsKLSAgICAgICAgY29uc3QgVUNo
YXIqIGVuZCA9IGNoYXJhY3RlcnMoKSArIGxlbmd0aCgpOwotICAgICAgICBmb3IgKGNvbnN0IFVD
aGFyKiBjID0gY2hhcmFjdGVycygpICsgcG9zOyBjIDwgZW5kOyBjKyspIHsKLSAgICAgICAgICAg
IGlmICgqYyA9PSBjaCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGMgLSBjaGFyYWN0ZXJzKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb3RGb3Vu
ZDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzeiA9IGxlbmd0aCgpOwotICAgIGlmIChzeiA8IGZz
eikKLSAgICAgICAgcmV0dXJuIE5vdEZvdW5kOwotICAgIGlmIChmc3ogPT0gMCkKLSAgICAgICAg
cmV0dXJuIHBvczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycygpICsgc3ogLSBm
c3o7Ci0gICAgdW5zaWduZWQgZnNpemVtaW51c29uZSA9IChmc3ogLSAxKSAqIHNpemVvZihVQ2hh
cik7Ci0gICAgY29uc3QgVUNoYXIqIGZkYXRhID0gZi5jaGFyYWN0ZXJzKCk7Ci0gICAgdW5zaWdu
ZWQgc2hvcnQgZmNoYXIgPSBmZGF0YVswXTsKLSAgICArK2ZkYXRhOwotICAgIGZvciAoY29uc3Qg
VUNoYXIqIGMgPSBjaGFyYWN0ZXJzKCkgKyBwb3M7IGMgPD0gZW5kOyBjKyspIHsKLSAgICAgICAg
aWYgKGNbMF0gPT0gZmNoYXIgJiYgIW1lbWNtcChjICsgMSwgZmRhdGEsIGZzaXplbWludXNvbmUp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjIC0gY2hhcmFjdGVy
cygpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTm90Rm91bmQ7Ci19Ci0KLXVuc2lnbmVkIFVTdHJp
bmc6OmZpbmQoVUNoYXIgY2gsIHVuc2lnbmVkIHBvcykgY29uc3QKLXsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gY2hhcmFjdGVycygpICsgbGVuZ3RoKCk7Ci0gICAgZm9yIChjb25zdCBVQ2hhciog
YyA9IGNoYXJhY3RlcnMoKSArIHBvczsgYyA8IGVuZDsgYysrKSB7Ci0gICAgICAgIGlmICgqYyA9
PSBjaCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyAtIGNoYXJh
Y3RlcnMoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5vdEZvdW5kOwotfQotCi11bnNpZ25lZCBV
U3RyaW5nOjpyZmluZChjb25zdCBVU3RyaW5nJiBmLCB1bnNpZ25lZCBwb3MpIGNvbnN0Ci17Ci0g
ICAgdW5zaWduZWQgc3ogPSBsZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBmc3ogPSBmLmxlbmd0aCgp
OwotICAgIGlmIChzeiA8IGZzeikKLSAgICAgICAgcmV0dXJuIE5vdEZvdW5kOwotICAgIGlmIChw
b3MgPiBzeiAtIGZzeikKLSAgICAgICAgcG9zID0gc3ogLSBmc3o7Ci0gICAgaWYgKGZzeiA9PSAw
KQotICAgICAgICByZXR1cm4gcG9zOwotICAgIHVuc2lnbmVkIGZzaXplbWludXNvbmUgPSAoZnN6
IC0gMSkgKiBzaXplb2YoVUNoYXIpOwotICAgIGNvbnN0IFVDaGFyKiBmZGF0YSA9IGYuY2hhcmFj
dGVycygpOwotICAgIGZvciAoY29uc3QgVUNoYXIqIGMgPSBjaGFyYWN0ZXJzKCkgKyBwb3M7IGMg
Pj0gY2hhcmFjdGVycygpOyBjLS0pIHsKLSAgICAgICAgaWYgKCpjID09ICpmZGF0YSAmJiAhbWVt
Y21wKGMgKyAxLCBmZGF0YSArIDEsIGZzaXplbWludXNvbmUpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjIC0gY2hhcmFjdGVycygpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gTm90Rm91bmQ7Ci19Ci0KLXVuc2lnbmVkIFVTdHJpbmc6OnJmaW5kKFVDaGFyIGNoLCB1
bnNpZ25lZCBwb3MpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IE5vdEZvdW5kOwotICAgIGlmIChwb3MgKyAxID49IGxlbmd0aCgpKQotICAgICAgICBwb3MgPSBs
ZW5ndGgoKSAtIDE7Ci0gICAgZm9yIChjb25zdCBVQ2hhciogYyA9IGNoYXJhY3RlcnMoKSArIHBv
czsgYyA+PSBjaGFyYWN0ZXJzKCk7IGMtLSkgewotICAgICAgICBpZiAoKmMgPT0gY2gpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgLSBjaGFyYWN0ZXJzKCkpOwot
ICAgIH0KLQotICAgIHJldHVybiBOb3RGb3VuZDsKLX0KLQogVVN0cmluZyBVU3RyaW5nOjpzdWJz
dHIodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcyA9
IGxlbmd0aCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgJKHJldmlzaW9uIDY1NDY1
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw3ICsxMDQsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBVU3RyaW5nIG51bWJlcihsb25n
IGxvbmcpOwogICAgIHN0YXRpYyBVU3RyaW5nIG51bWJlcihkb3VibGUpOwogCi0KKyAgICAvLyBG
aW5kIGEgc2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcsIGFsc28gd2l0aCBtYXRjaCBmdW5jdGlv
biAmIGxhdGluMSBmb3Jtcy4KKyAgICBzaXplX3QgZmluZChVQ2hhciBjLCB1bnNpZ25lZCBzdGFy
dCA9IDApIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChjLCBz
dGFydCkgOiBub3RGb3VuZDsgfQorICAgIHNpemVfdCBmaW5kKGNvbnN0IFVTdHJpbmcmIHN0ciwg
dW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2lt
cGwtPmZpbmQoc3RyLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3QgZmlu
ZChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKKyAgICAgICAgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ciwgc3RhcnQpIDogbm90Rm91bmQ7IH0KKwor
ICAgIC8vIEZpbmQgdGhlIGxhc3QgaW5zdGFuY2Ugb2YgYSBzaW5nbGUgY2hhcmFjdGVyIG9yIHN0
cmluZy4KKyAgICBzaXplX3QgcmV2ZXJzZUZpbmQoVUNoYXIgYywgdW5zaWduZWQgc3RhcnQgPSBV
SU5UX01BWCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5yZXZlcnNl
RmluZChjLCBzdGFydCkgOiBub3RGb3VuZDsgfQorICAgIHNpemVfdCByZXZlcnNlRmluZChjb25z
dCBVU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0CisgICAgICAg
IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoc3RyLmltcGwoKSwgc3RhcnQp
IDogbm90Rm91bmQ7IH0KIAogICAgIGRvdWJsZSB0b0RvdWJsZShib29sIHRvbGVyYXRlVHJhaWxp
bmdKdW5rLCBib29sIHRvbGVyYXRlRW1wdHlTdHJpbmcpIGNvbnN0OwogICAgIGRvdWJsZSB0b0Rv
dWJsZShib29sIHRvbGVyYXRlVHJhaWxpbmdKdW5rKSBjb25zdDsKQEAgLTExNCwxMyArMTI2LDcg
QEAgcHVibGljOgogICAgIHVpbnQzMl90IHRvVUludDMyKGJvb2wqIG9rLCBib29sIHRvbGVyYXRl
RW1wdHlTdHJpbmcpIGNvbnN0OwogICAgIHVpbnQzMl90IHRvU3RyaWN0VUludDMyKGJvb2wqIG9r
ID0gMCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTm90Rm91bmQgPSAweEZG
RkZGRkZGdTsKLSAgICB1bnNpZ25lZCBmaW5kKGNvbnN0IFVTdHJpbmcmIGYsIHVuc2lnbmVkIHBv
cyA9IDApIGNvbnN0OwotICAgIHVuc2lnbmVkIGZpbmQoVUNoYXIsIHVuc2lnbmVkIHBvcyA9IDAp
IGNvbnN0OwotICAgIHVuc2lnbmVkIHJmaW5kKGNvbnN0IFVTdHJpbmcmIGYsIHVuc2lnbmVkIHBv
cykgY29uc3Q7Ci0gICAgdW5zaWduZWQgcmZpbmQoVUNoYXIsIHVuc2lnbmVkIHBvcykgY29uc3Q7
Ci0KLSAgICBVU3RyaW5nIHN1YnN0cih1bnNpZ25lZCBwb3MgPSAwLCB1bnNpZ25lZCBsZW4gPSAw
eEZGRkZGRkZGKSBjb25zdDsKKyAgICBVU3RyaW5nIHN1YnN0cih1bnNpZ25lZCBwb3MgPSAwLCB1
bnNpZ25lZCBsZW4gPSBVSU5UX01BWCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG1faW1wbDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0F0b21pY1N0
cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oCShyZXZpc2lvbiA2NTQ2NSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0F0b21pY1N0
cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMCArNzEsMTAgQEAgcHVibGljOgogICAgIGJv
b2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBzLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBj
b25zdAogICAgICAgICB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzLCBjYXNlU2Vuc2l0aXZl
KTsgfQogCi0gICAgaW50IGZpbmQoVUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmcuZmluZChjLCBzdGFydCk7IH0KLSAgICBpbnQgZmluZChjb25zdCBjaGFyKiBz
LCBpbnQgc3RhcnQgPSAwLCBib29sIGNhc2VTZW50aXRpdmUgPSB0cnVlKSBjb25zdAorICAgIHNp
emVfdCBmaW5kKFVDaGFyIGMsIHNpemVfdCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLmZpbmQoYywgc3RhcnQpOyB9CisgICAgc2l6ZV90IGZpbmQoY29uc3QgY2hhciogcywgc2l6
ZV90IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2VudGl0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICAg
eyByZXR1cm4gbV9zdHJpbmcuZmluZChzLCBzdGFydCwgY2FzZVNlbnRpdGl2ZSk7IH0KLSAgICBp
bnQgZmluZChjb25zdCBTdHJpbmcmIHMsIGludCBzdGFydCA9IDAsIGJvb2wgY2FzZVNlbnRpdGl2
ZSA9IHRydWUpIGNvbnN0CisgICAgc2l6ZV90IGZpbmQoY29uc3QgU3RyaW5nJiBzLCBzaXplX3Qg
c3RhcnQgPSAwLCBib29sIGNhc2VTZW50aXRpdmUgPSB0cnVlKSBjb25zdAogICAgICAgICB7IHJl
dHVybiBtX3N0cmluZy5maW5kKHMsIHN0YXJ0LCBjYXNlU2VudGl0aXZlKTsgfQogICAgIAogICAg
IGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRy
dWUpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2
aXNpb24gNjU0NjUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDk4LDE3NSArNDk4LDIzNCBAQCBpbnQgY29kZVBvaW50Q29tcGFy
ZShjb25zdCBTdHJpbmdJbXBsKiBzCiAgICAgcmV0dXJuIChsMSA+IGwyKSA/IDEgOiAtMTsKIH0K
IAotaW50IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciogY2hzLCBpbnQgaW5kZXgsIGJvb2wg
Y2FzZVNlbnNpdGl2ZSkKLXsKLSAgICBpZiAoIWNocyB8fCBpbmRleCA8IDApCi0gICAgICAgIHJl
dHVybiAtMTsKLQotICAgIGludCBjaHNMZW5ndGggPSBzdHJsZW4oY2hzKTsKLSAgICBpbnQgbiA9
IG1fbGVuZ3RoIC0gaW5kZXg7Ci0gICAgaWYgKG4gPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgbiAtPSBjaHNMZW5ndGggLSAxOwotICAgIGlmIChuIDw9IDApCi0gICAgICAgIHJldHVybiAt
MTsKLQotICAgIGNvbnN0IGNoYXIqIGNoc1BsdXNPbmUgPSBjaHMgKyAxOwotICAgIGludCBjaHNM
ZW5ndGhNaW51c09uZSA9IGNoc0xlbmd0aCAtIDE7Ci0gICAgCi0gICAgY29uc3QgVUNoYXIqIHB0
ciA9IG1fZGF0YSArIGluZGV4IC0gMTsKLSAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewotICAgICAg
ICBVQ2hhciBjID0gKmNoczsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKCorK3B0ciA9
PSBjICYmIGVxdWFsKHB0ciArIDEsIGNoc1BsdXNPbmUsIGNoc0xlbmd0aE1pbnVzT25lKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9sZW5ndGggLSBjaHNMZW5ndGggLSBuICsgMTsKLSAgICAg
ICAgfSB3aGlsZSAoLS1uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBVQ2hhciBsYyA9IFVuaWNv
ZGU6OmZvbGRDYXNlKCpjaHMpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoVW5pY29k
ZTo6Zm9sZENhc2UoKisrcHRyKSA9PSBsYyAmJiBlcXVhbElnbm9yaW5nQ2FzZShwdHIgKyAxLCBj
aHNQbHVzT25lLCBjaHNMZW5ndGhNaW51c09uZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1f
bGVuZ3RoIC0gY2hzTGVuZ3RoIC0gbiArIDE7Ci0gICAgICAgIH0gd2hpbGUgKC0tbik7Ci0gICAg
fQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgU3RyaW5nSW1wbDo6ZmluZChVQ2hhciBjLCBp
bnQgc3RhcnQpCitzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChVQ2hhciBjLCB1bnNpZ25lZCBzdGFy
dCkKIHsKICAgICByZXR1cm4gV1RGOjpmaW5kKG1fZGF0YSwgbV9sZW5ndGgsIGMsIHN0YXJ0KTsK
IH0KIAotaW50IFN0cmluZ0ltcGw6OmZpbmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRj
aEZ1bmN0aW9uLCBpbnQgc3RhcnQpCitzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChDaGFyYWN0ZXJN
YXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIHN0YXJ0KQogewogICAgIHJl
dHVybiBXVEY6OmZpbmQobV9kYXRhLCBtX2xlbmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOwog
fQogCi1pbnQgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJbXBsKiBzdHIsIGludCBpbmRleCwgYm9v
bCBjYXNlU2Vuc2l0aXZlKQorc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciogbWF0
Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQogewotICAgIC8qCi0gICAgICBXZSB1c2UgYSBzaW1w
bGUgdHJpY2sgZm9yIGVmZmljaWVuY3kncyBzYWtlLiBJbnN0ZWFkIG9mCi0gICAgICBjb21wYXJp
bmcgc3RyaW5ncywgd2UgY29tcGFyZSB0aGUgc3VtIG9mIHN0ciB3aXRoIHRoYXQgb2YKLSAgICAg
IGEgcGFydCBvZiB0aGlzIHN0cmluZy4gT25seSBpZiB0aGF0IG1hdGNoZXMsIHdlIGNhbGwgbWVt
Y21wCi0gICAgICBvciB1Y3N0cm5pY21wLgotICAgICovCi0gICAgQVNTRVJUKHN0cik7Ci0gICAg
aWYgKGluZGV4IDwgMCkKLSAgICAgICAgaW5kZXggKz0gbV9sZW5ndGg7Ci0gICAgaW50IGxzdHIg
PSBzdHItPm1fbGVuZ3RoOwotICAgIGludCBsdGhpcyA9IG1fbGVuZ3RoIC0gaW5kZXg7Ci0gICAg
aWYgKCh1bnNpZ25lZClsdGhpcyA+IG1fbGVuZ3RoKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
aW50IGRlbHRhID0gbHRoaXMgLSBsc3RyOwotICAgIGlmIChkZWx0YSA8IDApCi0gICAgICAgIHJl
dHVybiAtMTsKLQotICAgIGNvbnN0IFVDaGFyKiB1dGhpcyA9IG1fZGF0YSArIGluZGV4OwotICAg
IGNvbnN0IFVDaGFyKiB1c3RyID0gc3RyLT5tX2RhdGE7Ci0gICAgdW5zaWduZWQgaHRoaXMgPSAw
OwotICAgIHVuc2lnbmVkIGhzdHIgPSAwOwotICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbHN0cjsgaSsrKSB7Ci0gICAgICAgICAgICBodGhpcyAr
PSB1dGhpc1tpXTsKLSAgICAgICAgICAgIGhzdHIgKz0gdXN0cltpXTsKLSAgICAgICAgfQotICAg
ICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBpZiAoaHRo
aXMgPT0gaHN0ciAmJiBtZW1jbXAodXRoaXMgKyBpLCB1c3RyLCBsc3RyICogc2l6ZW9mKFVDaGFy
KSkgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggKyBpOwotICAgICAgICAgICAg
aWYgKGkgPT0gZGVsdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAg
aHRoaXMgKz0gdXRoaXNbaSArIGxzdHJdOwotICAgICAgICAgICAgaHRoaXMgLT0gdXRoaXNbaV07
Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxzdHI7IGkrKyApIHsKLSAgICAgICAgICAgIGh0aGlzICs9IHRvQVND
SUlMb3dlcih1dGhpc1tpXSk7Ci0gICAgICAgICAgICBoc3RyICs9IHRvQVNDSUlMb3dlcih1c3Ry
W2ldKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlICgxKSB7
Ci0gICAgICAgICAgICBpZiAoaHRoaXMgPT0gaHN0ciAmJiBlcXVhbElnbm9yaW5nQ2FzZSh1dGhp
cyArIGksIHVzdHIsIGxzdHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCArIGk7Ci0g
ICAgICAgICAgICBpZiAoaSA9PSBkZWx0YSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgICAgICAgICBodGhpcyArPSB0b0FTQ0lJTG93ZXIodXRoaXNbaSArIGxzdHJdKTsKLSAgICAg
ICAgICAgIGh0aGlzIC09IHRvQVNDSUlMb3dlcih1dGhpc1tpXSk7Ci0gICAgICAgICAgICBpKys7
Ci0gICAgICAgIH0KKyAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8gbWF0
Y2ggYWdhaW5zdAorICAgIGlmICghbWF0Y2hTdHJpbmcpCisgICAgICAgIHJldHVybiBub3RGb3Vu
ZDsKKyAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IHN0cmxlbihtYXRjaFN0cmluZyk7CisgICAg
aWYgKCFtYXRjaExlbmd0aCkKKyAgICAgICAgcmV0dXJuIG1pbihpbmRleCwgbGVuZ3RoKCkpOwor
CisgICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGgg
MS4KKyAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkKKyAgICAgICAgcmV0dXJuIFdURjo6ZmluZChj
aGFyYWN0ZXJzKCksIGxlbmd0aCgpLCAqKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1hdGNoU3RyaW5n
LCBpbmRleCk7CisKKyAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBpbiByYW5n
ZS4KKyAgICBpZiAoaW5kZXggPiBsZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwor
ICAgIHVuc2lnbmVkIHNlYXJjaExlbmd0aCA9IGxlbmd0aCgpIC0gaW5kZXg7CisgICAgaWYgKG1h
dGNoTGVuZ3RoID4gc2VhcmNoTGVuZ3RoKQorICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAg
Ly8gZGVsdGEgaXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHRpbWVzIHRvIHRlc3Q7IGRlbHRh
ID09IDAgbWVhbnMgdGVzdCBvbmx5IG9uY2UuCisgICAgdW5zaWduZWQgZGVsdGEgPSBzZWFyY2hM
ZW5ndGggLSBtYXRjaExlbmd0aDsKKworICAgIGNvbnN0IFVDaGFyKiBzZWFyY2hDaGFyYWN0ZXJz
ID0gY2hhcmFjdGVycygpICsgaW5kZXg7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogbWF0Y2hD
aGFyYWN0ZXJzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1hdGNoU3RyaW5nOworCisgICAgLy8g
T3B0aW1pemF0aW9uIDI6IGtlZXAgYSBydW5uaW5nIGhhc2ggb2YgdGhlIHN0cmluZ3MsCisgICAg
Ly8gb25seSBjYWxsIG1lbWNtcCBpZiB0aGUgaGFzaGVzIG1hdGNoLgorICAgIHVuc2lnbmVkIHNl
YXJjaEhhc2ggPSAwOworICAgIHVuc2lnbmVkIG1hdGNoSGFzaCA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1hdGNoTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgc2VhcmNoSGFzaCAr
PSBzZWFyY2hDaGFyYWN0ZXJzW2ldOworICAgICAgICBtYXRjaEhhc2ggKz0gbWF0Y2hDaGFyYWN0
ZXJzW2ldOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gZGVsdGE7ICsr
aSkgeworICAgICAgICBpZiAoc2VhcmNoSGFzaCA9PSBtYXRjaEhhc2ggJiYgZXF1YWwoc2VhcmNo
Q2hhcmFjdGVycyArIGksIG1hdGNoU3RyaW5nLCBtYXRjaExlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gaW5kZXggKyBpOworICAgICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJhY3RlcnNb
aSArIG1hdGNoTGVuZ3RoXTsKKyAgICAgICAgc2VhcmNoSGFzaCAtPSBzZWFyY2hDaGFyYWN0ZXJz
W2ldOworICAgIH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK3NpemVfdCBTdHJpbmdJbXBs
OjpmaW5kQ2FzZUluc2Vuc2l0aXZlKGNvbnN0IGNoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8gbWF0Y2gg
YWdhaW5zdAorICAgIGlmICghbWF0Y2hTdHJpbmcpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsK
KyAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IHN0cmxlbihtYXRjaFN0cmluZyk7CisgICAgaWYg
KCFtYXRjaExlbmd0aCkKKyAgICAgICAgcmV0dXJuIG1pbihpbmRleCwgbGVuZ3RoKCkpOworCisg
ICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCisgICAgaWYgKGlu
ZGV4ID4gbGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICB1bnNpZ25lZCBz
ZWFyY2hMZW5ndGggPSBsZW5ndGgoKSAtIGluZGV4OworICAgIGlmIChtYXRjaExlbmd0aCA+IHNl
YXJjaExlbmd0aCkKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIC8vIGRlbHRhIGlzIHRo
ZSBudW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRl
c3Qgb25seSBvbmNlLgorICAgIHVuc2lnbmVkIGRlbHRhID0gc2VhcmNoTGVuZ3RoIC0gbWF0Y2hM
ZW5ndGg7CisKKyAgICBjb25zdCBVQ2hhciogc2VhcmNoQ2hhcmFjdGVycyA9IGNoYXJhY3RlcnMo
KSArIGluZGV4OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBkZWx0YTsgKytpKSB7
CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzZWFyY2hDaGFyYWN0ZXJzICsgaSwgbWF0
Y2hTdHJpbmcsIG1hdGNoTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleCArIGk7Cisg
ICAgfQorICAgIHJldHVybiBub3RGb3VuZDsKK30KKworc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQo
U3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQoreworICAgIC8vIENoZWNr
IGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0CisgICAgaWYgKCFtYXRj
aFN0cmluZykKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIHVuc2lnbmVkIG1hdGNoTGVu
Z3RoID0gbWF0Y2hTdHJpbmctPmxlbmd0aCgpOworICAgIGlmICghbWF0Y2hMZW5ndGgpCisgICAg
ICAgIHJldHVybiBtaW4oaW5kZXgsIGxlbmd0aCgpKTsKKworICAgIC8vIE9wdGltaXphdGlvbiAx
OiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCisgICAgaWYgKG1hdGNoTGVuZ3Ro
ID09IDEpCisgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVycygpLCBsZW5ndGgoKSwg
bWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVswXSwgaW5kZXgpOworCisgICAgLy8gQ2hlY2sgaW5k
ZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCisgICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICB1bnNpZ25lZCBzZWFyY2hMZW5ndGggPSBs
ZW5ndGgoKSAtIGluZGV4OworICAgIGlmIChtYXRjaExlbmd0aCA+IHNlYXJjaExlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIC8vIGRlbHRhIGlzIHRoZSBudW1iZXIgb2YgYWRk
aXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qgb25seSBvbmNlLgor
ICAgIHVuc2lnbmVkIGRlbHRhID0gc2VhcmNoTGVuZ3RoIC0gbWF0Y2hMZW5ndGg7CisKKyAgICBj
b25zdCBVQ2hhciogc2VhcmNoQ2hhcmFjdGVycyA9IGNoYXJhY3RlcnMoKSArIGluZGV4OworICAg
IGNvbnN0IFVDaGFyKiBtYXRjaENoYXJhY3RlcnMgPSBtYXRjaFN0cmluZy0+Y2hhcmFjdGVycygp
OworCisgICAgLy8gT3B0aW1pemF0aW9uIDI6IGtlZXAgYSBydW5uaW5nIGhhc2ggb2YgdGhlIHN0
cmluZ3MsCisgICAgLy8gb25seSBjYWxsIG1lbWNtcCBpZiB0aGUgaGFzaGVzIG1hdGNoLgorICAg
IHVuc2lnbmVkIHNlYXJjaEhhc2ggPSAwOworICAgIHVuc2lnbmVkIG1hdGNoSGFzaCA9IDA7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
c2VhcmNoSGFzaCArPSBzZWFyY2hDaGFyYWN0ZXJzW2ldOworICAgICAgICBtYXRjaEhhc2ggKz0g
bWF0Y2hDaGFyYWN0ZXJzW2ldOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PD0gZGVsdGE7ICsraSkgeworICAgICAgICBpZiAoc2VhcmNoSGFzaCA9PSBtYXRjaEhhc2ggJiYg
bWVtY21wKHNlYXJjaENoYXJhY3RlcnMgKyBpLCBtYXRjaENoYXJhY3RlcnMsIG1hdGNoTGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBpbmRleCArIGk7Cisg
ICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tpICsgbWF0Y2hMZW5ndGhdOwor
ICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJjaENoYXJhY3RlcnNbaV07CisgICAgfQorICAgIHJl
dHVybiBub3RGb3VuZDsKK30KKworc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRDYXNlSW5zZW5zaXRp
dmUoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQoreworICAgIC8vIENo
ZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0CisgICAgaWYgKCFt
YXRjaFN0cmluZykKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIHVuc2lnbmVkIG1hdGNo
TGVuZ3RoID0gbWF0Y2hTdHJpbmctPmxlbmd0aCgpOworICAgIGlmICghbWF0Y2hMZW5ndGgpCisg
ICAgICAgIHJldHVybiBtaW4oaW5kZXgsIGxlbmd0aCgpKTsKKworICAgIC8vIENoZWNrIGluZGV4
ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgorICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgdW5zaWduZWQgc2VhcmNoTGVuZ3RoID0gbGVu
Z3RoKCkgLSBpbmRleDsKKyAgICBpZiAobWF0Y2hMZW5ndGggPiBzZWFyY2hMZW5ndGgpCisgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKKyAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0
aW9uYWwgdGltZXMgdG8gdGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KKyAg
ICB1bnNpZ25lZCBkZWx0YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOworCisgICAgY29u
c3QgVUNoYXIqIHNlYXJjaENoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzKCkgKyBpbmRleDsKKyAgICBj
b25zdCBVQ2hhciogbWF0Y2hDaGFyYWN0ZXJzID0gbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gZGVsdGE7ICsraSkgeworICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2Uoc2VhcmNoQ2hhcmFjdGVycyArIGksIG1hdGNoQ2hhcmFjdGVy
cywgbWF0Y2hMZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4ICsgaTsKICAgICB9Cisg
ICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCi1pbnQgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoVUNo
YXIgYywgaW50IGluZGV4KQorc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFVDaGFyIGMs
IHVuc2lnbmVkIGluZGV4KQogewogICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKG1fZGF0YSwg
bV9sZW5ndGgsIGMsIGluZGV4KTsKIH0KIAotaW50IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFN0
cmluZ0ltcGwqIHN0ciwgaW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpCitzaXplX3QgU3Ry
aW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGlu
ZGV4KQogewotICAgIC8qCi0gICAgIFNlZSBTdHJpbmdJbXBsOjpmaW5kKCkgZm9yIGV4cGxhbmF0
aW9ucy4KLSAgICAgKi8KLSAgICBBU1NFUlQoc3RyKTsKLSAgICBpbnQgbHRoaXMgPSBtX2xlbmd0
aDsKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICBpbmRleCArPSBsdGhpczsKLSAgICAKLSAg
ICBpbnQgbHN0ciA9IHN0ci0+bV9sZW5ndGg7Ci0gICAgaW50IGRlbHRhID0gbHRoaXMgLSBsc3Ry
OwotICAgIGlmICggaW5kZXggPCAwIHx8IGluZGV4ID4gbHRoaXMgfHwgZGVsdGEgPCAwICkKLSAg
ICAgICAgcmV0dXJuIC0xOwotICAgIGlmICggaW5kZXggPiBkZWx0YSApCi0gICAgICAgIGluZGV4
ID0gZGVsdGE7Ci0gICAgCi0gICAgY29uc3QgVUNoYXIgKnV0aGlzID0gbV9kYXRhOwotICAgIGNv
bnN0IFVDaGFyICp1c3RyID0gc3RyLT5tX2RhdGE7Ci0gICAgdW5zaWduZWQgaHRoaXMgPSAwOwot
ICAgIHVuc2lnbmVkIGhzdHIgPSAwOwotICAgIGludCBpOwotICAgIGlmIChjYXNlU2Vuc2l0aXZl
KSB7Ci0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbHN0cjsgaSsrICkgewotICAgICAgICAgICAg
aHRoaXMgKz0gdXRoaXNbaW5kZXggKyBpXTsKLSAgICAgICAgICAgIGhzdHIgKz0gdXN0cltpXTsK
LSAgICAgICAgfQotICAgICAgICBpID0gaW5kZXg7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAg
ICAgICAgICBpZiAoaHRoaXMgPT0gaHN0ciAmJiBtZW1jbXAodXRoaXMgKyBpLCB1c3RyLCBsc3Ry
ICogc2l6ZW9mKFVDaGFyKSkgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAg
ICAgICAgIGlmIChpID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAg
ICAgaS0tOwotICAgICAgICAgICAgaHRoaXMgLT0gdXRoaXNbaSArIGxzdHJdOwotICAgICAgICAg
ICAgaHRoaXMgKz0gdXRoaXNbaV07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgbHN0cjsgaSsrKSB7Ci0gICAgICAgICAgICBodGhpcyArPSB0b0FTQ0lJ
TG93ZXIodXRoaXNbaW5kZXggKyBpXSk7Ci0gICAgICAgICAgICBoc3RyICs9IHRvQVNDSUlMb3dl
cih1c3RyW2ldKTsKLSAgICAgICAgfQotICAgICAgICBpID0gaW5kZXg7Ci0gICAgICAgIHdoaWxl
ICgxKSB7Ci0gICAgICAgICAgICBpZiAoaHRoaXMgPT0gaHN0ciAmJiBlcXVhbElnbm9yaW5nQ2Fz
ZSh1dGhpcyArIGksIHVzdHIsIGxzdHIpICkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAg
ICAgICAgICAgIGlmIChpID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAg
ICAgICAgaS0tOwotICAgICAgICAgICAgaHRoaXMgLT0gdG9BU0NJSUxvd2VyKHV0aGlzW2kgKyBs
c3RyXSk7Ci0gICAgICAgICAgICBodGhpcyArPSB0b0FTQ0lJTG93ZXIodXRoaXNbaV0pOwotICAg
ICAgICB9CisgICAgLy8gQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNoIGFn
YWluc3QKKyAgICBpZiAoIW1hdGNoU3RyaW5nKQorICAgICAgICByZXR1cm4gbm90Rm91bmQ7Cisg
ICAgdW5zaWduZWQgbWF0Y2hMZW5ndGggPSBtYXRjaFN0cmluZy0+bGVuZ3RoKCk7CisgICAgaWYg
KCFtYXRjaExlbmd0aCkKKyAgICAgICAgcmV0dXJuIG1pbihpbmRleCwgbGVuZ3RoKCkpOworCisg
ICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGggMS4K
KyAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkKKyAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZp
bmQoY2hhcmFjdGVycygpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVswXSwg
aW5kZXgpOworCisgICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2Uu
CisgICAgaWYgKG1hdGNoTGVuZ3RoID4gbGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBub3RGb3Vu
ZDsKKyAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGltZXMgdG8gdGVz
dDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KKyAgICB1bnNpZ25lZCBkZWx0YSA9
IG1pbihpbmRleCwgbGVuZ3RoKCkgLSBtYXRjaExlbmd0aCk7CisKKyAgICBjb25zdCBVQ2hhciAq
c2VhcmNoQ2hhcmFjdGVycyA9IGNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciAqbWF0Y2hD
aGFyYWN0ZXJzID0gbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKTsKKworICAgIC8vIE9wdGltaXph
dGlvbiAyOiBrZWVwIGEgcnVubmluZyBoYXNoIG9mIHRoZSBzdHJpbmdzLAorICAgIC8vIG9ubHkg
Y2FsbCBtZW1jbXAgaWYgdGhlIGhhc2hlcyBtYXRjaC4KKyAgICB1bnNpZ25lZCBzZWFyY2hIYXNo
ID0gMDsKKyAgICB1bnNpZ25lZCBtYXRjaEhhc2ggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtYXRjaExlbmd0aDsgKytpKSB7CisgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNo
Q2hhcmFjdGVyc1tkZWx0YSArIGldOworICAgICAgICBtYXRjaEhhc2ggKz0gbWF0Y2hDaGFyYWN0
ZXJzW2ldOworICAgIH0KKworICAgIHdoaWxlIChzZWFyY2hIYXNoICE9IG1hdGNoSGFzaCB8fCBt
ZW1jbXAoc2VhcmNoQ2hhcmFjdGVycyArIGRlbHRhLCBtYXRjaENoYXJhY3RlcnMsIG1hdGNoTGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSkpIHsKKyAgICAgICAgaWYgKCFkZWx0YS0tKQorICAgICAgICAg
ICAgcmV0dXJuIG5vdEZvdW5kOworICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJjaENoYXJhY3Rl
cnNbZGVsdGEgKyBtYXRjaExlbmd0aF07CisgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hh
cmFjdGVyc1tkZWx0YV07CisgICAgfQorICAgIHJldHVybiBkZWx0YTsKK30KKworc2l6ZV90IFN0
cmluZ0ltcGw6OnJldmVyc2VGaW5kQ2FzZUluc2Vuc2l0aXZlKFN0cmluZ0ltcGwqIG1hdGNoU3Ry
aW5nLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBz
dHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAorICAgIGlmICghbWF0Y2hTdHJpbmcpCisgICAgICAgIHJl
dHVybiBub3RGb3VuZDsKKyAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IG1hdGNoU3RyaW5nLT5s
ZW5ndGgoKTsKKyAgICBpZiAoIW1hdGNoTGVuZ3RoKQorICAgICAgICByZXR1cm4gbWluKGluZGV4
LCBsZW5ndGgoKSk7CisKKyAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBpbiBy
YW5nZS4KKyAgICBpZiAobWF0Y2hMZW5ndGggPiBsZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG5v
dEZvdW5kOworICAgIC8vIGRlbHRhIGlzIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0
byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qgb25seSBvbmNlLgorICAgIHVuc2lnbmVkIGRl
bHRhID0gbWluKGluZGV4LCBsZW5ndGgoKSAtIG1hdGNoTGVuZ3RoKTsKKyAgICAKKyAgICBjb25z
dCBVQ2hhciAqc2VhcmNoQ2hhcmFjdGVycyA9IGNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hh
ciAqbWF0Y2hDaGFyYWN0ZXJzID0gbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKTsKKworICAgIHdo
aWxlICghZXF1YWxJZ25vcmluZ0Nhc2Uoc2VhcmNoQ2hhcmFjdGVycyArIGRlbHRhLCBtYXRjaENo
YXJhY3RlcnMsIG1hdGNoTGVuZ3RoKSkgeworICAgICAgICBpZiAoIWRlbHRhLS0pCisgICAgICAg
ICAgICByZXR1cm4gbm90Rm91bmQ7CiAgICAgfQotICAgIAotICAgIC8vIFNob3VsZCBuZXZlciBn
ZXQgaGVyZS4KLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIGRlbHRhOwogfQogCiBib29sIFN0
cmluZ0ltcGw6OmVuZHNXaXRoKFN0cmluZ0ltcGwqIG1fZGF0YSwgYm9vbCBjYXNlU2Vuc2l0aXZl
KQogewogICAgIEFTU0VSVChtX2RhdGEpOwotICAgIGludCBzdGFydCA9IG1fbGVuZ3RoIC0gbV9k
YXRhLT5tX2xlbmd0aDsKLSAgICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAgcmV0dXJuIChmaW5k
KG1fZGF0YSwgc3RhcnQsIGNhc2VTZW5zaXRpdmUpID09IHN0YXJ0KTsKKyAgICBpZiAobV9sZW5n
dGggPj0gbV9kYXRhLT5tX2xlbmd0aCkgeworICAgICAgICB1bnNpZ25lZCBzdGFydCA9IG1fbGVu
Z3RoIC0gbV9kYXRhLT5tX2xlbmd0aDsKKyAgICAgICAgcmV0dXJuIChjYXNlU2Vuc2l0aXZlID8g
ZmluZChtX2RhdGEsIHN0YXJ0KSA6IGZpbmRDYXNlSW5zZW5zaXRpdmUobV9kYXRhLCBzdGFydCkp
ID09IHN0YXJ0OworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTcxNiwxMiArNzc1
LDEyIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBpZiAo
IXJlcGxhY2VtZW50KQogICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgCi0gICAgaW50IHJl
cFN0ckxlbmd0aCA9IHJlcGxhY2VtZW50LT5sZW5ndGgoKTsKLSAgICBpbnQgc3JjU2VnbWVudFN0
YXJ0ID0gMDsKLSAgICBpbnQgbWF0Y2hDb3VudCA9IDA7CisgICAgdW5zaWduZWQgcmVwU3RyTGVu
Z3RoID0gcmVwbGFjZW1lbnQtPmxlbmd0aCgpOworICAgIHNpemVfdCBzcmNTZWdtZW50U3RhcnQg
PSAwOworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIAogICAgIC8vIENvdW50IHRo
ZSBtYXRjaGVzCi0gICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNy
Y1NlZ21lbnRTdGFydCkpID49IDApIHsKKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZp
bmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgKytt
YXRjaENvdW50OwogICAgICAgICArK3NyY1NlZ21lbnRTdGFydDsKICAgICB9CkBAIC03MzUsMTIg
Kzc5NCwxMiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAg
ICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGggLSBtYXRjaENvdW50ICsgKG1hdGNoQ291
bnQgKiByZXBTdHJMZW5ndGgpLCBkYXRhKTsKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRh
dGEKLSAgICBpbnQgc3JjU2VnbWVudEVuZDsKLSAgICBpbnQgc3JjU2VnbWVudExlbmd0aDsKKyAg
ICBzaXplX3Qgc3JjU2VnbWVudEVuZDsKKyAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVuZ3RoOwog
ICAgIHNyY1NlZ21lbnRTdGFydCA9IDA7Ci0gICAgaW50IGRzdE9mZnNldCA9IDA7CisgICAgdW5z
aWduZWQgZHN0T2Zmc2V0ID0gMDsKICAgICAKLSAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBm
aW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpID49IDApIHsKKyAgICB3aGlsZSAoKHNyY1Nl
Z21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7
CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0
YXJ0OwogICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVu
dFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9m
ZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwpAQCAtNzUyLDcgKzgxMSw3IEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9s
ZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1f
ZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikp
OwogCi0gICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gc3RhdGljX2Nh
c3Q8aW50PihuZXdJbXBsLT5sZW5ndGgoKSkpOworICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNT
ZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBuZXdJbXBs
OwogfQpAQCAtNzYyLDE2ICs4MjEsMTYgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpyZXBsYQogICAgIGlmICghcGF0dGVybiB8fCAhcmVwbGFjZW1lbnQpCiAgICAgICAgIHJl
dHVybiB0aGlzOwogCi0gICAgaW50IHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuLT5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBwYXR0ZXJuTGVuZ3RoID0gcGF0dGVybi0+bGVuZ3RoKCk7CiAgICAgaWYg
KCFwYXR0ZXJuTGVuZ3RoKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgCi0gICAgaW50
IHJlcFN0ckxlbmd0aCA9IHJlcGxhY2VtZW50LT5sZW5ndGgoKTsKLSAgICBpbnQgc3JjU2VnbWVu
dFN0YXJ0ID0gMDsKLSAgICBpbnQgbWF0Y2hDb3VudCA9IDA7CisgICAgdW5zaWduZWQgcmVwU3Ry
TGVuZ3RoID0gcmVwbGFjZW1lbnQtPmxlbmd0aCgpOworICAgIHNpemVfdCBzcmNTZWdtZW50U3Rh
cnQgPSAwOworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIAogICAgIC8vIENvdW50
IHRoZSBtYXRjaGVzCi0gICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4s
IHNyY1NlZ21lbnRTdGFydCkpID49IDApIHsKKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9
IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAg
KyttYXRjaENvdW50OwogICAgICAgICBzcmNTZWdtZW50U3RhcnQgKz0gcGF0dGVybkxlbmd0aDsK
ICAgICB9CkBAIC03ODUsMTIgKzg0NCwxMiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OnJlcGxhCiAgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGggKyBtYXRj
aENvdW50ICogKHJlcFN0ckxlbmd0aCAtIHBhdHRlcm5MZW5ndGgpLCBkYXRhKTsKICAgICAKICAg
ICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhCi0gICAgaW50IHNyY1NlZ21lbnRFbmQ7Ci0gICAg
aW50IHNyY1NlZ21lbnRMZW5ndGg7CisgICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7CisgICAgdW5z
aWduZWQgc3JjU2VnbWVudExlbmd0aDsKICAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwotICAgIGlu
dCBkc3RPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CiAgICAgCi0gICAg
d2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSA+
PSAwKSB7CisgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdt
ZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3Jj
U2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RP
ZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVv
ZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKQEAgLTgw
Miw3ICs4NjEsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwogICAgIG1l
bWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21l
bnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKIAotICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNT
ZWdtZW50TGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4obmV3SW1wbC0+bGVuZ3RoKCkpKTsKKyAg
ICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgo
KSk7CiAKICAgICByZXR1cm4gbmV3SW1wbDsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdJbXBsLmgJKHJldmlzaW9uIDY1NDY1KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3RleHQv
U3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsMTUgKzI5MCwxOCBAQCBwdWJsaWM6
CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVy
TWF0Y2hGdW5jdGlvblB0cik7CiAKLSAgICBpbnQgZmluZChjb25zdCBjaGFyKiwgaW50IGluZGV4
ID0gMCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSk7Ci0gICAgaW50IGZpbmQoVUNoYXIsIGlu
dCBpbmRleCA9IDApOwotICAgIGludCBmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIsIGlu
dCBpbmRleCA9IDApOwotICAgIGludCBmaW5kKFN0cmluZ0ltcGwqLCBpbnQgaW5kZXgsIGJvb2wg
Y2FzZVNlbnNpdGl2ZSA9IHRydWUpOworICAgIHNpemVfdCBmaW5kKFVDaGFyLCB1bnNpZ25lZCBp
bmRleCA9IDApOworICAgIHNpemVfdCBmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIsIHVu
c2lnbmVkIGluZGV4ID0gMCk7CisgICAgc2l6ZV90IGZpbmQoY29uc3QgY2hhciosIHVuc2lnbmVk
IGluZGV4ID0gMCk7CisgICAgc2l6ZV90IGZpbmQoU3RyaW5nSW1wbCosIHVuc2lnbmVkIGluZGV4
ID0gMCk7CisgICAgc2l6ZV90IGZpbmRDYXNlSW5zZW5zaXRpdmUoY29uc3QgY2hhciosIHVuc2ln
bmVkIGluZGV4ID0gMCk7CisgICAgc2l6ZV90IGZpbmRDYXNlSW5zZW5zaXRpdmUoU3RyaW5nSW1w
bCosIHVuc2lnbmVkIGluZGV4ID0gMCk7CisKKyAgICBzaXplX3QgcmV2ZXJzZUZpbmQoVUNoYXIs
IHVuc2lnbmVkIGluZGV4ID0gVUlOVF9NQVgpOworICAgIHNpemVfdCByZXZlcnNlRmluZChTdHJp
bmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCk7CisgICAgc2l6ZV90IHJldmVyc2VG
aW5kQ2FzZUluc2Vuc2l0aXZlKFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFY
KTsKIAotICAgIGludCByZXZlcnNlRmluZChVQ2hhciwgaW50IGluZGV4KTsKLSAgICBpbnQgcmV2
ZXJzZUZpbmQoU3RyaW5nSW1wbCosIGludCBpbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1
ZSk7Ci0gICAgCi0gICAgYm9vbCBzdGFydHNXaXRoKFN0cmluZ0ltcGwqIHN0ciwgYm9vbCBjYXNl
U2Vuc2l0aXZlID0gdHJ1ZSkgeyByZXR1cm4gcmV2ZXJzZUZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0
aXZlKSA9PSAwOyB9CisgICAgYm9vbCBzdGFydHNXaXRoKFN0cmluZ0ltcGwqIHN0ciwgYm9vbCBj
YXNlU2Vuc2l0aXZlID0gdHJ1ZSkgeyByZXR1cm4gKGNhc2VTZW5zaXRpdmUgPyByZXZlcnNlRmlu
ZChzdHIsIDApIDogcmV2ZXJzZUZpbmRDYXNlSW5zZW5zaXRpdmUoc3RyLCAwKSkgPT0gMDsgfQog
ICAgIGJvb2wgZW5kc1dpdGgoU3RyaW5nSW1wbCosIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUp
OwogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBVQ2hhcik7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDY1NDY1KQor
KysgSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTc2LDE0ICs1NzYsMTQgQEAgdm9pZCBTdHJpbmc6OnNwbGl0KGNvbnN0IFN0cmluZyYgc2Vw
YXJhdAogewogICAgIHJlc3VsdC5jbGVhcigpOwogCi0gICAgaW50IHN0YXJ0UG9zID0gMDsKLSAg
ICBpbnQgZW5kUG9zOwotICAgIHdoaWxlICgoZW5kUG9zID0gZmluZChzZXBhcmF0b3IsIHN0YXJ0
UG9zKSkgIT0gLTEpIHsKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgc2l6ZV90IGVu
ZFBvczsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IGZpbmQoc2VwYXJhdG9yLCBzdGFydFBvcykpICE9
IG5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBvcyAh
PSBlbmRQb3MpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcywg
ZW5kUG9zIC0gc3RhcnRQb3MpKTsKICAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyBzZXBhcmF0
b3IubGVuZ3RoKCk7CiAgICAgfQotICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBv
cyAhPSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCgpKSkKKyAgICBpZiAoYWxsb3dFbXB0eUVudHJp
ZXMgfHwgc3RhcnRQb3MgIT0gbGVuZ3RoKCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Vic3Ry
aW5nKHN0YXJ0UG9zKSk7CiB9CiAKQEAgLTU5NiwxNCArNTk2LDE0IEBAIHZvaWQgU3RyaW5nOjpz
cGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wKIHsKICAgICByZXN1bHQuY2xlYXIoKTsKIAotICAg
IGludCBzdGFydFBvcyA9IDA7Ci0gICAgaW50IGVuZFBvczsKLSAgICB3aGlsZSAoKGVuZFBvcyA9
IGZpbmQoc2VwYXJhdG9yLCBzdGFydFBvcykpICE9IC0xKSB7CisgICAgdW5zaWduZWQgc3RhcnRQ
b3MgPSAwOworICAgIHNpemVfdCBlbmRQb3M7CisgICAgd2hpbGUgKChlbmRQb3MgPSBmaW5kKHNl
cGFyYXRvciwgc3RhcnRQb3MpKSAhPSBub3RGb3VuZCkgewogICAgICAgICBpZiAoYWxsb3dFbXB0
eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9zKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChzdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSk7CiAgICAgICAgIHN0YXJ0
UG9zID0gZW5kUG9zICsgMTsKICAgICB9Ci0gICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0
YXJ0UG9zICE9IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKCkpKQorICAgIGlmIChhbGxvd0VtcHR5
RW50cmllcyB8fCBzdGFydFBvcyAhPSBsZW5ndGgoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZChz
dWJzdHJpbmcoc3RhcnRQb3MpKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3RleHQv
V1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3Ry
aW5nLmgJKHJldmlzaW9uIDY1NDY1KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3Ry
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDYgQEAgaW50cHRyX3QgY2hhcmFjdGVy
c1RvSW50UHRyKGNvbnN0IFVDaGFyKgogZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBV
Q2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsKIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNv
bnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOwogCi1pbnQgZmluZChjb25zdCBVQ2hh
ciosIHNpemVfdCwgVUNoYXIsIGludCBzdGFydFBvc2l0aW9uID0gMCk7Ci1pbnQgcmV2ZXJzZUZp
bmQoY29uc3QgVUNoYXIqLCBzaXplX3QsIFVDaGFyLCBpbnQgc3RhcnRQb3NpdGlvbiA9IC0xKTsK
LQogY2xhc3MgU3RyaW5nIHsKIHB1YmxpYzoKICAgICAvLyBDb25zdHJ1Y3QgYSBudWxsIHN0cmlu
ZywgZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gZW1wdHkgc3RyaW5nLgpAQCAtMTQ2LDMwICsxNDMs
NDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2lnbmVkIGxvbmcgbG9u
Zyk7CiAgICAgc3RhdGljIFN0cmluZyBudW1iZXIoZG91YmxlKTsKIAotCisgICAgLy8gRmluZCBh
IHNpbmdsZSBjaGFyYWN0ZXIgb3Igc3RyaW5nLCBhbHNvIHdpdGggbWF0Y2ggZnVuY3Rpb24gJiBs
YXRpbjEgZm9ybXMuCisgICAgc2l6ZV90IGZpbmQoVUNoYXIgYywgdW5zaWduZWQgc3RhcnQgPSAw
KSBjb25zdAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoYywgc3RhcnQp
IDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3QgZmluZChjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWdu
ZWQgc3RhcnQgPSAwKSBjb25zdAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZp
bmQoc3RyLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3QgZmluZChDaGFy
YWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIHN0YXJ0ID0gMCkg
Y29uc3QKKyAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKG1hdGNoRnVuY3Rp
b24sIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CisgICAgc2l6ZV90IGZpbmQoY29uc3QgY2hhciogc3Ry
LCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1f
aW1wbC0+ZmluZChzdHIsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CisKKyAgICAvLyBGaW5kIHRoZSBs
YXN0IGluc3RhbmNlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcuCisgICAgc2l6ZV90
IHJldmVyc2VGaW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0Cisg
ICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoYywgc3RhcnQpIDog
bm90Rm91bmQ7IH0KKyAgICBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgU3RyaW5nJiBzdHIsIHVu
c2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/
IG1faW1wbC0+cmV2ZXJzZUZpbmQoc3RyLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KKwor
ICAgIC8vIENhc2UgaW5zZW5zaXRpdmUgc3RyaW5nIG1hdGNoaW5nLgorICAgIHNpemVfdCBmaW5k
Q2FzZUluc2Vuc2l0aXZlKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25z
dAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmRDYXNlSW5zZW5zaXRpdmUo
c3RyLCBzdGFydCkgOiBub3RGb3VuZDsgfQorICAgIHNpemVfdCBmaW5kQ2FzZUluc2Vuc2l0aXZl
KGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0CisgICAgICAgIHsg
cmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZENhc2VJbnNlbnNpdGl2ZShzdHIuaW1wbCgpLCBz
dGFydCkgOiBub3RGb3VuZDsgfQorICAgIHNpemVfdCByZXZlcnNlRmluZENhc2VJbnNlbnNpdGl2
ZShjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQgPSBVSU5UX01BWCkgY29uc3QKKyAg
ICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5yZXZlcnNlRmluZENhc2VJbnNlbnNpdGl2
ZShzdHIuaW1wbCgpLCBzdGFydCkgOiBub3RGb3VuZDsgfQorCisgICAgLy8gV3JhcHBlcnMgZm9y
IGZpbmQgJiByZXZlcnNlRmluZCBhZGRpbmcgZHluYW1pYyBzZW5zaXRpdml0eSBjaGVjay4KKyAg
ICBzaXplX3QgZmluZChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VT
ZW5zaXRpdmUpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBmaW5kKHN0
ciwgc3RhcnQpIDogZmluZENhc2VJbnNlbnNpdGl2ZShzdHIsIHN0YXJ0KTsgfQorICAgIHNpemVf
dCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0
aXZlKSBjb25zdAorICAgICAgICB7IHJldHVybiBjYXNlU2Vuc2l0aXZlID8gZmluZChzdHIsIHN0
YXJ0KSA6IGZpbmRDYXNlSW5zZW5zaXRpdmUoc3RyLCBzdGFydCk7IH0KKyAgICBzaXplX3QgcmV2
ZXJzZUZpbmQoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5z
aXRpdmUpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyByZXZlcnNlRmlu
ZChzdHIsIHN0YXJ0KSA6IHJldmVyc2VGaW5kQ2FzZUluc2Vuc2l0aXZlKHN0ciwgc3RhcnQpOyB9
CiAKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKTsKICAg
ICAKICAgICBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQpIGNvbnN0OyAvLyBE
aXR0by4KICAgICAKLSAgICBib29sIGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0IHsgcmV0dXJuIGZp
bmQoYykgIT0gLTE7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIHN0ciwgYm9vbCBj
YXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gZmluZChzdHIsIDAsIGNhc2VTZW5z
aXRpdmUpICE9IC0xOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIHN0ciwgYm9v
bCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gZmluZChzdHIsIDAsIGNhc2VT
ZW5zaXRpdmUpICE9IC0xOyB9Ci0KLSAgICBpbnQgZmluZChVQ2hhciBjLCBpbnQgc3RhcnQgPSAw
KSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoYywgc3RhcnQp
IDogLTE7IH0KLSAgICBpbnQgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVu
Y3Rpb24sIGludCBzdGFydCA9IDApIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1f
aW1wbC0+ZmluZChtYXRjaEZ1bmN0aW9uLCBzdGFydCkgOiAtMTsgfQotICAgIGludCBmaW5kKGNv
bnN0IGNoYXIqIHN0ciwgaW50IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkg
Y29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ciwgc3RhcnQs
IGNhc2VTZW5zaXRpdmUpIDogLTE7IH0KLSAgICBpbnQgZmluZChjb25zdCBTdHJpbmcmIHN0ciwg
aW50IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKLSAgICAgICAg
eyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ci5pbXBsKCksIHN0YXJ0LCBjYXNlU2Vu
c2l0aXZlKSA6IC0xOyB9Ci0KLSAgICBpbnQgcmV2ZXJzZUZpbmQoVUNoYXIgYywgaW50IHN0YXJ0
ID0gLTEpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZp
bmQoYywgc3RhcnQpIDogLTE7IH0KLSAgICBpbnQgcmV2ZXJzZUZpbmQoY29uc3QgU3RyaW5nJiBz
dHIsIGludCBzdGFydCA9IC0xLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAotICAg
ICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kKHN0ci5pbXBsKCksIHN0
YXJ0LCBjYXNlU2Vuc2l0aXZlKSA6IC0xOyB9Ci0gICAgCisgICAgYm9vbCBjb250YWlucyhVQ2hh
ciBjKSBjb25zdCB7IHJldHVybiBmaW5kKGMpICE9IG5vdEZvdW5kOyB9CisgICAgYm9vbCBjb250
YWlucyhjb25zdCBjaGFyKiBzdHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsg
cmV0dXJuIGZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0aXZlKSAhPSBub3RGb3VuZDsgfQorICAgIGJv
b2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBzdHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUp
IGNvbnN0IHsgcmV0dXJuIGZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0aXZlKSAhPSBub3RGb3VuZDsg
fQorCiAgICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZyYgcywgYm9vbCBjYXNlU2Vuc2l0
aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zdGFy
dHNXaXRoKHMuaW1wbCgpLCBjYXNlU2Vuc2l0aXZlKSA6IHMuaXNFbXB0eSgpOyB9CiAgICAgYm9v
bCBlbmRzV2l0aChjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNv
bnN0CkBAIC0zNTEsNDMgKzM2NCwzNyBAQCBpbmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVND
SUkoY29uc3QgCiAKIGludCBjb2RlUG9pbnRDb21wYXJlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpOwogCi1pbmxpbmUgaW50IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFVDaGFyIGNoYXJhY3RlciwgaW50IHN0YXJ0UG9zaXRpb24pCitpbmxpbmUgc2l6
ZV90IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIg
bWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0gMCkKIHsKLSAgICBpZiAoc3RhcnRQb3Np
dGlvbiA+PSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gc3RhcnRQb3NpdGlvbjsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmIChjaGFyYWN0ZXJzW2ldID09IGNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGkpOworICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICBpZiAoY2hhcmFjdGVyc1tpbmRleF0gPT0gbWF0Y2hDaGFyYWN0ZXIpCisgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICsraW5kZXg7CiAgICAgfQotICAgIHJldHVybiAtMTsKKyAg
ICByZXR1cm4gbm90Rm91bmQ7CiB9CiAKLWlubGluZSBpbnQgZmluZChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCwgQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1
bmN0aW9uLCBpbnQgc3RhcnRQb3NpdGlvbikKK2lubGluZSBzaXplX3QgZmluZChjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRy
IG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIGluZGV4ID0gMCkKIHsKLSAgICBpZiAoc3RhcnRQb3Np
dGlvbiA+PSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gc3RhcnRQb3NpdGlvbjsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmIChtYXRjaEZ1bmN0aW9uKGNoYXJhY3RlcnNbaV0pKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oaSk7CisgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgIGlmIChtYXRjaEZ1bmN0aW9uKGNoYXJhY3RlcnNbaW5kZXhdKSkKKyAgICAgICAgICAgIHJl
dHVybiBpbmRleDsKKyAgICAgICAgKytpbmRleDsKICAgICB9Ci0gICAgcmV0dXJuIC0xOworICAg
IHJldHVybiBub3RGb3VuZDsKIH0KIAotaW5saW5lIGludCByZXZlcnNlRmluZChjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVUNoYXIgY2hhcmFjdGVyLCBpbnQgc3RhcnRQ
b3NpdGlvbikKK2lubGluZSBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIgbWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4
ID0gVUlOVF9NQVgpCiB7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gc3RhdGljX2Nhc3Q8aW50
PihsZW5ndGgpIHx8ICFsZW5ndGgpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoc3RhcnRQ
b3NpdGlvbiA8IDApCi0gICAgICAgIHN0YXJ0UG9zaXRpb24gKz0gc3RhdGljX2Nhc3Q8aW50Pihs
ZW5ndGgpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzW3N0YXJ0
UG9zaXRpb25dID09IGNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybiBzdGFydFBvc2l0aW9u
OwotICAgICAgICBpZiAoIXN0YXJ0UG9zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgICAgIHN0YXJ0UG9zaXRpb24tLTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IG5vdEZvdW5kOworICAgIGlmIChpbmRleCA+PSBsZW5ndGgpCisgICAgICAgIGluZGV4ID0gbGVu
Z3RoIC0gMTsKKyAgICB3aGlsZSAoY2hhcmFjdGVyc1tpbmRleF0gIT0gbWF0Y2hDaGFyYWN0ZXIp
IHsKKyAgICAgICAgaWYgKCFpbmRleC0tKQorICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwog
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0
dXJuIGluZGV4OwogfQogCiBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPFVDaGFyPiYgdmVjdG9y
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTQ2NikKKysrIFdlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM1IEBACisyMDEwLTA4LTE2ICBHYXZp
biBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBCdWcgNDQw
ODAgLSBTdHJpbmcgZmluZC9yZXZlcnNlRmluZCBtZXRob2RzIG5lZWQgdGlkeWluZyB1cAorICAg
ICAgICBUaGVzZSBtZXRob2RzIGhhdmUgYSBjb3VwbGUgb2YgcHJvYmxlbXMgd2l0aCB0aGVpciBp
bnRlcmZhY2UsIGFuZCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUaGVzZSBtZXRob2RzIHRh
a2UgYW5kIGludCBpbmRleCwgYW5kIHJldHVybiBhbiBpbnQg4oCTIGhvd2V2ZXIgdGhpcyBpcyBw
cm9ibGVtYXRpYworICAgICAgICBzaW5jZSBvbiA2NC1iaXQgc3RyaW5nIGluZGljZXMgbWF5IGhh
dmUgYSBmdWxsIDMyLWJpdCByYW5nZS4gIFRoaXMgc3BpbGxzIG91dCBpbnRvCisgICAgICAgIHN1
cnJvdW5kaW5nIGNvZGUsIHdoaWNoIHVuc2FmZWx5IGNhc3RzIHN0cmluZyBpbmRpY2VzIGZyb20g
dW5zaWduZWQgdG8gaW50LiBDb2RlCisgICAgICAgIGNoZWNraW5nIHRoZSByZXN1bHQgb2YgdGhl
c2UgbWV0aG9kcyBjaGVjayBmb3IgYSBtaXggb2YgIj09IC0xIiwgIjwgMCIsIGFuZAorICAgICAg
ICAiPT0gbm90Rm91bmQiLiAgQ2xlYW4gdGhpcyB1cCBieSBjaGFuZ2luZyB0aGVzZSBtZXRob2Rz
IHRvIHRha2UgYW4gdW5zaWduZWQKKyAgICAgICAgc3RhcnRpbmcgaW5kZXgsIGFuZCByZXR1cm4g
YSBzaXplX3QuIHdpdGggYSBmYWlsZWQgbWF0Y2ggaW5kaWNhdGVkIGJ5IG5vdEZvdW5kLgorICAg
ICAgICByZXZlcnNlRmluZCBhbHNvIGhhcyBhIHNwZWNpYWwgbWVhbmluZyBmb3IgdGhlIHN0YXJ0
aW5nIGluZGV4IGFyZ3VtZW50LCBpbiB0aGF0IGEKKyAgICAgICAgbmVnYXRpdmUgaW5kZXggaXMg
aW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGJhY2sgZnJvbSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcu
IFJlbW92ZQorICAgICAgICB0aGlzIGZ1bmN0aW9uYWxpdHksIGluIHRoZSAoMSEpIGNhc2Ugd2hl
cmUgaXQgaXMgdXNlZCB3ZSBzaG91bGQganVzdCBjYWxjdWxhdGUgdGhlCisgICAgICAgIG9mZnNl
dCBieSBzdWJ0cmFjdGluZyBmcm9tIHRoZSBzdHJpbmcncyBsZW5ndGguCisKKyAgICAgICAgVGhl
IGltcGxlbWVudGF0aW9uIGhhcyBhIGZldyBwcm9ibGVtcyB0b28uICBUaGUgY29kZSBpcyBub3Qg
aW4gd2Via2l0IHN0eWxlLCBpbgorICAgICAgICB1c2luZyBhc3NvcnRlZCBhYmJyZXZpYXRpb25z
IGluIHZhcmlhYmxlIG5hbWVzLCBhbmQgaW1wbGVtZW50YXRpb25zIG9mIHNpbWlsYXIKKyAgICAg
ICAgZmluZCBtZXRob2RzIHdpdGggZGlmZmVyaW5nIGFyZ3VtZW50IHR5cGVzIHdlcmUgdW5uZWNl
c3NhcmlseSBpbmNvbnNpc3RlbnQuIFdoZW4KKyAgICAgICAgZmluZCBpcyBwYXNzZWQgY29uc3Qg
Y2hhciogZGF0YSB0aGUgc3RyaW5nIHdvdWxkIGJlIGhhbmRsZWQgYXMgbGF0aW4xICh6ZXJvCisg
ICAgICAgIGV4dGVuZGVkIHRvIFVURi0xNikgZm9yIGFsbCBjaGFyYWN0ZXJzIGJ1dCB0aGUgZmly
c3Q7IHRoaXMgaXMgc2lnbiBleHRlbmRlZC4KKyAgICAgICAgQ2FzZS1pbnNlbnNpdGl2ZSBmaW5k
IGlzIGJyb2tlbiBmb3IgdW5pY29kZSBzdHJpbmdzOyB0aGUgaGFzaGluZyBvcHRpbWl6YXRpb24g
aXMKKyAgICAgICAgbm90IHVuaWNvZGUgc2FmZSwgYW5kIGNvdWxkIHJlc3VsdCBpbiBmYWxzZSBu
ZWdhdGl2ZXMuCisKKyAgICAgICAgVW5pZnkgVVN0cmluZyBmaW5kIG1ldGhvZHMgdG8gbWF0Y2gg
U3RyaW5nLgorCisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpSYXJlRGF0YTo6cGFyc2VOdGgpOgorICAgICAgICAqIGNzcy9DU1NT
dHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNr
T25lU2VsZWN0b3IpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Z2V0SW1hZ2VNYXApOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OmlucHV0VGV4dCk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQpOgorICAgICAgICAqIGVk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6
aGFuZGxlVGV4dEJveCk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAqIGVk
aXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxDb250YWluZXJGcm9tU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbVRleHQpOgorICAgICAg
ICAqIGh0bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpJbml0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
bmNob3JFbGVtZW50OjpzZXRIb3N0KToKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNQbGFjZWhvbGRlckVt
cHR5KToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKToKKyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFj
Y2Vzc0NvbnRyb2xBbGxvd0xpc3QpOgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpzdWJzdGl0dXRl
TUlNRVR5cGVGcm9tUGx1Z2luRGF0YWJhc2UpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhlYWRlcnMpOgorICAgICAgICAqIGxvYWRlci9p
Y29uL0ljb25GZXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSWNvbkxpbmspOgor
ICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRv
dzo6cGFyc2VNb2RhbERpYWxvZ0ZlYXR1cmVzKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3Jp
Z2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0
YWJhc2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46OnBhcnNlKToKKyAg
ICAgICAgKiBwYWdlL1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRv
cjo6ZmluZEluUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFR5cGU6OnBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50VHlwZTo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpLVVJMOjpsYXN0UGF0aENvbXBvbmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpLVVJMOjpzZXRQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3Vic3RpdHV0ZUJhY2tzbGFzaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlRnJvbURhdGFVUkwpOgorICAgICAgICAqIHBsYXRm
b3JtL0xlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXdDb29yZHNBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjpuZXdMZW5ndGhBcnJheSk6CisgICAgICAgICogcGxhdGZvcm0vTGlua0hh
c2guY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNsYXNoRG90RG90U2xhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFNsYXNoU2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNsYXNo
RG90U2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5QYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVn
aXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vU2NoZW1lUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0
VVJMQXNMb2NhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmxvYWQpOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1h
Z2VJY29uRm9yQ2FjaGVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ3JlZGVu
dGlhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJvdGVjdGlvblNwYWNlTWFwS2V5
RnJvbVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRGVmYXVsdFByb3RlY3Rpb25TcGFjZUZv
clVSTCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpza2lwV2hpdGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpza2lwVG9r
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIVFRQUmVmcmVzaCk6CisgICAgICAgIChXZWJD
b3JlOjpmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRDaGFyc2V0SW5NZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VYU1NQ
cm90ZWN0aW9uSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RSZWFzb25QaHJhc2VG
cm9tSFRUUFN0YXR1c0xpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6
OmlzQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNhY2hlSGVhZGVyKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnVwZGF0ZVdpZGdldCk6CisgICAgICAgICogc3Rv
cmFnZS9FbnRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbnRyeTo6RW50cnkpOgorICAgICAg
ICAqIHN2Zy9TVkdGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQ29tcGF0aWJsZUdseXBo
KToKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpwYXJz
ZUNsb2NrVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnBhcnNlQ29u
ZGl0aW9uKToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0JlZm9yZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0FmdGVyOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RnVuVHJhbnNsYXRlOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6RnVuTGFuZzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHhtbC9YUGF0aFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpleHBhbmRRTmFtZSk6CisKIDIwMTAt
MDgtMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBD
b21waWxlIGZpeC4gUmVtb3ZlIEFOR0xFV2ViS2l0QnJpZGdlIGNsYXNzZXMgZnJvbSBDaHJvbWl1
bSBidWlsZC4gIFRoZXkgYXJlIHVudXNlZC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1NlbGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHJldmlzaW9u
IDY1NDY1KQorKysgV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MDYsOCArOTA2LDggQEAgYm9vbCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKCkK
ICAgICAgICAgbV9hID0gMjsKICAgICAgICAgbV9iID0gMDsKICAgICB9IGVsc2UgewotICAgICAg
ICBpbnQgbiA9IGFyZ3VtZW50LmZpbmQoJ24nKTsKLSAgICAgICAgaWYgKG4gIT0gLTEpIHsKKyAg
ICAgICAgc2l6ZV90IG4gPSBhcmd1bWVudC5maW5kKCduJyk7CisgICAgICAgIGlmIChuICE9IG5v
dEZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRbMF0gPT0gJy0nKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKG4gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgbV9hID0gLTE7IC8vIC1u
ID09IC0xbgpAQCAtOTE4LDEyICs5MTgsMTIgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6
OnBhcnNlTnRoKCkKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBtX2EgPSBhcmd1
bWVudC5zdWJzdHJpbmcoMCwgbikudG9JbnQoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aW50IHAgPSBhcmd1bWVudC5maW5kKCcrJywgbik7Ci0gICAgICAgICAgICBpZiAocCAhPSAtMSkK
KyAgICAgICAgICAgIHNpemVfdCBwID0gYXJndW1lbnQuZmluZCgnKycsIG4pOworICAgICAgICAg
ICAgaWYgKHAgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICAgICAgbV9iID0gYXJndW1lbnQuc3Vi
c3RyaW5nKHAgKyAxLCBhcmd1bWVudC5sZW5ndGgoKSAtIHAgLSAxKS50b0ludCgpOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgcCA9IGFyZ3VtZW50LmZpbmQoJy0nLCBuKTsK
LSAgICAgICAgICAgICAgICBpZiAocCAhPSAtMSkKKyAgICAgICAgICAgICAgICBpZiAocCAhPSBu
b3RGb3VuZCkKICAgICAgICAgICAgICAgICAgICAgbV9iID0gLWFyZ3VtZW50LnN1YnN0cmluZyhw
ICsgMSwgYXJndW1lbnQubGVuZ3RoKCkgLSBwIC0gMSkudG9JbnQoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2
aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIsOCArODIsOCBAQCBib29sIENTU1N0eWxlRGVjbGFyYXRpb246Omlz
UHJvcGVydHlJbXBsCiAKIHZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIGludCBpbXBvcnRhbnQgPSB2YWx1ZS5maW5kKCIhaW1wb3J0YW50Iiwg
MCwgZmFsc2UpOwotICAgIGlmIChpbXBvcnRhbnQgPT0gLTEpCisgICAgc2l6ZV90IGltcG9ydGFu
dCA9IHZhbHVlLmZpbmQoIiFpbXBvcnRhbnQiLCAwLCBmYWxzZSk7CisgICAgaWYgKGltcG9ydGFu
dCA9PSBub3RGb3VuZCkKICAgICAgICAgc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSwg
IiIsIGVjKTsKICAgICBlbHNlCiAgICAgICAgIHNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFs
dWUubGVmdChpbXBvcnRhbnQgLSAxKSwgImltcG9ydGFudCIsIGVjKTsKQEAgLTk2LDcgKzk2LDcg
QEAgdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjbwogICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHJhaXNlIGFuIGV4Y2VwdGlvbiBoZXJlPwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3JpdHkuZmluZCgiaW1wb3J0YW50Iiwg
MCwgZmFsc2UpICE9IC0xOworICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3JpdHkuZmluZCgiaW1w
b3J0YW50IiwgMCwgZmFsc2UpICE9IG5vdEZvdW5kOwogICAgIHNldFByb3BlcnR5KHByb3BJRCwg
dmFsdWUsIGltcG9ydGFudCwgZWMpOwogfQogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjExOSwxOCArMjExOSwxOCBAQCBib29sIENTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgICAgICAgICBpZiAoc2VsLT5tX3ZhbHVlLmNvbnRh
aW5zKCcgJykgfHwgc2VsLT5tX3ZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGludCBzdGFydFNlYXJjaEF0ID0gMDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0U2VhcmNoQXQgPSAwOwogICAgICAgICAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgICAgICAgICBpbnQgZm91bmRQb3MgPSB2YWx1ZS5maW5kKHNlbC0+bV92YWx1
ZSwgc3RhcnRTZWFyY2hBdCwgY2FzZVNlbnNpdGl2ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZv
dW5kUG9zID09IC0xKQorICAgICAgICAgICAgICAgIHNpemVfdCBmb3VuZFBvcyA9IHZhbHVlLmZp
bmQoc2VsLT5tX3ZhbHVlLCBzdGFydFNlYXJjaEF0LCBjYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoZm91bmRQb3MgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoZm91bmRQb3MgPT0gMCB8fCB2YWx1ZVtm
b3VuZFBvcy0xXSA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRQb3MgPT0gMCB8
fCB2YWx1ZVtmb3VuZFBvcyAtIDFdID09ICcgJykgewogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBlbmRTdHIgPSBmb3VuZFBvcyArIHNlbC0+bV92YWx1ZS5sZW5ndGgoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGVuZFN0ciA9PSB2YWx1ZS5sZW5ndGgoKSB8fCB2YWx1ZVtlbmRTdHJd
ID09ICcgJykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBXZSBmb3VuZCBhIG1h
dGNoLgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyBObyBtYXRjaC4gIEtlZXAgbG9va2luZy4KKyAgICAgICAgICAgICAgICAvLyBObyBtYXRj
aC4gS2VlcCBsb29raW5nLgogICAgICAgICAgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBv
cyArIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjQ4LDggKzM2NDgsOCBAQCBIVE1MTWFwRWxlbWVudCogRG9jdW1lbnQ6OmdldElt
YWdlTWFwKGNvCiB7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgaW50IGhhc2hQb3MgPSB1cmwuZmluZCgnIycpOwotICAgIFN0cmluZyBuYW1lID0gKGhhc2hQ
b3MgPCAwID8gdXJsIDogdXJsLnN1YnN0cmluZyhoYXNoUG9zICsgMSkpLmltcGwoKTsKKyAgICBz
aXplX3QgaGFzaFBvcyA9IHVybC5maW5kKCcjJyk7CisgICAgU3RyaW5nIG5hbWUgPSAoaGFzaFBv
cyA9PSBub3RGb3VuZCA/IHVybCA6IHVybC5zdWJzdHJpbmcoaGFzaFBvcyArIDEpKS5pbXBsKCk7
CiAgICAgQXRvbWljU3RyaW5nIG1hcE5hbWUgPSBpc0hUTUxEb2N1bWVudCgpID8gbmFtZS5sb3dl
cigpIDogbmFtZTsKICAgICBtX2ltYWdlTWFwc0J5TmFtZS5jaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgcmV0dXJuIG1faW1hZ2VNYXBzQnlOYW1lLmdldChtYXBOYW1lLmltcGwoKSk7CkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY1NDY1KQor
KysgV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjk0LDI0ICsyOTQsMjQgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6am9pblRl
eHROb2RlcwogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCkKIHsKLSAgICBpbnQgb2Zmc2V0ID0g
MDsKLSAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSAwOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CiAgICAgUmVmUHRyPFJh
bmdlPiBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBQb3NpdGlvbihkb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSwgMCksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkp
OwotICAgIGludCBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJh
bmdlLmdldCgpKTsKLSAgICBpbnQgbmV3bGluZTsKKyAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLmdldCgpKTsKKyAgICBzaXplX3Qg
bmV3bGluZTsKICAgICBkbyB7CiAgICAgICAgIG5ld2xpbmUgPSB0ZXh0LmZpbmQoJ1xuJywgb2Zm
c2V0KTsKICAgICAgICAgaWYgKG5ld2xpbmUgIT0gb2Zmc2V0KSB7CiAgICAgICAgICAgICBSZWZQ
dHI8SW5zZXJ0VGV4dENvbW1hbmQ+IGNvbW1hbmQgPSBJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRl
KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY29tbWFu
ZCk7Ci0gICAgICAgICAgICBpbnQgc3Vic3RyaW5nTGVuZ3RoID0gbmV3bGluZSA9PSAtMSA/IGxl
bmd0aCAtIG9mZnNldCA6IG5ld2xpbmUgLSBvZmZzZXQ7CisgICAgICAgICAgICBpbnQgc3Vic3Ry
aW5nTGVuZ3RoID0gbmV3bGluZSA9PSBub3RGb3VuZCA/IGxlbmd0aCAtIG9mZnNldCA6IG5ld2xp
bmUgLSBvZmZzZXQ7CiAgICAgICAgICAgICBjb21tYW5kLT5pbnB1dCh0ZXh0LnN1YnN0cmluZyhv
ZmZzZXQsIHN1YnN0cmluZ0xlbmd0aCksIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
bmV3bGluZSAhPSAtMSkKKyAgICAgICAgaWYgKG5ld2xpbmUgIT0gbm90Rm91bmQpCiAgICAgICAg
ICAgICBpbnNlcnRMaW5lQnJlYWsoKTsKICAgICAgICAgICAgIAogICAgICAgICBvZmZzZXQgPSBu
ZXdsaW5lICsgMTsKLSAgICB9IHdoaWxlIChuZXdsaW5lICE9IC0xICYmIG9mZnNldCAhPSBsZW5n
dGgpOworICAgIH0gd2hpbGUgKG5ld2xpbmUgIT0gbm90Rm91bmQgJiYgb2Zmc2V0ICE9IGxlbmd0
aCk7CiAgICAgCiAgICAgaWYgKHNlbGVjdEluc2VydGVkVGV4dCkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLCBzdGFydEluZGV4LCBsZW5ndGgp
OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCShyZXZpc2lvbiA2NTQ2
NSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw3ICsxMDksNyBAQCBib29sIEluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtVHJp
dmlhbFJlCiB2b2lkIEluc2VydFRleHRDb21tYW5kOjppbnB1dChjb25zdCBTdHJpbmcmIHRleHQs
IGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KQogewogICAgIAotICAgIEFTU0VSVCh0ZXh0LmZpbmQo
J1xuJykgPT0gLTEpOworICAgIEFTU0VSVCh0ZXh0LmZpbmQoJ1xuJykgPT0gbm90Rm91bmQpOwog
CiAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIxLDExICs1MjEs
MTEgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3goKQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIFN0cmluZyBzdHIgPSByZW5kZXJlci0+dGV4dCgpOwotICAgIGludCBzdGFy
dCA9IG1fb2Zmc2V0OwotICAgIGludCBlbmQgPSAobV9ub2RlID09IG1fZW5kQ29udGFpbmVyKSA/
IG1fZW5kT2Zmc2V0IDogSU5UX01BWDsKKyAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0Owor
ICAgIHVuc2lnbmVkIGVuZCA9IChtX25vZGUgPT0gbV9lbmRDb250YWluZXIpID8gbV9lbmRPZmZz
ZXQgOiBVSU5UX01BWDsKICAgICB3aGlsZSAobV90ZXh0Qm94KSB7Ci0gICAgICAgIGludCB0ZXh0
Qm94U3RhcnQgPSBtX3RleHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgIGludCBydW5TdGFydCA9IG1h
eCh0ZXh0Qm94U3RhcnQsIHN0YXJ0KTsKKyAgICAgICAgdW5zaWduZWQgdGV4dEJveFN0YXJ0ID0g
bV90ZXh0Qm94LT5zdGFydCgpOworICAgICAgICB1bnNpZ25lZCBydW5TdGFydCA9IG1heCh0ZXh0
Qm94U3RhcnQsIHN0YXJ0KTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgY29sbGFwc2VkIHNwYWNl
IGF0IHRoZSBzdGFydCBvZiB0aGlzIHJ1bi4KICAgICAgICAgSW5saW5lVGV4dEJveCogZmlyc3RU
ZXh0Qm94ID0gcmVuZGVyZXItPmNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkgPyBtX3NvcnRlZFRleHRC
b3hlc1swXSA6IHJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsKQEAgLTU0MSw4ICs1NDEsOCBAQCB2
b2lkIFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dEJveCgpCiAgICAgICAgICAgICAgICAgZW1pdENo
YXJhY3RlcignICcsIG1fbm9kZSwgMCwgcnVuU3RhcnQsIHJ1blN0YXJ0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpbnQgdGV4dEJveEVuZCA9IHRleHRCb3hTdGFy
dCArIG1fdGV4dEJveC0+bGVuKCk7Ci0gICAgICAgIGludCBydW5FbmQgPSBtaW4odGV4dEJveEVu
ZCwgZW5kKTsKKyAgICAgICAgdW5zaWduZWQgdGV4dEJveEVuZCA9IHRleHRCb3hTdGFydCArIG1f
dGV4dEJveC0+bGVuKCk7CisgICAgICAgIHVuc2lnbmVkIHJ1bkVuZCA9IG1pbih0ZXh0Qm94RW5k
LCBlbmQpOwogICAgICAgICAKICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoYXQgdGhlIG5leHQgdGV4
dCBib3ggd2lsbCBiZSwgYnV0IGRvbid0IGFkdmFuY2UgeWV0CiAgICAgICAgIElubGluZVRleHRC
b3gqIG5leHRUZXh0Qm94ID0gMDsKQEAgLTU2MCw4ICs1NjAsOCBAQCB2b2lkIFRleHRJdGVyYXRv
cjo6aGFuZGxlVGV4dEJveCgpCiAgICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignICcsIG1f
bm9kZSwgMCwgcnVuU3RhcnQsIHJ1blN0YXJ0ICsgMSk7CiAgICAgICAgICAgICAgICAgbV9vZmZz
ZXQgPSBydW5TdGFydCArIDE7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGludCBzdWJydW5FbmQgPSBzdHIuZmluZCgnXG4nLCBydW5TdGFydCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN1YnJ1bkVuZCA9PSAtMSB8fCBzdWJydW5FbmQgPiBydW5FbmQpCisgICAgICAgICAg
ICAgICAgc2l6ZV90IHN1YnJ1bkVuZCA9IHN0ci5maW5kKCdcbicsIHJ1blN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoc3VicnVuRW5kID09IG5vdEZvdW5kIHx8IHN1YnJ1bkVuZCA+IHJ1bkVu
ZCkKICAgICAgICAgICAgICAgICAgICAgc3VicnVuRW5kID0gcnVuRW5kOwogICAgIAogICAgICAg
ICAgICAgICAgIG1fb2Zmc2V0ID0gc3VicnVuRW5kOwpAQCAtNTcwLDExICs1NzAsMTEgQEAgdm9p
ZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3goKQogCiAgICAgICAgICAgICAvLyBJZiB3ZSBh
cmUgZG9pbmcgYSBzdWJydW4gdGhhdCBkb2Vzbid0IGdvIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQg
Ym94LAogICAgICAgICAgICAgLy8gY29tZSBiYWNrIGFnYWluIHRvIGZpbmlzaCBoYW5kbGluZyB0
aGlzIHRleHQgYm94OyBkb24ndCBhZHZhbmNlIHRvIHRoZSBuZXh0IG9uZS4KLSAgICAgICAgICAg
IGlmIChtX3Bvc2l0aW9uRW5kT2Zmc2V0IDwgdGV4dEJveEVuZCkKKyAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9wb3NpdGlvbkVuZE9mZnNldCkgPCB0ZXh0Qm94RW5kKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgLy8gQWR2YW5jZSBhbmQgcmV0
dXJuCi0gICAgICAgICAgICBpbnQgbmV4dFJ1blN0YXJ0ID0gbmV4dFRleHRCb3ggPyBuZXh0VGV4
dEJveC0+c3RhcnQoKSA6IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG5leHRS
dW5TdGFydCA9IG5leHRUZXh0Qm94ID8gbmV4dFRleHRCb3gtPnN0YXJ0KCkgOiBzdHIubGVuZ3Ro
KCk7CiAgICAgICAgICAgICBpZiAobmV4dFJ1blN0YXJ0ID4gcnVuRW5kKQogICAgICAgICAgICAg
ICAgIG1fbGFzdFRleHROb2RlRW5kZWRXaXRoQ29sbGFwc2VkU3BhY2UgPSB0cnVlOyAvLyBjb2xs
YXBzZWQgc3BhY2UgYmV0d2VlbiBydW5zIG9yIGF0IHRoZSBlbmQKICAgICAgICAgICAgIG1fdGV4
dEJveCA9IG5leHRUZXh0Qm94OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2
aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzMiw5ICszMzIsOSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHQoY29uc3QgU3RyCiAgICAgLy8gYW4gZXhpc3Rpbmcgc2VsZWN0aW9uOyBhdCB0aGUgbW9tZW50
IHRoZXkgY2FuIGVpdGhlciBwdXQgdGhlIGNhcmV0IGFmdGVyIHdoYXQncyBpbnNlcnRlZCBvcgog
ICAgIC8vIHNlbGVjdCB3aGF0J3MgaW5zZXJ0ZWQsIGJ1dCB0aGVyZSdzIG5vIHdheSB0byAiZXh0
ZW5kIHNlbGVjdGlvbiIgdG8gaW5jbHVkZSBib3RoIGFuIG9sZCBzZWxlY3Rpb24KICAgICAvLyB0
aGF0IGVuZHMganVzdCBiZWZvcmUgd2hlcmUgd2Ugd2FudCB0byBpbnNlcnQgdGV4dCBhbmQgdGhl
IG5ld2x5IGluc2VydGVkIHRleHQuCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgaW50IG5ld2xp
bmU7Ci0gICAgd2hpbGUgKChuZXdsaW5lID0gdGV4dC5maW5kKCdcbicsIG9mZnNldCkpICE9IC0x
KSB7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICBzaXplX3QgbmV3bGluZTsKKyAgICB3
aGlsZSAoKG5ld2xpbmUgPSB0ZXh0LmZpbmQoJ1xuJywgb2Zmc2V0KSkgIT0gbm90Rm91bmQpIHsK
ICAgICAgICAgaWYgKG5ld2xpbmUgIT0gb2Zmc2V0KQogICAgICAgICAgICAgaW5zZXJ0VGV4dFJ1
bldpdGhvdXROZXdsaW5lcyh0ZXh0LnN1YnN0cmluZyhvZmZzZXQsIG5ld2xpbmUgLSBvZmZzZXQp
LCBmYWxzZSk7CiAgICAgICAgIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpOwpAQCAtMzQzLDcg
KzM0Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChjb25zdCBTdHIKICAgICBp
ZiAoIW9mZnNldCkKICAgICAgICAgaW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyh0ZXh0LCBz
ZWxlY3RJbnNlcnRlZFRleHQpOwogICAgIGVsc2UgewotICAgICAgICBpbnQgbGVuZ3RoID0gdGV4
dC5sZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKICAg
ICAgICAgaWYgKGxlbmd0aCAhPSBvZmZzZXQpCiAgICAgICAgICAgICBpbnNlcnRUZXh0UnVuV2l0
aG91dE5ld2xpbmVzKHRleHQuc3Vic3RyaW5nKG9mZnNldCwgbGVuZ3RoIC0gb2Zmc2V0KSwgc2Vs
ZWN0SW5zZXJ0ZWRUZXh0KTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gNjU0
NjUpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEw
MSw3ICsxMTAxLDcgQEAgc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZyb21TdHJpbmcoQ29udAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKHN0cmluZy5maW5kKCdcbicpID09
IC0xKTsKKyAgICBBU1NFUlQoc3RyaW5nLmZpbmQoJ1xuJykgPT0gbm90Rm91bmQpOwogCiAgICAg
VmVjdG9yPFN0cmluZz4gdGFiTGlzdDsKICAgICBzdHJpbmcuc3BsaXQoJ1x0JywgdHJ1ZSwgdGFi
TGlzdCk7CkBAIC0xMTg0LDcgKzExODQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtCiAgICAgfQogCiAgICAgLy8gQSBzdHJpbmcgd2l0aCBubyBuZXdsaW5lcyBn
ZXRzIGFkZGVkIGlubGluZSwgcmF0aGVyIHRoYW4gYmVpbmcgcHV0IGludG8gYSBwYXJhZ3JhcGgu
Ci0gICAgaWYgKHN0cmluZy5maW5kKCdcbicpID09IC0xKSB7CisgICAgaWYgKHN0cmluZy5maW5k
KCdcbicpID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKGZy
YWdtZW50LmdldCgpLCBzdHJpbmcpOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgp
OwogICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9GaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvRmlsZS5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9odG1sL0ZpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHZvaWQgRmlsZTo6SW5pdCgpCiB7
CiAgICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0
aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiB1cG9uIGZh
aWx1cmUuCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSA9IG5hbWUoKTsKLSAgICBpbnQgaW5k
ZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOwotICAgIGlmIChpbmRleCAhPSAtMSkKKyAg
ICBzaXplX3QgaW5kZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGlmIChpbmRl
eCAhPSBub3RGb3VuZCkKICAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlN
RVR5cGVGb3JFeHRlbnNpb24oZmlsZU5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSkpOwogfQogCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDEx
ICszODEsMTEgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0SG9zdChjb25zdCBTdAogICAg
IGlmICghdXJsLmNhblNldEhvc3RPclBvcnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50
IHNlcGFyYXRvciA9IHZhbHVlLmZpbmQoJzonKTsKKyAgICBzaXplX3Qgc2VwYXJhdG9yID0gdmFs
dWUuZmluZCgnOicpOwogICAgIGlmICghc2VwYXJhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoc2VwYXJhdG9yID09IC0xKQorICAgIGlmIChzZXBhcmF0b3IgPT0gbm90Rm91bmQpCiAg
ICAgICAgIHVybC5zZXRIb3N0QW5kUG9ydCh2YWx1ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHVu
c2lnbmVkIHBvcnRFbmQ7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lv
biA2NTQ2NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODksOCArODksOCBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmliCiAgIAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKICAgICAgICAg
bV9zZXJ2aWNlVHlwZSA9IHZhbHVlLnN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgIGludCBwb3Mg
PSBtX3NlcnZpY2VUeXBlLmZpbmQoIjsiKTsKLSAgICAgICAgaWYgKHBvcyAhPSAtMSkKKyAgICAg
ICAgc2l6ZV90IHBvcyA9IG1fc2VydmljZVR5cGUuZmluZCgiOyIpOworICAgICAgICBpZiAocG9z
ICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgbV9zZXJ2aWNlVHlwZSA9IG1fc2VydmljZVR5cGUu
bGVmdChwb3MpOwogICAgICAgICBpZiAoIWlzSW1hZ2VUeXBlKCkgJiYgbV9pbWFnZUxvYWRlcikK
ICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIuY2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjYsNyArNTI2
LDcgQEAgc3RhdGljIGJvb2wgaXNOb3RMaW5lQnJlYWsoVUNoYXIgY2gpIHsgcgogYm9vbCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNQbGFjZWhvbGRlckVtcHR5KCkgY29uc3QKIHsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlKHBsYWNl
aG9sZGVyQXR0cik7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlLnN0cmluZygpLmZpbmQoaXNO
b3RMaW5lQnJlYWspID09IC0xOworICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZS5zdHJpbmcoKS5m
aW5kKGlzTm90TGluZUJyZWFrKSA9PSBub3RGb3VuZDsKIH0KIAogYm9vbCBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTQ2NSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCwx
MSBAQCBSZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXCiB2b2lkIEhUTUxP
YmplY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAg
ICAgU3RyaW5nIHZhbCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaW50IHBvczsKKyAgICBzaXplX3Qg
cG9zOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKICAgICAgICAgbV9zZXJ2
aWNlVHlwZSA9IHZhbC5sb3dlcigpOwogICAgICAgICBwb3MgPSBtX3NlcnZpY2VUeXBlLmZpbmQo
IjsiKTsKLSAgICAgICAgaWYgKHBvcyAhPSAtMSkKKyAgICAgICAgaWYgKHBvcyAhPSBub3RGb3Vu
ZCkKICAgICAgICAgICBtX3NlcnZpY2VUeXBlID0gbV9zZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7CiAg
ICAgICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICAgIG1fbmVlZFdpZGdldFVwZGF0ZSA9IHRy
dWU7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lv
biA2NTQ2NSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMwLDcgKzYzMCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBl
cmZvcm1TZWFyY2goY28KICAgICAvLyAyKSBUaGVyZSBpcyBubyBuZWVkIHRvIHB1c2ggYWxsIHNl
YXJjaCByZXN1bHRzIHRvIHRoZSBmcm9udC1lbmQgYXQgYSB0aW1lLCBwdXNoaW5nIG5leHQgLyBw
cmV2aW91cyByZXN1bHQKICAgICAvLyAgICBpcyBzdWZmaWNpZW50LgogCi0gICAgaW50IHF1ZXJ5
TGVuZ3RoID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBx
dWVyeUxlbmd0aCA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkubGVuZ3RoKCk7CiAgICAgYm9vbCBz
dGFydFRhZ0ZvdW5kID0gIXdoaXRlc3BhY2VUcmltbWVkUXVlcnkuZmluZCgnPCcpOwogICAgIGJv
b2wgZW5kVGFnRm91bmQgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LnJldmVyc2VGaW5kKCc+Jykg
KyAxID09IHF1ZXJ5TGVuZ3RoOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJD
b3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQsMTYgKzc0LDE2IEBAIHN0YXRpYyB2b2lkIGFkZFRvQWNjZXNzQ29udHJvbEFs
bG93TGlzdCgKIHRlbXBsYXRlPGNsYXNzIEhhc2hUeXBlPgogc3RhdGljIGJvb2wgcGFyc2VBY2Nl
c3NDb250cm9sQWxsb3dMaXN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBIYXNoU2V0PFN0cmluZywg
SGFzaFR5cGU+JiBzZXQpCiB7Ci0gICAgaW50IHN0YXJ0ID0gMDsKLSAgICBpbnQgZW5kOwotICAg
IHdoaWxlICgoZW5kID0gc3RyaW5nLmZpbmQoJywnLCBzdGFydCkpICE9IC0xKSB7CisgICAgdW5z
aWduZWQgc3RhcnQgPSAwOworICAgIHNpemVfdCBlbmQ7CisgICAgd2hpbGUgKChlbmQgPSBzdHJp
bmcuZmluZCgnLCcsIHN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgaWYgKHN0YXJ0ID09
IGVuZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBhZGRUb0FjY2Vzc0Nv
bnRyb2xBbGxvd0xpc3Qoc3RyaW5nLCBzdGFydCwgZW5kIC0gMSwgc2V0KTsKICAgICAgICAgc3Rh
cnQgPSBlbmQgKyAxOwogICAgIH0KLSAgICBpZiAoc3RhcnQgIT0gc3RhdGljX2Nhc3Q8aW50Pihz
dHJpbmcubGVuZ3RoKCkpKQorICAgIGlmIChzdGFydCAhPSBzdHJpbmcubGVuZ3RoKCkpCiAgICAg
ICAgIGFkZFRvQWNjZXNzQ29udHJvbEFsbG93TGlzdChzdHJpbmcsIHN0YXJ0LCBzdHJpbmcubGVu
Z3RoKCkgLSAxLCBzZXQpOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01h
aW5SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9sb2FkZXIv
TWFpblJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDggKzMwNSw4IEBA
IHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpzdWJzdGl0dXRlTUlNRVQKICAgICBpZiAoZmlsZW5h
bWUuZW5kc1dpdGgoIi8iKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGV4dGVuc2lvblBv
cyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGV4dGVuc2lvblBvcyA9PSAt
MSkKKyAgICBzaXplX3QgZXh0ZW5zaW9uUG9zID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsK
KyAgICBpZiAoZXh0ZW5zaW9uUG9zID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAKICAg
ICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEp
OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2OCw4ICs5
NjgsOCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzCiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcihjb25zdCBVQ2hhciogaGVhZGVyLCBzaXplX3QgaGVh
ZGVyTGVuZ3RoLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBpbnQgcG9zID0g
ZmluZChoZWFkZXIsIGhlYWRlckxlbmd0aCwgJzonKTsKLSAgICBBU1NFUlQocG9zICE9IC0xKTsK
KyAgICBzaXplX3QgcG9zID0gZmluZChoZWFkZXIsIGhlYWRlckxlbmd0aCwgJzonKTsKKyAgICBB
U1NFUlQocG9zICE9IG5vdEZvdW5kKTsKICAgICAKICAgICBBdG9taWNTdHJpbmcgaGVhZGVyTmFt
ZSA9IEF0b21pY1N0cmluZyhoZWFkZXIsIHBvcyk7CiAgICAgU3RyaW5nIGhlYWRlclZhbHVlID0g
U3RyaW5nKGhlYWRlciArIHBvcyArIDEsIGhlYWRlckxlbmd0aCAtIHBvcyAtIDEpOwpAQCAtOTc5
LDkgKzk3OSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcihjb25zdCBVQ2gKIAog
c3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25zdCBTdHJpbmcmIGhlYWRlcnMsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIGludCBzdGFydFBvcyA9IDA7Ci0gICAg
aW50IGVuZFBvczsKLSAgICB3aGlsZSAoKGVuZFBvcyA9IGhlYWRlcnMuZmluZCgnXG4nLCBzdGFy
dFBvcykpICE9IC0xKSB7CisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgIHNpemVfdCBl
bmRQb3M7CisgICAgd2hpbGUgKChlbmRQb3MgPSBoZWFkZXJzLmZpbmQoJ1xuJywgc3RhcnRQb3Mp
KSAhPSBub3RGb3VuZCkgewogICAgICAgICBBU1NFUlQoc3RhcnRQb3MgIT0gZW5kUG9zKTsKIAog
ICAgICAgICBwYXJzZUhlYWRlcihoZWFkZXJzLmNoYXJhY3RlcnMoKSArIHN0YXJ0UG9zLCBlbmRQ
b3MgLSBzdGFydFBvcywgcmVzcG9uc2UpOwpAQCAtOTg5LDcgKzk4OSw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3QKICAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3Mg
KyAxOwogICAgIH0KICAgICAKLSAgICBpZiAoc3RhcnRQb3MgIT0gc3RhdGljX2Nhc3Q8aW50Piho
ZWFkZXJzLmxlbmd0aCgpKSkKKyAgICBpZiAoc3RhcnRQb3MgIT0gaGVhZGVycy5sZW5ndGgoKSkK
ICAgICAgICAgcGFyc2VIZWFkZXIoaGVhZGVycy5jaGFyYWN0ZXJzKCksIGhlYWRlcnMubGVuZ3Ro
KCksIHJlc3BvbnNlKTsKIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkZl
dGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkZldGNoZXIu
Y3BwCShyZXZpc2lvbiA2NTQ2NSkKKysrIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkZldGNoZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw4ICs4Nyw4IEBAIHN0YXRpYyB2b2lkIHBhcnNlSWNv
bkxpbmsoSFRNTExpbmtFbGVtZW4KICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIHR5
cGUuCiAgICAgU3RyaW5nIHBhdGggPSB1cmwucGF0aCgpOwogICAgIAotICAgIGludCBwb3MgPSBw
YXRoLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKHBvcyA+PSAwKSB7CisgICAgc2l6ZV90IHBv
cyA9IHBhdGgucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBpZiAocG9zICE9IG5vdEZvdW5kKSB7CiAg
ICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoLnN1YnN0cmluZyhwb3MgKyAxKTsKICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbiwgImljbnMiKSkKICAgICAgICAgICAg
IHR5cGUgPSBJY29uTGlua0VudHJ5OjpJQ05TOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9u
IDY1NDY1KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzMSwyMCArMzMxLDIwIEBAIHZvaWQgRE9NV2luZG93OjpwYXJzZU1vZGFsRGlhbG9nRmVhdHVy
ZXMKICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZmVhdHVyZXMuZW5k
KCk7CiAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU3RyaW5nIHMgPSAqaXQ7Ci0g
ICAgICAgIGludCBwb3MgPSBzLmZpbmQoJz0nKTsKLSAgICAgICAgaW50IGNvbG9uUG9zID0gcy5m
aW5kKCc6Jyk7Ci0gICAgICAgIGlmIChwb3MgPj0gMCAmJiBjb2xvblBvcyA+PSAwKQorICAgICAg
ICBzaXplX3QgcG9zID0gcy5maW5kKCc9Jyk7CisgICAgICAgIHNpemVfdCBjb2xvblBvcyA9IHMu
ZmluZCgnOicpOworICAgICAgICBpZiAocG9zICE9IG5vdEZvdW5kICYmIGNvbG9uUG9zICE9IG5v
dEZvdW5kKQogICAgICAgICAgICAgY29udGludWU7IC8vIGlnbm9yZSBhbnkgc3RyaW5ncyB0aGF0
IGhhdmUgYm90aCA9IGFuZCA6Ci0gICAgICAgIGlmIChwb3MgPCAwKQorICAgICAgICBpZiAocG9z
ID09IG5vdEZvdW5kKQogICAgICAgICAgICAgcG9zID0gY29sb25Qb3M7Ci0gICAgICAgIGlmIChw
b3MgPCAwKSB7CisgICAgICAgIGlmIChwb3MgPT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIC8v
IG51bGwgc3RyaW5nIGZvciB2YWx1ZSBtZWFucyBrZXkgd2l0aG91dCB2YWx1ZQogICAgICAgICAg
ICAgbWFwLnNldChzLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCksIFN0cmluZygpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBzLmxlZnQocG9zKS5zdHJpcFdo
aXRlU3BhY2UoKS5sb3dlcigpOwogICAgICAgICAgICAgU3RyaW5nIHZhbCA9IHMuc3Vic3RyaW5n
KHBvcyArIDEpLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0gICAgICAgICAgICBpbnQgc3Bh
Y2VQb3MgPSB2YWwuZmluZCgnICcpOwotICAgICAgICAgICAgaWYgKHNwYWNlUG9zICE9IC0xKQor
ICAgICAgICAgICAgc2l6ZV90IHNwYWNlUG9zID0gdmFsLmZpbmQoJyAnKTsKKyAgICAgICAgICAg
IGlmIChzcGFjZVBvcyAhPSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICB2YWwgPSB2YWwubGVm
dChzcGFjZVBvcyk7CiAgICAgICAgICAgICBtYXAuc2V0KGtleSwgdmFsKTsKICAgICAgICAgfQpJ
bmRleDogV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCShyZXZpc2lvbiA2NTQ2NSkKKysrIFdlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NywxMyArMzY3LDEz
IEBAIHN0YXRpYyBjb25zdCBjaGFyIFNlcGFyYXRvckNoYXJhY3RlciA9ICcKIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQogeyAKICAgICAvLyBNYWtlIHN1
cmUgdGhlcmUncyBhIGZpcnN0IHNlcGFyYXRvcgotICAgIGludCBzZXBhcmF0b3IxID0gZGF0YWJh
c2VJZGVudGlmaWVyLmZpbmQoU2VwYXJhdG9yQ2hhcmFjdGVyKTsKLSAgICBpZiAoc2VwYXJhdG9y
MSA9PSAtMSkKKyAgICBzaXplX3Qgc2VwYXJhdG9yMSA9IGRhdGFiYXNlSWRlbnRpZmllci5maW5k
KFNlcGFyYXRvckNoYXJhY3Rlcik7CisgICAgaWYgKHNlcGFyYXRvcjEgPT0gbm90Rm91bmQpCiAg
ICAgICAgIHJldHVybiBjcmVhdGUoS1VSTCgpKTsKICAgICAgICAgCiAgICAgLy8gTWFrZSBzdXJl
IHRoZXJlJ3MgYSBzZWNvbmQgc2VwYXJhdG9yCi0gICAgaW50IHNlcGFyYXRvcjIgPSBkYXRhYmFz
ZUlkZW50aWZpZXIucmV2ZXJzZUZpbmQoU2VwYXJhdG9yQ2hhcmFjdGVyKTsKLSAgICBpZiAoc2Vw
YXJhdG9yMiA9PSAtMSkKKyAgICBzaXplX3Qgc2VwYXJhdG9yMiA9IGRhdGFiYXNlSWRlbnRpZmll
ci5yZXZlcnNlRmluZChTZXBhcmF0b3JDaGFyYWN0ZXIpOworICAgIGlmIChzZXBhcmF0b3IyID09
IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gY3JlYXRlKEtVUkwoKSk7CiAgICAgICAgIAogICAg
IC8vIEVuc3VyZSB0aGVyZSB3ZXJlIGF0IGxlYXN0IDIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuIFNv
bWUgaG9zdG5hbWVzIG9uIGludHJhbmV0cyBoYXZlCkBAIC0zODQsNyArMzg0LDcgQEAgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaQogICAgIC8vIE1ha2Ugc3VyZSB0aGUg
cG9ydCBzZWN0aW9uIGlzIGEgdmFsaWQgcG9ydCBudW1iZXIgb3IgZG9lc24ndCBleGlzdAogICAg
IGJvb2wgcG9ydE9rYXk7CiAgICAgaW50IHBvcnQgPSBkYXRhYmFzZUlkZW50aWZpZXIucmlnaHQo
ZGF0YWJhc2VJZGVudGlmaWVyLmxlbmd0aCgpIC0gc2VwYXJhdG9yMiAtIDEpLnRvSW50KCZwb3J0
T2theSk7Ci0gICAgYm9vbCBwb3J0QWJzZW50ID0gKHNlcGFyYXRvcjIgPT0gc3RhdGljX2Nhc3Q8
aW50PihkYXRhYmFzZUlkZW50aWZpZXIubGVuZ3RoKCkpIC0gMSk7CisgICAgYm9vbCBwb3J0QWJz
ZW50ID0gKHNlcGFyYXRvcjIgPT0gZGF0YWJhc2VJZGVudGlmaWVyLmxlbmd0aCgpIC0gMSk7CiAg
ICAgaWYgKCEocG9ydE9rYXkgfHwgcG9ydEFic2VudCkpCiAgICAgICAgIHJldHVybiBjcmVhdGUo
S1VSTCgpKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3Bw
CShyZXZpc2lvbiA2NTQ2NSkKKysrIFdlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxNCArNjMsMTQgQEAgYm9vbCBVc2VyQ29udGVudFVS
TFBhdHRlcm46OnBhcnNlKGNvbnN0IAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RyaW5nLCBzY2hlbWVTZXBhcmF0b3IsICgiOi8vIikpOwogCi0gICAgaW50IHNjaGVtZUVuZFBv
cyA9IHBhdHRlcm4uZmluZChzY2hlbWVTZXBhcmF0b3IpOwotICAgIGlmIChzY2hlbWVFbmRQb3Mg
PT0gLTEpCisgICAgc2l6ZV90IHNjaGVtZUVuZFBvcyA9IHBhdHRlcm4uZmluZChzY2hlbWVTZXBh
cmF0b3IpOworICAgIGlmIChzY2hlbWVFbmRQb3MgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIG1fc2NoZW1lID0gcGF0dGVybi5sZWZ0KHNjaGVtZUVuZFBvcyk7CiAK
LSAgICBpbnQgaG9zdFN0YXJ0UG9zID0gc2NoZW1lRW5kUG9zICsgc2NoZW1lU2VwYXJhdG9yLmxl
bmd0aCgpOwotICAgIGlmIChob3N0U3RhcnRQb3MgPj0gc3RhdGljX2Nhc3Q8aW50PihwYXR0ZXJu
Lmxlbmd0aCgpKSkKKyAgICB1bnNpZ25lZCBob3N0U3RhcnRQb3MgPSBzY2hlbWVFbmRQb3MgKyBz
Y2hlbWVTZXBhcmF0b3IubGVuZ3RoKCk7CisgICAgaWYgKGhvc3RTdGFydFBvcyA+PSBwYXR0ZXJu
Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQgcGF0aFN0YXJ0UG9z
ID0gMDsKQEAgLTc4LDggKzc4LDggQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46OnBhcnNl
KGNvbnN0IAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtX3NjaGVtZSwgImZpbGUiKSkKICAg
ICAgICAgcGF0aFN0YXJ0UG9zID0gaG9zdFN0YXJ0UG9zOwogICAgIGVsc2UgewotICAgICAgICBp
bnQgaG9zdEVuZFBvcyA9IHBhdHRlcm4uZmluZCgiLyIsIGhvc3RTdGFydFBvcyk7Ci0gICAgICAg
IGlmIChob3N0RW5kUG9zID09IC0xKQorICAgICAgICBzaXplX3QgaG9zdEVuZFBvcyA9IHBhdHRl
cm4uZmluZCgiLyIsIGhvc3RTdGFydFBvcyk7CisgICAgICAgIGlmIChob3N0RW5kUG9zID09IG5v
dEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIG1faG9zdCA9IHBh
dHRlcm4uc3Vic3RyaW5nKGhvc3RTdGFydFBvcywgaG9zdEVuZFBvcyAtIGhvc3RTdGFydFBvcyk7
CkBAIC05Niw3ICs5Niw3IEBAIGJvb2wgVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjpwYXJzZShjb25z
dCAKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vIG90aGVyICcqJyBjYW4gb2NjdXIgaW4gdGhl
IGhvc3QuCi0gICAgICAgIGlmIChtX2hvc3QuZmluZCgiKiIpICE9IC0xKQorICAgICAgICBpZiAo
bV9ob3N0LmZpbmQoIioiKSAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICBwYXRoU3RhcnRQb3MgPSBob3N0RW5kUG9zOwpJbmRleDogV2ViQ29yZS9wYWdl
L1hTU0F1ZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmNw
cAkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwNSwxMCArNDA1LDEwIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmluZEluUmVx
dWVzdChGcmFtZSogZnIKIAogICAgIFN0cmluZyBkZWNvZGVkUGFnZVVSTCA9IG1fcGFnZVVSTENh
Y2hlLmNhbm9uaWNhbGl6ZVVSTChwYWdlVVJMLCBmcmFtZS0+ZG9jdW1lbnQoKS0+ZGVjb2Rlcigp
LT5lbmNvZGluZygpLCB0YXNrLmRlY29kZUVudGl0aWVzLCB0YXNrLmRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc1R3aWNlKTsKIAotICAgIGlmICh0YXNrLmFsbG93UmVxdWVzdElmTm9JbGxlZ2FsVVJJ
Q2hhcmFjdGVycyAmJiAhaGFzRm9ybURhdGEgJiYgZGVjb2RlZFBhZ2VVUkwuZmluZCgmaXNJbGxl
Z2FsVVJJQ2hhcmFjdGVyLCAwKSA9PSAtMSkKKyAgICBpZiAodGFzay5hbGxvd1JlcXVlc3RJZk5v
SWxsZWdhbFVSSUNoYXJhY3RlcnMgJiYgIWhhc0Zvcm1EYXRhICYmIGRlY29kZWRQYWdlVVJMLmZp
bmQoJmlzSWxsZWdhbFVSSUNoYXJhY3RlciwgMCkgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gSW5qZWN0aW9uIGlzIGltcG9zc2libGUgYmVjYXVzZSB0aGUgcmVxdWVzdCBk
b2VzIG5vdCBjb250YWluIGFueSBpbGxlZ2FsIFVSSSBjaGFyYWN0ZXJzLgogCi0gICAgaWYgKGRl
Y29kZWRQYWdlVVJMLmZpbmQoY2Fub25pY2FsaXplZFN0cmluZywgMCwgZmFsc2UpICE9IC0xKQor
ICAgIGlmIChkZWNvZGVkUGFnZVVSTC5maW5kKGNhbm9uaWNhbGl6ZWRTdHJpbmcsIDAsIGZhbHNl
KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFdlJ3ZlIGZvdW5kIHRoZSBz
dHJpbmcgaW4gdGhlIEdFVCBkYXRhLgogCiAgICAgaWYgKGhhc0Zvcm1EYXRhKSB7CkBAIC00MjMs
NyArNDIzLDcgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaW5kSW5SZXF1ZXN0KEZyYW1lKiBmcgogICAg
ICAgICBpZiAobV9mb3JtRGF0YVN1ZmZpeFRyZWUgJiYgIW1fZm9ybURhdGFTdWZmaXhUcmVlLT5t
aWdodENvbnRhaW4oY2Fub25pY2FsaXplZFN0cmluZykpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgaWYgKGRlY29kZWRGb3JtRGF0YS5maW5kKGNhbm9uaWNhbGl6ZWRTdHJp
bmcsIDAsIGZhbHNlKSAhPSAtMSkKKyAgICAgICAgaWYgKGRlY29kZWRGb3JtRGF0YS5maW5kKGNh
bm9uaWNhbGl6ZWRTdHJpbmcsIDAsIGZhbHNlKSAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOyAvLyBXZSBmb3VuZCB0aGUgc3RyaW5nIGluIHRoZSBQT1NUIGRhdGEuCiAgICAg
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAkocmV2aXNpb24gNjU0NjUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQg
KzQxLDE0IEBAIFN0cmluZyBDb250ZW50VHlwZTo6cGFyYW1ldGVyKGNvbnN0IFN0cmkKICAgICBT
dHJpbmcgc3RyaXBwZWRUeXBlID0gbV90eXBlLnN0cmlwV2hpdGVTcGFjZSgpOwogCiAgICAgLy8g
YSBNSU1FIHR5cGUgY2FuIGhhdmUgb25lIG9yIG1vcmUgInBhcmFtPXZhbHVlIiBhZnRlciBhIHNl
bWktY29sb24sIGFuZCBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IHNlbWktY29sb25zCi0g
ICAgaW50IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmluZCgnOycpOwotICAgIGlmIChzZW1pICE9IC0x
KSB7Ci0gICAgICAgIGludCBzdGFydCA9IHN0cmlwcGVkVHlwZS5maW5kKHBhcmFtZXRlck5hbWUs
IHNlbWkgKyAxLCBmYWxzZSk7Ci0gICAgICAgIGlmIChzdGFydCAhPSAtMSkgeworICAgIHNpemVf
dCBzZW1pID0gc3RyaXBwZWRUeXBlLmZpbmQoJzsnKTsKKyAgICBpZiAoc2VtaSAhPSBub3RGb3Vu
ZCkgeworICAgICAgICBzaXplX3Qgc3RhcnQgPSBzdHJpcHBlZFR5cGUuZmluZChwYXJhbWV0ZXJO
YW1lLCBzZW1pICsgMSwgZmFsc2UpOworICAgICAgICBpZiAoc3RhcnQgIT0gbm90Rm91bmQpIHsK
ICAgICAgICAgICAgIHN0YXJ0ID0gc3RyaXBwZWRUeXBlLmZpbmQoJz0nLCBzdGFydCArIDYpOwot
ICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgaW50IGVuZCA9
IHN0cmlwcGVkVHlwZS5maW5kKCc7Jywgc3RhcnQgKyA2KTsKLSAgICAgICAgICAgICAgICBpZiAo
ZW5kID09IC0xKQorICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IG5vdEZvdW5kKSB7CisgICAgICAg
ICAgICAgICAgc2l6ZV90IGVuZCA9IHN0cmlwcGVkVHlwZS5maW5kKCc7Jywgc3RhcnQgKyA2KTsK
KyAgICAgICAgICAgICAgICBpZiAoZW5kID09IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgICAg
ICBlbmQgPSBzdHJpcHBlZFR5cGUubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
VmFsdWUgPSBzdHJpcHBlZFR5cGUuc3Vic3RyaW5nKHN0YXJ0ICsgMSwgZW5kIC0gKHN0YXJ0ICsg
MSkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgfQpAQCAtNjMsOCArNjMsOCBAQCBT
dHJpbmcgQ29udGVudFR5cGU6OnR5cGUoKSBjb25zdAogICAgIFN0cmluZyBzdHJpcHBlZFR5cGUg
PSBtX3R5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICAvLyAidHlwZSIgY2FuIGhhdmUgcGFy
YW1ldGVycyBhZnRlciBhIHNlbWktY29sb24sIHN0cmlwIHRoZW0KLSAgICBpbnQgc2VtaSA9IHN0
cmlwcGVkVHlwZS5maW5kKCc7Jyk7Ci0gICAgaWYgKHNlbWkgIT0gLTEpCisgICAgc2l6ZV90IHNl
bWkgPSBzdHJpcHBlZFR5cGUuZmluZCgnOycpOworICAgIGlmIChzZW1pICE9IG5vdEZvdW5kKQog
ICAgICAgICBzdHJpcHBlZFR5cGUgPSBzdHJpcHBlZFR5cGUubGVmdChzZW1pKS5zdHJpcFdoaXRl
U3BhY2UoKTsKIAogICAgIHJldHVybiBzdHJpcHBlZFR5cGU7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJl
dmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUxLDEyICs1NTEsMTIgQEAgU3RyaW5nIEtVUkw6Omxhc3RQYXRoQ29tcG9uZW50KCkg
Y29uc3QKICAgICBpZiAoIWhhc1BhdGgoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0g
ICAgaW50IGVuZCA9IG1fcGF0aEVuZCAtIDE7CisgICAgdW5zaWduZWQgZW5kID0gbV9wYXRoRW5k
IC0gMTsKICAgICBpZiAobV9zdHJpbmdbZW5kXSA9PSAnLycpCiAgICAgICAgIC0tZW5kOwogCi0g
ICAgaW50IHN0YXJ0ID0gbV9zdHJpbmcucmV2ZXJzZUZpbmQoJy8nLCBlbmQpOwotICAgIGlmIChz
dGFydCA8IG1fcG9ydEVuZCkKKyAgICBzaXplX3Qgc3RhcnQgPSBtX3N0cmluZy5yZXZlcnNlRmlu
ZCgnLycsIGVuZCk7CisgICAgaWYgKHN0YXJ0IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcG9y
dEVuZCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICArK3N0YXJ0OwogCkBAIC02NzUs
NyArNjc1LDcgQEAgU3RyaW5nIEtVUkw6OnBhdGgoKSBjb25zdAogYm9vbCBLVVJMOjpzZXRQcm90
b2NvbChjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgLy8gRmlyZWZveCBhbmQgSUUgcmVtb3ZlIGV2
ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0ICc6Jy4KLSAgICBpbnQgc2VwYXJhdG9yUG9zaXRpb24g
PSBzLmZpbmQoJzonKTsKKyAgICBzaXplX3Qgc2VwYXJhdG9yUG9zaXRpb24gPSBzLmZpbmQoJzon
KTsKICAgICBTdHJpbmcgbmV3UHJvdG9jb2wgPSBzLnN1YnN0cmluZygwLCBzZXBhcmF0b3JQb3Np
dGlvbik7CiAKICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbChuZXdQcm90b2NvbCkpCkBAIC04ODIs
MTMgKzg4MiwxMyBAQCBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0CiAK
ICAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsKIAotICAgIGludCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7
Ci0gICAgaW50IGRlY29kZWRQb3NpdGlvbiA9IDA7Ci0gICAgaW50IHNlYXJjaFBvc2l0aW9uID0g
MDsKLSAgICBpbnQgZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1blBv
c2l0aW9uID0gc3RyLmZpbmQoJyUnLCBzZWFyY2hQb3NpdGlvbikpID49IDApIHsKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgZGVjb2RlZFBvc2l0aW9u
ID0gMDsKKyAgICB1bnNpZ25lZCBzZWFyY2hQb3NpdGlvbiA9IDA7CisgICAgc2l6ZV90IGVuY29k
ZWRSdW5Qb3NpdGlvbjsKKyAgICB3aGlsZSAoKGVuY29kZWRSdW5Qb3NpdGlvbiA9IHN0ci5maW5k
KCclJywgc2VhcmNoUG9zaXRpb24pKSAhPSBub3RGb3VuZCkgewogICAgICAgICAvLyBGaW5kIHRo
ZSBzZXF1ZW5jZSBvZiAlLWVzY2FwZSBjb2Rlcy4KLSAgICAgICAgaW50IGVuY29kZWRSdW5FbmQg
PSBlbmNvZGVkUnVuUG9zaXRpb247CisgICAgICAgIHVuc2lnbmVkIGVuY29kZWRSdW5FbmQgPSBl
bmNvZGVkUnVuUG9zaXRpb247CiAgICAgICAgIHdoaWxlIChsZW5ndGggLSBlbmNvZGVkUnVuRW5k
ID49IDMKICAgICAgICAgICAgICAgICAmJiBzdHJbZW5jb2RlZFJ1bkVuZF0gPT0gJyUnCiAgICAg
ICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cltlbmNvZGVkUnVuRW5kICsgMV0pCkBA
IC0xNjE0LDEzICsxNjE0LDEzIEBAIHN0YXRpYyB2b2lkIGVuY29kZVJlbGF0aXZlU3RyaW5nKGNv
bnN0IFMKIAogc3RhdGljIFN0cmluZyBzdWJzdGl0dXRlQmFja3NsYXNoZXMoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiB7Ci0gICAgaW50IHF1ZXN0aW9uUG9zID0gc3RyaW5nLmZpbmQoJz8nKTsKLSAg
ICBpbnQgaGFzaFBvcyA9IHN0cmluZy5maW5kKCcjJyk7Ci0gICAgaW50IHBhdGhFbmQ7CisgICAg
c2l6ZV90IHF1ZXN0aW9uUG9zID0gc3RyaW5nLmZpbmQoJz8nKTsKKyAgICBzaXplX3QgaGFzaFBv
cyA9IHN0cmluZy5maW5kKCcjJyk7CisgICAgdW5zaWduZWQgcGF0aEVuZDsKIAotICAgIGlmICho
YXNoUG9zID49IDAgJiYgKHF1ZXN0aW9uUG9zIDwgMCB8fCBxdWVzdGlvblBvcyA+IGhhc2hQb3Mp
KQorICAgIGlmIChoYXNoUG9zICE9IG5vdEZvdW5kICYmIChxdWVzdGlvblBvcyA9PSBub3RGb3Vu
ZCB8fCBxdWVzdGlvblBvcyA+IGhhc2hQb3MpKQogICAgICAgICBwYXRoRW5kID0gaGFzaFBvczsK
LSAgICBlbHNlIGlmIChxdWVzdGlvblBvcyA+PSAwKQorICAgIGVsc2UgaWYgKHF1ZXN0aW9uUG9z
ICE9IG5vdEZvdW5kKQogICAgICAgICBwYXRoRW5kID0gcXVlc3Rpb25Qb3M7CiAgICAgZWxzZQog
ICAgICAgICBwYXRoRW5kID0gc3RyaW5nLmxlbmd0aCgpOwpAQCAtMTc5OSwxMyArMTc5OSwxMiBA
QCBib29sIHBvcnRBbGxvd2VkKGNvbnN0IEtVUkwmIHVybCkKIFN0cmluZyBtaW1lVHlwZUZyb21E
YXRhVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIEFTU0VSVChwcm90b2NvbElzKHVybCwg
ImRhdGEiKSk7Ci0gICAgaW50IGluZGV4ID0gdXJsLmZpbmQoJzsnKTsKLSAgICBpZiAoaW5kZXgg
PT0gLTEpCisgICAgc2l6ZV90IGluZGV4ID0gdXJsLmZpbmQoJzsnKTsKKyAgICBpZiAoaW5kZXgg
PT0gbm90Rm91bmQpCiAgICAgICAgIGluZGV4ID0gdXJsLmZpbmQoJywnKTsKLSAgICBpZiAoaW5k
ZXggIT0gLTEpIHsKLSAgICAgICAgaW50IGxlbiA9IGluZGV4IC0gNTsKLSAgICAgICAgaWYgKGxl
biA+IDApCi0gICAgICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZyg1LCBsZW4pOworICAgIGlm
IChpbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICBpZiAoaW5kZXggPiA1KQorICAgICAgICAg
ICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKICAgICAgICAgcmV0dXJuICJ0
ZXh0L3BsYWluIjsgLy8gRGF0YSBVUkxzIHdpdGggbm8gTUlNRSB0eXBlIGFyZSBjb25zaWRlcmVk
IHRleHQvcGxhaW4uCiAgICAgfQogICAgIHJldHVybiAiIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJ
KHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsMTAgKzEwMywxMCBAQCBMZW5ndGgqIG5ld0Nvb3Jkc0FycmF5KGNvbnN0
IFN0cmluZyYgc3RyCiAgICAgTGVuZ3RoKiByID0gbmV3IExlbmd0aFtsZW5dOwogCiAgICAgaW50
IGkgPSAwOwotICAgIGludCBwb3MgPSAwOwotICAgIGludCBwb3MyOworICAgIHVuc2lnbmVkIHBv
cyA9IDA7CisgICAgc2l6ZV90IHBvczI7CiAKLSAgICB3aGlsZSAoKHBvczIgPSBzdHItPmZpbmQo
JyAnLCBwb3MpKSAhPSAtMSkgeworICAgIHdoaWxlICgocG9zMiA9IHN0ci0+ZmluZCgnICcsIHBv
cykpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHJbaSsrXSA9IHBhcnNlTGVuZ3RoKHN0ci0+Y2hh
cmFjdGVycygpICsgcG9zLCBwb3MyIC0gcG9zKTsKICAgICAgICAgcG9zID0gcG9zMisxOwogICAg
IH0KQEAgLTEyOSwxMCArMTI5LDEwIEBAIExlbmd0aCogbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3Ry
aW5nJiBzdHIKICAgICBMZW5ndGgqIHIgPSBuZXcgTGVuZ3RoW2xlbl07CiAKICAgICBpbnQgaSA9
IDA7Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgaW50IHBvczI7CisgICAgdW5zaWduZWQgcG9zID0g
MDsKKyAgICBzaXplX3QgcG9zMjsKIAotICAgIHdoaWxlICgocG9zMiA9IHN0ci0+ZmluZCgnLCcs
IHBvcykpICE9IC0xKSB7CisgICAgd2hpbGUgKChwb3MyID0gc3RyLT5maW5kKCcsJywgcG9zKSkg
IT0gbm90Rm91bmQpIHsKICAgICAgICAgcltpKytdID0gcGFyc2VMZW5ndGgoc3RyLT5jaGFyYWN0
ZXJzKCkgKyBwb3MsIHBvczIgLSBwb3MpOwogICAgICAgICBwb3MgPSBwb3MyKzE7CiAgICAgfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9MaW5rSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDQwICszMSw0MCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRTbGFzaERvdERvdFNs
YXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIGlubGlu
ZSBzaXplX3QgZmluZFNsYXNoRG90RG90U2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA8IDQpCi0gICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwogICAgIHVuc2lnbmVkIGxvb3BMaW1pdCA9IGxlbmd0
aCAtIDM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3BMaW1pdDsgKytpKSB7CiAg
ICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBjaGFyYWN0ZXJzW2kgKyAxXSA9PSAn
LicgJiYgY2hhcmFjdGVyc1tpICsgMl0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDNdID09ICcv
JykKICAgICAgICAgICAgIHJldHVybiBpOwogICAgIH0KLSAgICByZXR1cm4gLTE7CisgICAgcmV0
dXJuIG5vdEZvdW5kOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmaW5kU2xhc2hTbGFzaChjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgaW50IHBvc2l0aW9uKQorc3RhdGlj
IGlubGluZSBzaXplX3QgZmluZFNsYXNoU2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgsIGludCBwb3NpdGlvbikKIHsKICAgICBpZiAobGVuZ3RoIDwgMikKLSAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAgICAgdW5zaWduZWQgbG9v
cExpbWl0ID0gbGVuZ3RoIC0gMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwb3NpdGlvbjsgaSA8
IGxvb3BMaW1pdDsgKytpKSB7CiAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICcvJyAmJiBj
aGFyYWN0ZXJzW2kgKyAxXSA9PSAnLycpCiAgICAgICAgICAgICByZXR1cm4gaTsKICAgICB9Ci0g
ICAgcmV0dXJuIC0xOworICAgIHJldHVybiBub3RGb3VuZDsKIH0KIAotc3RhdGljIGlubGluZSBp
bnQgZmluZFNsYXNoRG90U2xhc2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgpCitzdGF0aWMgaW5saW5lIHNpemVfdCBmaW5kU2xhc2hEb3RTbGFzaChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoIDwgMykKLSAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAgICAgdW5zaWduZWQgbG9v
cExpbWl0ID0gbGVuZ3RoIC0gMjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcExp
bWl0OyArK2kpIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8nICYmIGNoYXJhY3Rl
cnNbaSArIDFdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAyXSA9PSAnLycpCiAgICAgICAgICAg
ICByZXR1cm4gaTsKICAgICB9Ci0gICAgcmV0dXJuIC0xOworICAgIHJldHVybiBub3RGb3VuZDsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zQ29sb25TbGFzaFNsYXNoKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC04MiwzNiArODIsMzIgQEAgc3Rh
dGljIGlubGluZSBib29sIGNvbnRhaW5zQ29sb25TbGFzaFNsYQogc3RhdGljIGlubGluZSB2b2lk
IGNsZWFuUGF0aChWZWN0b3I8VUNoYXIsIDUxMj4mIHBhdGgpCiB7CiAgICAgLy8gRklYTUU6IFNo
b3VsZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCi0gICAgaW50IHBv
czsKLSAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaERvdERvdFNsYXNoKHBhdGguZGF0YSgpLCBw
YXRoLnNpemUoKSkpICE9IC0xKSB7Ci0gICAgICAgIGludCBwcmV2ID0gcmV2ZXJzZUZpbmQocGF0
aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAnLycsIHBvcyAtIDEpOworICAgIHNpemVfdCBwb3M7Cisg
ICAgd2hpbGUgKChwb3MgPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5z
aXplKCkpKSAhPSBub3RGb3VuZCkgeworICAgICAgICBzaXplX3QgcHJldiA9IHJldmVyc2VGaW5k
KHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJy8nLCBwb3MgLSAxKTsKICAgICAgICAgLy8gZG9u
J3QgcmVtb3ZlIHRoZSBob3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zvby5odG1sCi0gICAg
ICAgIGlmIChwcmV2IDwgMCB8fCAocHJldiA+IDMgJiYgcGF0aFtwcmV2IC0gMl0gPT0gJzonICYm
IHBhdGhbcHJldiAtIDFdID09ICcvJykpCisgICAgICAgIGlmIChwcmV2ID09IG5vdEZvdW5kIHx8
IChwcmV2ID4gMyAmJiBwYXRoW3ByZXYgLSAyXSA9PSAnOicgJiYgcGF0aFtwcmV2IC0gMV0gPT0g
Jy8nKSkKICAgICAgICAgICAgIHBhdGgucmVtb3ZlKHBvcywgMyk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHBhdGgucmVtb3ZlKHByZXYsIHBvcyAtIHByZXYgKyAzKTsKICAgICB9CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBwYXJ0LgotICAgIC8v
IFNldCByZWZQb3MgdG8gLTIgdG8gbWVhbiAiSSBoYXZlbid0IGxvb2tlZCBmb3IgdGhlIGFuY2hv
ciB5ZXQiLgotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYSBmdW5jdGlvbiBjYWxsIG9u
IHRoZSBzZWFyY2ggZm9yIHRoZSB0aGUgYW5jaG9yCi0gICAgLy8gaW4gdGhlIHZhc3QgbWFqb3Jp
dHkgb2YgY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gIi8vIiBpbiB0aGUgcGF0aC4KICAgICBwb3Mg
PSAwOwotICAgIGludCByZWZQb3MgPSAtMjsKLSAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaFNs
YXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgcG9zKSkgIT0gLTEpIHsKLSAgICAgICAgaWYg
KHJlZlBvcyA9PSAtMikKLSAgICAgICAgICAgIHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCksIHBh
dGguc2l6ZSgpLCAnIycpOwotICAgICAgICBpZiAocmVmUG9zID4gMCAmJiBwb3MgPj0gcmVmUG9z
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHBvcyA9PSAwIHx8IHBhdGhbcG9z
IC0gMV0gIT0gJzonKQotICAgICAgICAgICAgcGF0aC5yZW1vdmUocG9zKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcG9zICs9IDI7CisgICAgaWYgKChwb3MgPSBmaW5kU2xhc2hTbGFzaChw
YXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHBvcykpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIHNp
emVfdCByZWZQb3MgPSBmaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgJyMnKTsKKyAgICAg
ICAgd2hpbGUgKHJlZlBvcyA9PSAwIHx8IHJlZlBvcyA9PSBub3RGb3VuZCB8fCBwb3MgPCByZWZQ
b3MpIHsKKyAgICAgICAgICAgIGlmIChwb3MgPT0gMCB8fCBwYXRoW3BvcyAtIDFdICE9ICc6JykK
KyAgICAgICAgICAgICAgICBwYXRoLnJlbW92ZShwb3MpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHBvcyArPSAyOworICAgICAgICAgICAgaWYgKChwb3MgPSBmaW5kU2xhc2hT
bGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHBvcykpID09IG5vdEZvdW5kKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgb3IgYW5jaG9yIHBhcnQuCi0gICAgd2hpbGUgKChw
b3MgPSBmaW5kU2xhc2hEb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCkpKSAhPSAtMSkK
KyAgICB3aGlsZSAoKHBvcyA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNp
emUoKSkpICE9IG5vdEZvdW5kKQogICAgICAgICBwYXRoLnJlbW92ZShwb3MsIDIpOwogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDY1NDY1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc3LDggKzM3Nyw4IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVNSU1FVHlwZVJlZ2lzdHJ5
KCkKIAogU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCiB7Ci0gICAgaW50IHBvcyA9IHBhdGgucmV2ZXJzZUZpbmQoJy4nKTsKLSAg
ICBpZiAocG9zID49IDApIHsKKyAgICBzaXplX3QgcG9zID0gcGF0aC5yZXZlcnNlRmluZCgnLicp
OworICAgIGlmIChwb3MgIT0gbm90Rm91bmQpIHsKICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9
IHBhdGguc3Vic3RyaW5nKHBvcyArIDEpOwogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZ2V0TUlN
RVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgo
KSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCShyZXZpc2lvbiA2NTQ2NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsOCArMTEzLDggQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xv
YwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaW50IGxvYyA9IHVybC5m
aW5kKCc6Jyk7Ci0gICAgaWYgKGxvYyA9PSAtMSkKKyAgICBzaXplX3QgbG9jID0gdXJsLmZpbmQo
JzonKTsKKyAgICBpZiAobG9jID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBTdHJpbmcgc2NoZW1lID0gdXJsLmxlZnQobG9jKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiA2NTQ2NSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIs
OCArMjUyLDggQEAgdm9pZCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybAogCiAg
ICAgLy8gaWYgd2UgZG9uJ3Qga25vdyB0aGUgTUlNRSB0eXBlLCBzZWUgaWYgdGhlIGV4dGVuc2lv
biBjYW4gaGVscAogICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09ICJhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0iIHx8IHR5cGUgPT0gInRleHQvcGxhaW4iKSB7Ci0gICAgICAgIGludCBw
b3MgPSB1cmwucmV2ZXJzZUZpbmQoJy4nKTsKLSAgICAgICAgaWYgKHBvcyA+PSAwKSB7CisgICAg
ICAgIHNpemVfdCBwb3MgPSB1cmwucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICAgICAgaWYgKHBvcyAh
PSBub3RGb3VuZCkgewogICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IHVybC5zdWJzdHJp
bmcocG9zICsgMSk7CiAgICAgICAgICAgICBTdHJpbmcgbWVkaWFUeXBlID0gTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TWVkaWFNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOwogICAgICAgICAg
ICAgaWYgKCFtZWRpYVR5cGUuaXNFbXB0eSgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJ
bWFnZU1hYy5tbQkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFn
SW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg3LDkgKzg3LDkgQEAgUmV0YWluUHRyPE5T
SW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUljb25GbwogewogICAgIGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUgPSBpbWFnZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwogICAgIE5TU3RyaW5n
ICpleHRlbnNpb24gPSBuaWw7Ci0gICAgaW50IGRvdEluZGV4ID0gZmlsZW5hbWUucmV2ZXJzZUZp
bmQoJy4nKTsKKyAgICBzaXplX3QgZG90SW5kZXggPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicp
OwogICAgIAotICAgIGlmIChkb3RJbmRleCA+IDAgJiYgZG90SW5kZXggPCAoaW50KShmaWxlbmFt
ZS5sZW5ndGgoKSAtIDEpKSAvLyByZXF1aXJlIHRoYXQgYSAuIGV4aXN0cyBhZnRlciB0aGUgZmly
c3QgY2hhcmFjdGVyIGFuZCBiZWZvcmUgdGhlIGxhc3QKKyAgICBpZiAoZG90SW5kZXggIT0gbm90
Rm91bmQgJiYgZG90SW5kZXggPCAoZmlsZW5hbWUubGVuZ3RoKCkgLSAxKSkgLy8gcmVxdWlyZSB0
aGF0IGEgLiBleGlzdHMgYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgYmVmb3JlIHRoZSBs
YXN0CiAgICAgICAgIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhkb3RJbmRleCArIDEp
OwogICAgIGVsc2UgewogICAgICAgICAvLyBJdCBtaWdodCBiZSB3b3J0aCBkb2luZyBhIGZ1cnRo
ZXIgbG9va3VwIHRvIHB1bGwgdGhlIGV4dGVuc2lvbiBmcm9tIHRoZSBNSU1FIHR5cGUuCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ3JlZGVudGlhbFN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAJKHJl
dmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9y
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOSBAQCBzdGF0aWMgU3RyaW5nIHBy
b3RlY3Rpb25TcGFjZU1hcEtleUZyb21VCiAgICAgdW5zaWduZWQgZGlyZWN0b3J5VVJMUGF0aFN0
YXJ0ID0gdXJsLnBhdGhTdGFydCgpOwogICAgIEFTU0VSVChkaXJlY3RvcnlVUkxbZGlyZWN0b3J5
VVJMUGF0aFN0YXJ0XSA9PSAnLycpOwogICAgIGlmIChkaXJlY3RvcnlVUkwubGVuZ3RoKCkgPiBk
aXJlY3RvcnlVUkxQYXRoU3RhcnQgKyAxKSB7Ci0gICAgICAgIGludCBpbmRleCA9IGRpcmVjdG9y
eVVSTC5yZXZlcnNlRmluZCgnLycpOwotICAgICAgICBBU1NFUlQoaW5kZXggPiAwKTsKLSAgICAg
ICAgZGlyZWN0b3J5VVJMID0gZGlyZWN0b3J5VVJMLnN1YnN0cmluZygwLCAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZGV4KSAhPSBkaXJlY3RvcnlVUkxQYXRoU3RhcnQpID8gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZGV4KSA6IGRpcmVjdG9yeVVSTFBhdGhTdGFydCArIDEpOworICAgICAgICBz
aXplX3QgaW5kZXggPSBkaXJlY3RvcnlVUkwucmV2ZXJzZUZpbmQoJy8nKTsKKyAgICAgICAgQVNT
RVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICAgICAgZGlyZWN0b3J5VVJMID0gZGlyZWN0b3J5
VVJMLnN1YnN0cmluZygwLCAoaW5kZXggIT0gZGlyZWN0b3J5VVJMUGF0aFN0YXJ0KSA/IGluZGV4
IDogZGlyZWN0b3J5VVJMUGF0aFN0YXJ0ICsgMSk7CiAgICAgfQogICAgIEFTU0VSVChkaXJlY3Rv
cnlVUkwubGVuZ3RoKCkgPT0gZGlyZWN0b3J5VVJMUGF0aFN0YXJ0ICsgMSB8fCBkaXJlY3RvcnlV
UkxbZGlyZWN0b3J5VVJMLmxlbmd0aCgpIC0gMV0gIT0gJy8nKTsKIApAQCAtMTMyLDkgKzEzMiw5
IEBAIHN0YXRpYyBQYXRoVG9EZWZhdWx0UHJvdGVjdGlvblNwYWNlTWFwOjoKICAgICAgICAgaWYg
KGRpcmVjdG9yeVVSTC5sZW5ndGgoKSA9PSBkaXJlY3RvcnlVUkxQYXRoU3RhcnQgKyAxKSAgLy8g
cGF0aCBpcyAiLyIgYWxyZWFkeSwgY2Fubm90IHNob3J0ZW4gaXQgYW55IG1vcmUKICAgICAgICAg
ICAgIHJldHVybiBtYXAuZW5kKCk7CiAKLSAgICAgICAgaW50IGluZGV4ID0gZGlyZWN0b3J5VVJM
LnJldmVyc2VGaW5kKCcvJywgLTIpOwotICAgICAgICBBU1NFUlQoaW5kZXggPiAwKTsKLSAgICAg
ICAgZGlyZWN0b3J5VVJMID0gZGlyZWN0b3J5VVJMLnN1YnN0cmluZygwLCAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZGV4KSA9PSBkaXJlY3RvcnlVUkxQYXRoU3RhcnQpID8gaW5kZXggKyAxIDog
aW5kZXgpOworICAgICAgICBzaXplX3QgaW5kZXggPSBkaXJlY3RvcnlVUkwucmV2ZXJzZUZpbmQo
Jy8nLCBkaXJlY3RvcnlVUkwubGVuZ3RoKCkgLSAyKTsKKyAgICAgICAgQVNTRVJUKGluZGV4ICE9
IG5vdEZvdW5kKTsKKyAgICAgICAgZGlyZWN0b3J5VVJMID0gZGlyZWN0b3J5VVJMLnN1YnN0cmlu
ZygwLCAoaW5kZXggPT0gZGlyZWN0b3J5VVJMUGF0aFN0YXJ0KSA/IGluZGV4ICsgMSA6IGluZGV4
KTsKICAgICAgICAgQVNTRVJUKGRpcmVjdG9yeVVSTC5sZW5ndGgoKSA+IGRpcmVjdG9yeVVSTFBh
dGhTdGFydCk7CiAgICAgICAgIEFTU0VSVChkaXJlY3RvcnlVUkwubGVuZ3RoKCkgPT0gZGlyZWN0
b3J5VVJMUGF0aFN0YXJ0ICsgMSB8fCBkaXJlY3RvcnlVUkxbZGlyZWN0b3J5VVJMLmxlbmd0aCgp
IC0gMV0gIT0gJy8nKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UFBhcnNlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQ
UGFyc2Vycy5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBQYXJzZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQCB1c2luZyBu
YW1lc3BhY2UgV1RGOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyB0cnVlIGlmIHRoZXJlIGlz
IG1vcmUgdG8gcGFyc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBza2lwV2hpdGVTcGFjZShjb25zdCBT
dHJpbmcmIHN0ciwgaW50JiBwb3MsIGJvb2wgZnJvbUh0dHBFcXVpdk1ldGEpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkJiBwb3Ms
IGJvb2wgZnJvbUh0dHBFcXVpdk1ldGEpCiB7Ci0gICAgaW50IGxlbiA9IHN0ci5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBsZW4gPSBzdHIubGVuZ3RoKCk7CiAKICAgICBpZiAoZnJvbUh0dHBFcXVp
dk1ldGEpIHsKICAgICAgICAgd2hpbGUgKHBvcyAhPSBsZW4gJiYgc3RyW3Bvc10gPD0gJyAnKQpA
QCAtNTksOSArNTksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tpcFdoaXRlU3BhY2UoY29uc3Qg
CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gY2FuIG1hdGNoIHRoZSB3aG9sZSB0
b2tlbiAoY2FzZSBpbnNlbnNpdGl2ZSkuCiAvLyBOb3RlOiBNaWdodCByZXR1cm4gcG9zID09IHN0
ci5sZW5ndGgoKQotc3RhdGljIGlubGluZSBib29sIHNraXBUb2tlbihjb25zdCBTdHJpbmcmIHN0
ciwgaW50JiBwb3MsIGNvbnN0IGNoYXIqIHRva2VuKQorc3RhdGljIGlubGluZSBib29sIHNraXBU
b2tlbihjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQmIHBvcywgY29uc3QgY2hhciogdG9rZW4p
CiB7Ci0gICAgaW50IGxlbiA9IHN0ci5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBzdHIu
bGVuZ3RoKCk7CiAKICAgICB3aGlsZSAocG9zICE9IGxlbiAmJiAqdG9rZW4pIHsKICAgICAgICAg
aWYgKHRvQVNDSUlMb3dlcihzdHJbcG9zXSkgIT0gKnRva2VuKyspCkBAIC0xMDQsOCArMTA0LDgg
QEAgQ29udGVudERpc3Bvc2l0aW9uVHlwZSBjb250ZW50RGlzcG9zaXRpbwogCiBib29sIHBhcnNl
SFRUUFJlZnJlc2goY29uc3QgU3RyaW5nJiByZWZyZXNoLCBib29sIGZyb21IdHRwRXF1aXZNZXRh
LCBkb3VibGUmIGRlbGF5LCBTdHJpbmcmIHVybCkKIHsKLSAgICBpbnQgbGVuID0gcmVmcmVzaC5s
ZW5ndGgoKTsKLSAgICBpbnQgcG9zID0gMDsKKyAgICB1bnNpZ25lZCBsZW4gPSByZWZyZXNoLmxl
bmd0aCgpOworICAgIHVuc2lnbmVkIHBvcyA9IDA7CiAgICAgCiAgICAgaWYgKCFza2lwV2hpdGVT
cGFjZShyZWZyZXNoLCBwb3MsIGZyb21IdHRwRXF1aXZNZXRhKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTI2LDcgKzEyNiw3IEBAIGJvb2wgcGFyc2VIVFRQUmVmcmVzaChjb25zdCBTdHJp
bmcmIHJlZnIKICAgICAgICAgCiAgICAgICAgICsrcG9zOwogICAgICAgICBza2lwV2hpdGVTcGFj
ZShyZWZyZXNoLCBwb3MsIGZyb21IdHRwRXF1aXZNZXRhKTsKLSAgICAgICAgaW50IHVybFN0YXJ0
UG9zID0gcG9zOworICAgICAgICB1bnNpZ25lZCB1cmxTdGFydFBvcyA9IHBvczsKICAgICAgICAg
aWYgKHJlZnJlc2guZmluZCgidXJsIiwgdXJsU3RhcnRQb3MsIGZhbHNlKSA9PSB1cmxTdGFydFBv
cykgewogICAgICAgICAgICAgdXJsU3RhcnRQb3MgKz0gMzsKICAgICAgICAgICAgIHNraXBXaGl0
ZVNwYWNlKHJlZnJlc2gsIHVybFN0YXJ0UG9zLCBmcm9tSHR0cEVxdWl2TWV0YSk7CkBAIC0xMzcs
NyArMTM3LDcgQEAgYm9vbCBwYXJzZUhUVFBSZWZyZXNoKGNvbnN0IFN0cmluZyYgcmVmcgogICAg
ICAgICAgICAgICAgIHVybFN0YXJ0UG9zID0gcG9zOyAgLy8gZS5nLiAiUmVmcmVzaDogMDsgdXJs
Lmh0bWwiCiAgICAgICAgIH0KIAotICAgICAgICBpbnQgdXJsRW5kUG9zID0gbGVuOworICAgICAg
ICB1bnNpZ25lZCB1cmxFbmRQb3MgPSBsZW47CiAKICAgICAgICAgaWYgKHJlZnJlc2hbdXJsU3Rh
cnRQb3NdID09ICciJyB8fCByZWZyZXNoW3VybFN0YXJ0UG9zXSA9PSAnXCcnKSB7CiAgICAgICAg
ICAgICBVQ2hhciBxdW90YXRpb25NYXJrID0gcmVmcmVzaFt1cmxTdGFydFBvc107CkBAIC0xNzMs
OCArMTczLDggQEAgU3RyaW5nIGZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRpbwogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0ga2V5VmFsdWVQYWlycy5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGludCB2YWx1ZVN0YXJ0UG9z
ID0ga2V5VmFsdWVQYWlyc1tpXS5maW5kKCc9Jyk7Ci0gICAgICAgIGlmICh2YWx1ZVN0YXJ0UG9z
IDwgMCkKKyAgICAgICAgc2l6ZV90IHZhbHVlU3RhcnRQb3MgPSBrZXlWYWx1ZVBhaXJzW2ldLmZp
bmQoJz0nKTsKKyAgICAgICAgaWYgKHZhbHVlU3RhcnRQb3MgPT0gbm90Rm91bmQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHJpbmcga2V5ID0ga2V5VmFsdWVQYWlyc1tpXS5s
ZWZ0KHZhbHVlU3RhcnRQb3MpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMjQxLDEyICsyNDEsMTIg
QEAgdm9pZCBmaW5kQ2hhcnNldEluTWVkaWFUeXBlKGNvbnN0IFN0cmluZwogICAgIGNoYXJzZXRQ
b3MgPSBzdGFydDsKICAgICBjaGFyc2V0TGVuID0gMDsKIAotICAgIGludCBwb3MgPSBzdGFydDsK
LSAgICBpbnQgbGVuZ3RoID0gKGludCltZWRpYVR5cGUubGVuZ3RoKCk7CisgICAgc2l6ZV90IHBv
cyA9IHN0YXJ0OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1lZGlhVHlwZS5sZW5ndGgoKTsKICAg
ICAKICAgICB3aGlsZSAocG9zIDwgbGVuZ3RoKSB7CiAgICAgICAgIHBvcyA9IG1lZGlhVHlwZS5m
aW5kKCJjaGFyc2V0IiwgcG9zLCBmYWxzZSk7Ci0gICAgICAgIGlmIChwb3MgPD0gMCkgeworICAg
ICAgICBpZiAocG9zID09IG5vdEZvdW5kIHx8IHBvcyA9PSAwKSB7CiAgICAgICAgICAgICBjaGFy
c2V0TGVuID0gMDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjcwLDcgKzI3
MCw3IEBAIHZvaWQgZmluZENoYXJzZXRJbk1lZGlhVHlwZShjb25zdCBTdHJpbmcKICAgICAgICAg
ICAgICsrcG9zOwogCiAgICAgICAgIC8vIHdlIGRvbid0IGhhbmRsZSBzcGFjZXMgd2l0aGluIHF1
b3RlZCBwYXJhbWV0ZXIgdmFsdWVzLCBiZWNhdXNlIGNoYXJzZXQgbmFtZXMgY2Fubm90IGhhdmUg
YW55Ci0gICAgICAgIGludCBlbmRwb3MgPSBwb3M7CisgICAgICAgIHVuc2lnbmVkIGVuZHBvcyA9
IHBvczsKICAgICAgICAgd2hpbGUgKHBvcyAhPSBsZW5ndGggJiYgbWVkaWFUeXBlW2VuZHBvc10g
PiAnICcgJiYgbWVkaWFUeXBlW2VuZHBvc10gIT0gJyInICYmIG1lZGlhVHlwZVtlbmRwb3NdICE9
ICdcJycgJiYgbWVkaWFUeXBlW2VuZHBvc10gIT0gJzsnKQogICAgICAgICAgICAgKytlbmRwb3M7
CiAKQEAgLTI5MCw4ICsyOTAsOCBAQCBYU1NQcm90ZWN0aW9uRGlzcG9zaXRpb24gcGFyc2VYU1NQ
cm90ZWN0CiAgICAgaWYgKHN0aXBwZWRIZWFkZXJbMF0gPT0gJzAnKQogICAgICAgICByZXR1cm4g
WFNTUHJvdGVjdGlvbkRpc2FibGVkOwogCi0gICAgaW50IGxlbmd0aCA9IChpbnQpaGVhZGVyLmxl
bmd0aCgpOwotICAgIGludCBwb3MgPSAwOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGhlYWRlci5s
ZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwb3MgPSAwOwogICAgIGlmIChzdGlwcGVkSGVhZGVyW3Bv
cysrXSA9PSAnMScKICAgICAgICAgJiYgc2tpcFdoaXRlU3BhY2Uoc3RpcHBlZEhlYWRlciwgcG9z
LCBmYWxzZSkKICAgICAgICAgJiYgc3RpcHBlZEhlYWRlcltwb3MrK10gPT0gJzsnCkBAIC0zMDks
NyArMzA5LDcgQEAgWFNTUHJvdGVjdGlvbkRpc3Bvc2l0aW9uIHBhcnNlWFNTUHJvdGVjdAogCiBT
dHJpbmcgZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShjb25zdCBTdHJpbmcm
IHN0YXR1c0xpbmUpCiB7Ci0gICAgaW50IHNwYWNlUG9zID0gc3RhdHVzTGluZS5maW5kKCcgJyk7
CisgICAgc2l6ZV90IHNwYWNlUG9zID0gc3RhdHVzTGluZS5maW5kKCcgJyk7CiAgICAgLy8gUmVt
b3ZlIHN0YXR1cyBjb2RlIGZyb20gdGhlIHN0YXR1cyBsaW5lLgogICAgIHNwYWNlUG9zID0gc3Rh
dHVzTGluZS5maW5kKCcgJywgc3BhY2VQb3MgKyAxKTsKICAgICByZXR1cm4gc3RhdHVzTGluZS5z
dWJzdHJpbmcoc3BhY2VQb3MgKyAxKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MzksOCArNDM5LDggQEAgYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRh
Y2htZW50KAogCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhl
YWRlck5hbWUsICgiY29udGVudC1kaXNwb3NpdGlvbiIpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBt
X2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRlck5hbWUpOwotICAgIGludCBsb2MgPSB2YWx1ZS5m
aW5kKCc7Jyk7Ci0gICAgaWYgKGxvYyAhPSAtMSkKKyAgICBzaXplX3QgbG9jID0gdmFsdWUuZmlu
ZCgnOycpOworICAgIGlmIChsb2MgIT0gbm90Rm91bmQpCiAgICAgICAgIHZhbHVlID0gdmFsdWUu
bGVmdChsb2MpOwogICAgIHZhbHVlID0gdmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGF0dGFjaG1lbnRTdHJpbmcsICgi
YXR0YWNobWVudCIpKTsKQEAgLTU5MSw5ICs1OTEsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUNhY2hl
SGVhZGVyKGNvbnN0IFN0cmluCiAgICAgY29uc3QgU3RyaW5nIHNhZmVIZWFkZXIgPSBoZWFkZXIu
cmVtb3ZlQ2hhcmFjdGVycyhpc0NvbnRyb2xDaGFyYWN0ZXIpOwogICAgIHVuc2lnbmVkIG1heCA9
IHNhZmVIZWFkZXIubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwb3MgPSAwOyBwb3MgPCBt
YXg7IC8qIHBvcyBpbmNyZW1lbnRlZCBpbiBsb29wICovKSB7Ci0gICAgICAgIGludCBuZXh0Q29t
bWFQb3NpdGlvbiA9IHNhZmVIZWFkZXIuZmluZCgnLCcsIHBvcyk7Ci0gICAgICAgIGludCBuZXh0
RXF1YWxTaWduUG9zaXRpb24gPSBzYWZlSGVhZGVyLmZpbmQoJz0nLCBwb3MpOwotICAgICAgICBp
ZiAobmV4dEVxdWFsU2lnblBvc2l0aW9uID49IDAgJiYgKG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA8
IG5leHRDb21tYVBvc2l0aW9uIHx8IG5leHRDb21tYVBvc2l0aW9uIDwgMCkpIHsKKyAgICAgICAg
c2l6ZV90IG5leHRDb21tYVBvc2l0aW9uID0gc2FmZUhlYWRlci5maW5kKCcsJywgcG9zKTsKKyAg
ICAgICAgc2l6ZV90IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA9IHNhZmVIZWFkZXIuZmluZCgnPScs
IHBvcyk7CisgICAgICAgIGlmIChuZXh0RXF1YWxTaWduUG9zaXRpb24gIT0gbm90Rm91bmQgJiYg
KG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA8IG5leHRDb21tYVBvc2l0aW9uIHx8IG5leHRDb21tYVBv
c2l0aW9uID09IG5vdEZvdW5kKSkgewogICAgICAgICAgICAgLy8gR2V0IGRpcmVjdGl2ZSBuYW1l
LCBwYXJzZSByaWdodCBoYW5kIHNpZGUgb2YgZXF1YWwgc2lnbiwgdGhlbiBhZGQgdG8gbWFwCiAg
ICAgICAgICAgICBTdHJpbmcgZGlyZWN0aXZlID0gdHJpbVRvTmV4dFNlcGFyYXRvcihzYWZlSGVh
ZGVyLnN1YnN0cmluZyhwb3MsIG5leHRFcXVhbFNpZ25Qb3NpdGlvbiAtIHBvcykuc3RyaXBXaGl0
ZVNwYWNlKCkpOwogICAgICAgICAgICAgcG9zICs9IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiAtIHBv
cyArIDE7CkBAIC02MDEsMTQgKzYwMSwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZUNhY2hlSGVhZGVy
KGNvbnN0IFN0cmluCiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBzYWZlSGVhZGVyLnN1YnN0
cmluZyhwb3MsIG1heCAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgICAgICBpZiAo
dmFsdWVbMF0gPT0gJyInKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGEgcXVv
dGVkIHN0cmluZwotICAgICAgICAgICAgICAgIGludCBuZXh0RG91YmxlUXVvdGVQb3NpdGlvbiA9
IHZhbHVlLmZpbmQoJyInLCAxKTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dERvdWJsZVF1b3Rl
UG9zaXRpb24gPj0gMCkgeworICAgICAgICAgICAgICAgIHNpemVfdCBuZXh0RG91YmxlUXVvdGVQ
b3NpdGlvbiA9IHZhbHVlLmZpbmQoJyInLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dERv
dWJsZVF1b3RlUG9zaXRpb24gIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
U3RvcmUgdGhlIHZhbHVlIGFzIGEgcXVvdGVkIHN0cmluZyB3aXRob3V0IHF1b3RlcwogICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGRpcmVjdGl2
ZSwgdmFsdWUuc3Vic3RyaW5nKDEsIG5leHREb3VibGVRdW90ZVBvc2l0aW9uIC0gMSkuc3RyaXBX
aGl0ZVNwYWNlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgcG9zICs9IChzYWZlSGVhZGVyLmZp
bmQoJyInLCBwb3MpIC0gcG9zKSArIG5leHREb3VibGVRdW90ZVBvc2l0aW9uICsgMTsKICAgICAg
ICAgICAgICAgICAgICAgLy8gTW92ZSBwYXN0IG5leHQgY29tbWEsIGlmIHRoZXJlIGlzIG9uZQot
ICAgICAgICAgICAgICAgICAgICBpbnQgbmV4dENvbW1hUG9zaXRpb24yID0gc2FmZUhlYWRlci5m
aW5kKCcsJywgcG9zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRDb21tYVBvc2l0aW9u
MiA+PSAwKQorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV4dENvbW1hUG9zaXRpb24yID0g
c2FmZUhlYWRlci5maW5kKCcsJywgcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRD
b21tYVBvc2l0aW9uMiAhPSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyAr
PSBuZXh0Q29tbWFQb3NpdGlvbjIgLSBwb3MgKyAxOwogICAgICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIFBhcnNlIGVycm9yIGlmIHRoZXJl
IGlzIGFueXRoaW5nIGxlZnQgd2l0aCBubyBjb21tYQpAQCAtNjE5LDggKzYxOSw4IEBAIHN0YXRp
YyB2b2lkIHBhcnNlQ2FjaGVIZWFkZXIoY29uc3QgU3RyaW4KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBhIHRv
a2VuIHVudGlsIHRoZSBuZXh0IGNvbW1hCi0gICAgICAgICAgICAgICAgaW50IG5leHRDb21tYVBv
c2l0aW9uMiA9IHZhbHVlLmZpbmQoJywnLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dENv
bW1hUG9zaXRpb24yID49IDApIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgbmV4dENvbW1hUG9z
aXRpb24yID0gdmFsdWUuZmluZCgnLCcsIDApOworICAgICAgICAgICAgICAgIGlmIChuZXh0Q29t
bWFQb3NpdGlvbjIgIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZh
bHVlIGlzIGRlbGltaXRlZCBieSB0aGUgbmV4dCBjb21tYQogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGRpcmVjdGl2ZSwgdHJpbVRvTmV4dFNl
cGFyYXRvcih2YWx1ZS5zdWJzdHJpbmcoMCwgbmV4dENvbW1hUG9zaXRpb24yKS5zdHJpcFdoaXRl
U3BhY2UoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgcG9zICs9IChzYWZlSGVhZGVyLmZpbmQo
JywnLCBwb3MpIC0gcG9zKSArIDE7CkBAIC02MzAsNyArNjMwLDcgQEAgc3RhdGljIHZvaWQgcGFy
c2VDYWNoZUhlYWRlcihjb25zdCBTdHJpbgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG5leHRD
b21tYVBvc2l0aW9uID49IDAgJiYgKG5leHRDb21tYVBvc2l0aW9uIDwgbmV4dEVxdWFsU2lnblBv
c2l0aW9uIHx8IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA8IDApKSB7CisgICAgICAgIH0gZWxzZSBp
ZiAobmV4dENvbW1hUG9zaXRpb24gIT0gbm90Rm91bmQgJiYgKG5leHRDb21tYVBvc2l0aW9uIDwg
bmV4dEVxdWFsU2lnblBvc2l0aW9uIHx8IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA9PSBub3RGb3Vu
ZCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBkaXJlY3RpdmUgdG8gbWFwIHdpdGggZW1wdHkgc3Ry
aW5nIGFzIHZhbHVlCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJp
bmc+KHRyaW1Ub05leHRTZXBhcmF0b3Ioc2FmZUhlYWRlci5zdWJzdHJpbmcocG9zLCBuZXh0Q29t
bWFQb3NpdGlvbiAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkpLCAiIikpOwogICAgICAgICAgICAg
cG9zICs9IG5leHRDb21tYVBvc2l0aW9uIC0gcG9zICsgMTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzEsOCArMjMxLDggQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dXBkYXRlV2lkZ2V0KAog
ICAgICAgICAgICAgICAgICAgICB1cmwgPSBwLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlm
IChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInR5cGUi
KSkgewogICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHAtPnZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCBwb3MgPSBzZXJ2aWNlVHlwZS5maW5kKCI7Iik7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwb3MgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBw
b3MgPSBzZXJ2aWNlVHlwZS5maW5kKCI7Iik7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3Mg
IT0gbm90Rm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHNlcnZp
Y2VUeXBlLmxlZnQocG9zKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYg
KCFlbWJlZCAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9FbnRy
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0VudHJ5LmNwcAkocmV2aXNpb24g
NjU0NjUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw4ICs0NSw4IEBAIEVudHJ5OjpFbnRyeShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGYKICAg
ICAsIG1fZnVsbFBhdGgoZnVsbFBhdGgpCiAgICAgLCBtX2lzRGlyZWN0b3J5KGlzRGlyZWN0b3J5
KQogewotICAgIGludCBpbmRleCA9IGZ1bGxQYXRoLnJldmVyc2VGaW5kKCIvIik7Ci0gICAgaWYg
KGluZGV4ICE9IC0xKQorICAgIHNpemVfdCBpbmRleCA9IGZ1bGxQYXRoLnJldmVyc2VGaW5kKCIv
Iik7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICBtX25hbWUgPSBmdWxsUGF0
aC5zdWJzdHJpbmcoaW5kZXgpOwogICAgIGVsc2UKICAgICAgICAgbV9uYW1lID0gZnVsbFBhdGg7
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdGb250LmNwcAkocmV2aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0NvbXBhdGlibGVHbHlwaChjb24KICAgICAgICAgLy8gU3BsaXQgc3ViY29kZSBmcm9tIGxhbmd1
YWdlLCBpZiBleGlzdGFudC4KICAgICAgICAgU3RyaW5nIGxhbmd1YWdlUHJlZml4OwogCi0gICAg
ICAgIGludCBzdWJDb2RlU2VwYXJhdG9yID0gbGFuZ3VhZ2UuZmluZCgnLScpOwotICAgICAgICBp
ZiAoc3ViQ29kZVNlcGFyYXRvciAhPSAtMSkKKyAgICAgICAgc2l6ZV90IHN1YkNvZGVTZXBhcmF0
b3IgPSBsYW5ndWFnZS5maW5kKCctJyk7CisgICAgICAgIGlmIChzdWJDb2RlU2VwYXJhdG9yICE9
IG5vdEZvdW5kKQogICAgICAgICAgICAgbGFuZ3VhZ2VQcmVmaXggPSBsYW5ndWFnZS5sZWZ0KHN1
YkNvZGVTZXBhcmF0b3IpOwogCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGlkZW50aWZpZXIubGFuZ3VhZ2VzLmJlZ2luKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdVUklSZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1VSSVJlZmVy
ZW5jZS5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDExIEBAIGJvb2wgU1ZHVVJJUmVmZXJl
bmNlOjppc0tub3duQXR0cmlidXRlKGMKIFN0cmluZyBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdl
dChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoInVybCgiKSkg
eyAvLyBVUkkgUmVmZXJlbmNlcywgaWUuIGZpbGw6dXJsKCN0YXJnZXQpCi0gICAgICAgIHVuc2ln
bmVkIGludCBzdGFydCA9IHVybC5maW5kKCcjJykgKyAxOwotICAgICAgICB1bnNpZ25lZCBpbnQg
ZW5kID0gdXJsLnJldmVyc2VGaW5kKCcpJyk7Ci0KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gdXJs
LmZpbmQoJyMnKSArIDE7CisgICAgICAgIHNpemVfdCBlbmQgPSB1cmwucmV2ZXJzZUZpbmQoJykn
KTsKICAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSAg
ICB9IGVsc2UgaWYgKHVybC5maW5kKCcjJykgPiAtMSkgeyAvLyBmb3JtYXQgaXMgI3RhcmdldAot
ICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSB1cmwuZmluZCgnIycpICsgMTsKKyAgICB9IGVs
c2UgaWYgKHVybC5maW5kKCcjJykgIT0gbm90Rm91bmQpIHsgLy8gZm9ybWF0IGlzICN0YXJnZXQK
KyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gdXJsLmZpbmQoJyMnKSArIDE7CiAgICAgICAgIHJldHVy
biB1cmwuc3Vic3RyaW5nKHN0YXJ0LCB1cmwubGVuZ3RoKCkgLSBzdGFydCk7CiAgICAgfSBlbHNl
IC8vIFRoZSB1cmwgZG9lc24ndCBoYXZlIGFueSB0YXJnZXQuCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2
aXNpb24gNjU0NjUpCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTksOCArMjE5LDggQEAgU01JTFRpbWUgU1ZHU01JTEVsZW1l
bnQ6OnBhcnNlQ2xvY2tWYWx1ZQogCiAgICAgZG91YmxlIHJlc3VsdCA9IDA7CiAgICAgYm9vbCBv
azsKLSAgICBpbnQgZG91YmxlUG9pbnRPbmUgPSBwYXJzZS5maW5kKCc6Jyk7Ci0gICAgaW50IGRv
dWJsZVBvaW50VHdvID0gcGFyc2UuZmluZCgnOicsIGRvdWJsZVBvaW50T25lICsgMSk7CisgICAg
c2l6ZV90IGRvdWJsZVBvaW50T25lID0gcGFyc2UuZmluZCgnOicpOworICAgIHNpemVfdCBkb3Vi
bGVQb2ludFR3byA9IHBhcnNlLmZpbmQoJzonLCBkb3VibGVQb2ludE9uZSArIDEpOwogICAgIGlm
IChkb3VibGVQb2ludE9uZSA9PSAyICYmIGRvdWJsZVBvaW50VHdvID09IDUgJiYgcGFyc2UubGVu
Z3RoKCkgPj0gOCkgeyAKICAgICAgICAgcmVzdWx0ICs9IHBhcnNlLnN1YnN0cmluZygwLCAyKS50
b1VJbnRTdHJpY3QoJm9rKSAqIDYwICogNjA7CiAgICAgICAgIGlmICghb2spCkBAIC0yMjksNyAr
MjI5LDcgQEAgU01JTFRpbWUgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlQ2xvY2tWYWx1ZQogICAgICAg
ICBpZiAoIW9rKQogICAgICAgICAgICAgcmV0dXJuIFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CiAg
ICAgICAgIHJlc3VsdCArPSBwYXJzZS5zdWJzdHJpbmcoNikudG9Eb3VibGUoJm9rKTsKLSAgICB9
IGVsc2UgaWYgKGRvdWJsZVBvaW50T25lID09IDIgJiYgZG91YmxlUG9pbnRUd28gPT0gLTEgJiYg
cGFyc2UubGVuZ3RoKCkgPj0gNSkgeyAKKyAgICB9IGVsc2UgaWYgKGRvdWJsZVBvaW50T25lID09
IDIgJiYgZG91YmxlUG9pbnRUd28gPT0gbm90Rm91bmQgJiYgcGFyc2UubGVuZ3RoKCkgPj0gNSkg
eyAKICAgICAgICAgcmVzdWx0ICs9IHBhcnNlLnN1YnN0cmluZygwLCAyKS50b1VJbnRTdHJpY3Qo
Jm9rKSAqIDYwOwogICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAgcmV0dXJuIFNNSUxUaW1l
Ojp1bnJlc29sdmVkKCk7CkBAIC0yNTMsMTUgKzI1MywxNSBAQCBib29sIFNWR1NNSUxFbGVtZW50
OjpwYXJzZUNvbmRpdGlvbihjb25zCiAgICAgCiAgICAgZG91YmxlIHNpZ24gPSAxLjsKICAgICBi
b29sIG9rOwotICAgIGludCBwb3MgPSBwYXJzZVN0cmluZy5maW5kKCcrJyk7Ci0gICAgaWYgKHBv
cyA9PSAtMSkgeworICAgIHNpemVfdCBwb3MgPSBwYXJzZVN0cmluZy5maW5kKCcrJyk7CisgICAg
aWYgKHBvcyA9PSBub3RGb3VuZCkgewogICAgICAgICBwb3MgPSBwYXJzZVN0cmluZy5maW5kKCct
Jyk7Ci0gICAgICAgIGlmIChwb3MgIT0gLTEpCisgICAgICAgIGlmIChwb3MgIT0gbm90Rm91bmQp
CiAgICAgICAgICAgICBzaWduID0gLTEuOwogICAgIH0KICAgICBTdHJpbmcgY29uZGl0aW9uU3Ry
aW5nOwogICAgIFNNSUxUaW1lIG9mZnNldCA9IDA7Ci0gICAgaWYgKHBvcyA9PSAtMSkKKyAgICBp
ZiAocG9zID09IG5vdEZvdW5kKQogICAgICAgICBjb25kaXRpb25TdHJpbmcgPSBwYXJzZVN0cmlu
ZzsKICAgICBlbHNlIHsKICAgICAgICAgY29uZGl0aW9uU3RyaW5nID0gcGFyc2VTdHJpbmcubGVm
dChwb3MpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMjc3LDcgKzI3Nyw3IEBAIGJvb2wgU1ZHU01J
TEVsZW1lbnQ6OnBhcnNlQ29uZGl0aW9uKGNvbnMKICAgICAKICAgICBTdHJpbmcgYmFzZUlEOwog
ICAgIFN0cmluZyBuYW1lU3RyaW5nOwotICAgIGlmIChwb3MgPT0gLTEpCisgICAgaWYgKHBvcyA9
PSBub3RGb3VuZCkKICAgICAgICAgbmFtZVN0cmluZyA9IGNvbmRpdGlvblN0cmluZzsKICAgICBl
bHNlIHsKICAgICAgICAgYmFzZUlEID0gY29uZGl0aW9uU3RyaW5nLmxlZnQocG9zKTsKSW5kZXg6
IFdlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDY1NDY1KQorKysgV2ViQ29yZS94bWwvWFBh
dGhGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOSArNDc3LDkgQEAgVmFsdWUg
RnVuU3Vic3RyaW5nQmVmb3JlOjpldmFsdWF0ZSgpIGNvbgogICAgIGlmIChzMi5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiAiIjsKIAotICAgIGludCBpID0gczEuZmluZChzMik7CisgICAgc2l6
ZV90IGkgPSBzMS5maW5kKHMyKTsKIAotICAgIGlmIChpID09IC0xKQorICAgIGlmIChpID09IG5v
dEZvdW5kKQogICAgICAgICByZXR1cm4gIiI7CiAKICAgICByZXR1cm4gczEubGVmdChpKTsKQEAg
LTQ5MCw4ICs0OTAsOCBAQCBWYWx1ZSBGdW5TdWJzdHJpbmdBZnRlcjo6ZXZhbHVhdGUoKSBjb25z
CiAgICAgU3RyaW5nIHMxID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CiAgICAgU3Ry
aW5nIHMyID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CiAKLSAgICBpbnQgaSA9IHMx
LmZpbmQoczIpOwotICAgIGlmIChpID09IC0xKQorICAgIHNpemVfdCBpID0gczEuZmluZChzMik7
CisgICAgaWYgKGkgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiAiIjsKIAogICAgIHJldHVy
biBzMS5zdWJzdHJpbmcoaSArIHMyLmxlbmd0aCgpKTsKQEAgLTU1NiwxMSArNTU2LDExIEBAIFZh
bHVlIEZ1blRyYW5zbGF0ZTo6ZXZhbHVhdGUoKSBjb25zdAogICAgIC8vIEZJWE1FOiBCdWlsZGlu
ZyBhIFN0cmluZyBhIGNoYXJhY3RlciBhdCBhIHRpbWUgaXMgcXVpdGUgc2xvdy4KICAgICBmb3Ig
KHVuc2lnbmVkIGkxID0gMDsgaTEgPCBzMS5sZW5ndGgoKTsgKytpMSkgewogICAgICAgICBVQ2hh
ciBjaCA9IHMxW2kxXTsKLSAgICAgICAgaW50IGkyID0gczIuZmluZChjaCk7CisgICAgICAgIHNp
emVfdCBpMiA9IHMyLmZpbmQoY2gpOwogICAgICAgICAKLSAgICAgICAgaWYgKGkyID09IC0xKQor
ICAgICAgICBpZiAoaTIgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gU3Ry
aW5nKCZjaCwgMSk7Ci0gICAgICAgIGVsc2UgaWYgKCh1bnNpZ25lZClpMiA8IHMzLmxlbmd0aCgp
KSB7CisgICAgICAgIGVsc2UgaWYgKGkyIDwgczMubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIFVD
aGFyIGMyID0gczNbaTJdOwogICAgICAgICAgICAgbmV3U3RyaW5nICs9IFN0cmluZygmYzIsIDEp
OwogICAgICAgICB9CkBAIC02MDgsOCArNjA4LDggQEAgVmFsdWUgRnVuTGFuZzo6ZXZhbHVhdGUo
KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgLy8gUmVtb3ZlIHN1
ZmZpeGVzIG9uZSBieSBvbmUuCi0gICAgICAgIGludCBpbmRleCA9IGxhbmdWYWx1ZS5yZXZlcnNl
RmluZCgnLScpOwotICAgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgIHNpemVfdCBpbmRl
eCA9IGxhbmdWYWx1ZS5yZXZlcnNlRmluZCgnLScpOworICAgICAgICBpZiAoaW5kZXggPT0gbm90
Rm91bmQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbGFuZ1ZhbHVlID0gbGFuZ1ZhbHVl
LmxlZnQoaW5kZXgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDY1NDY1
KQorKysgV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTMs
OCArNDUzLDggQEAgaW50IFBhcnNlcjo6bGV4KHZvaWQqIGRhdGEpCiAKIGJvb2wgUGFyc2VyOjpl
eHBhbmRRTmFtZShjb25zdCBTdHJpbmcmIHFOYW1lLCBTdHJpbmcmIGxvY2FsTmFtZSwgU3RyaW5n
JiBuYW1lc3BhY2VVUkkpCiB7Ci0gICAgaW50IGNvbG9uID0gcU5hbWUuZmluZCgnOicpOwotICAg
IGlmIChjb2xvbiA+PSAwKSB7CisgICAgc2l6ZV90IGNvbG9uID0gcU5hbWUuZmluZCgnOicpOwor
ICAgIGlmIChjb2xvbiAhPSBub3RGb3VuZCkgewogICAgICAgICBpZiAoIW1fcmVzb2x2ZXIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5hbWVzcGFjZVVSSSA9IG1fcmVzb2x2
ZXItPmxvb2t1cE5hbWVzcGFjZVVSSShxTmFtZS5sZWZ0KGNvbG9uKSk7Cg==
</data>
<flag name="review"
          id="53119"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>