<?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>26587</bug_id>
          
          <creation_ts>2009-06-21 12:51:06 -0700</creation_ts>
          <short_desc>Support JSON.parse</short_desc>
          <delta_ts>2009-06-22 21:30:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>26591</dependson>
          <blocked>20031</blocked>
    
    <blocked>26325</blocked>
    
    <blocked>26503</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127227</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 12:51:06 -0700</bug_when>
    <thetext>We have a JSON object but no JSON.parse</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127228</commentid>
    <comment_count>1</comment_count>
      <attachid>31617</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 13:03:00 -0700</bug_when>
    <thetext>Created attachment 31617
Initial JSON.parse support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127230</commentid>
    <comment_count>2</comment_count>
      <attachid>31617</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-21 13:16:10 -0700</bug_when>
    <thetext>Comment on attachment 31617
Initial JSON.parse support

&gt; -    LiteralParser preparser(callFrame, programSource);
&gt; +    LiteralParser preparser(callFrame, programSource, false);

I am not a fan of booleans for this sort of thing. A named enum would work better here.

&gt; +    LiteralParser preparser(exec, source, true);

I think preparser is a strange name here. How about just &quot;parser&quot;.

&gt; +    if (JSValue parsedObject = preparser.tryJSONParse())
&gt; +        return parsedObject;
&gt; +    
&gt; +    return throwError(exec, SyntaxError, &quot;Unable to parse JSON string&quot;);

I would have written this the other way around, with the early return for the error case. You couldn&apos;t scope the return value, but otherwise it would be better.

&gt; +                token.end = m_ptr += 4;

Merging these two statements into one line seems too clever and unnecessarily subtle and hence hard to read. Just m_ptr += 4 on one line and token.end = m_ptr on another should be fine.

&gt; +        case &apos;f&apos;: {

No need for this extra set of braces on all these cases.

&gt; +static bool isSafeStringCharacter(UChar c)
&gt; +{
&gt; +    return (c &gt;= &apos; &apos; &amp;&amp; c &lt;= 0xff &amp;&amp; c != &apos;\\&apos; &amp;&amp; c != &apos;&quot;&apos;) || c == &apos;\t&apos;;
&gt; +}

Could I suggest that you use inline here?

Also, I think the ? : operator would be better. If it&apos;s &gt;= &apos; &apos; you can do one set of checks, and if it&apos;s &lt; &apos; &apos; you can do the &apos;\t&apos; check.

    return c &gt;= &apos; &apos; ? c &lt;= 0xFF &amp;&amp; c != &apos;\\&apos; &amp;&amp; c != &apos;&quot;&apos; : c == &apos;\t&apos;;

&gt; +                    if ((m_end - m_ptr) &lt; 5) // uNNNN == 5 characters

Extra parentheses here seem unneeded.

&gt; +                    token.stringToken.append(JSC::Lexer::convertUnicode(m_ptr[1], m_ptr[2], m_ptr[3], m_ptr[4]));

Does this do the right thing for illegal UTF-16?

&gt; +                    case TokNull: {

&gt; +                    case TokTrue: {

&gt; +                    case TokFalse: {

These extra braces here are unneeded.

&gt; +        JSValue tryJSONParse()

I think it&apos;s strange that this parser has both a strict boolean in the constructor *and* a separate entry point for the JSON parse. Is that really necessary?

&gt; +        {
&gt; +            m_lexer.next();
&gt; +            JSValue result = parse(StartParseExpression);
&gt; +            if (m_lexer.currentToken().type != TokEnd)
&gt; +                return JSValue();
&gt; +            return result;
&gt; +        }

Does this really need to be inline? Can&apos;t some of the code just be defined normally without putting it all in the header?

Patch has test, but is missing the test results.

r=me as long as you deal with the test result issue, but please consider some of the other comments too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127232</commentid>
    <comment_count>3</comment_count>
      <attachid>31617</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 13:23:10 -0700</bug_when>
    <thetext>Comment on attachment 31617
Initial JSON.parse support

removing review flag as there appears to be an error in the parser now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127250</commentid>
    <comment_count>4</comment_count>
      <attachid>31622</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 15:41:10 -0700</bug_when>
    <thetext>Created attachment 31622
JSON.parse, this time correct

This is identical to the previous patch except for a few minor changes.  I re-added the string token reset i had moronically removed prior to submission.  And added tests that catch the behaviour it introduced.

Restructured JSONProtoFuncParse to exit early on failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127252</commentid>
    <comment_count>5</comment_count>
      <attachid>31623</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 15:53:33 -0700</bug_when>
    <thetext>Created attachment 31623
Address rest of darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127255</commentid>
    <comment_count>6</comment_count>
      <attachid>31623</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2009-06-21 15:57:21 -0700</bug_when>
    <thetext>Comment on attachment 31623
Address rest of darin&apos;s comments

You still have instances of

token.end = m_ptr += 5;

but you say you have fixed them locally. Now that you have removed the braces, you should probably decide on a consistent style for whether or not there are blank lines after the case statements inside of a switch. Other than that, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127257</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 16:08:54 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/interpreter/Interpreter.cpp
	M	JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
	M	JavaScriptCore/runtime/JSONObject.cpp
	M	JavaScriptCore/runtime/LiteralParser.cpp
	M	JavaScriptCore/runtime/LiteralParser.h
	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/js/JSON-parse-expected.txt
	A	LayoutTests/fast/js/JSON-parse.html
	A	LayoutTests/fast/js/resources/JSON-parse.js
Committed r44923
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127262</commentid>
    <comment_count>8</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 16:32:53 -0700</bug_when>
    <thetext>Build fix
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/runtime/LiteralParser.cpp
Committed r44924
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31617</attachid>
            <date>2009-06-21 13:03:00 -0700</date>
            <delta_ts>2009-06-21 15:41:10 -0700</delta_ts>
            <desc>Initial JSON.parse support</desc>
            <filename>JSON.parse.patch</filename>
            <type>text/plain</type>
            <size>25431</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAyZGMwOGUwLi5mZDAyM2I2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMDktMDYtMjEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjY1ODc6IFN1cHBv
cnQgSlNPTi5wYXJzZQorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI2NTg3PgorCisgICAgICAgIEV4dGVuZCB0aGUgTGl0ZXJhbFBhcnNlciB0byBzdXBw
b3J0IHRoZSBmdWxsIHN0cmljdCBKU09OCisgICAgICAgIGdyYW1tYXIsIGZpeCBhIGZldyBwbGFj
ZXMgd2hlcmUgdGhlIGdyYW1tYXIgd2FzIGluY29ycmVjdGx5CisgICAgICAgIGxlbmllbnQuICAg
RG9lc24ndCB5ZXQgc3VwcG9ydCB0aGUgSlNPTi5wYXJzZSByZXZpdmVyIGZ1bmN0aW9uCisgICAg
ICAgIGJ1dCB0aGF0IGRvZXMgbm90IGJsb2NrIHRoZSBKU09OLnBhcnNlIGZ1bmN0aW9uYWxpdHkg
aXRzZWxmLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6Cisg
ICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3Rv
RnVuY1BhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKEpTQzo6aXNTYWZl
U3RyaW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6TGV4ZXI6Omxl
eFN0cmluZyk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KiBydW50aW1lL0xpdGVyYWxQYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6
TGl0ZXJhbFBhcnNlcik6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OnRyeUpTT05QYXJz
ZSk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6Oik6CisgICAgICAgIChKU0M6OkxpdGVy
YWxQYXJzZXI6OkxleGVyOjpMZXhlcik6CisKIDIwMDktMDYtMjAgIERhdmlkIEQuIEtpbHplciAg
PGRka2lsemVyQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IG5hbWVzcGFjZSBjb21tZW50IGlu
IFNlZ21lbnRlZFZlY3Rvci5oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKaW5kZXggYjNiNjgxYS4uNDNlM2NlYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcApAQCAtMzUwLDcgKzM1MCw3IEBAIE5FVkVSX0lOTElORSBKU1Zh
bHVlIEludGVycHJldGVyOjpjYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXJG
aWxlKiByCiAKICAgICBVU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+
dmFsdWUoKTsKIAotICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3Jh
bVNvdXJjZSk7CisgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFt
U291cmNlLCBmYWxzZSk7CiAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJlcGFyc2Vy
LnRyeUxpdGVyYWxQYXJzZSgpKQogICAgICAgICByZXR1cm4gcGFyc2VkT2JqZWN0OwogICAgIApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cAppbmRleCBiMDEzOTU3Li4zNjNlMGRlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBmdW5jdGlvbiwgSlNWYWx1CiAKICAgICBVU3RyaW5nIHMgPSB4LnRvU3RyaW5nKGV4ZWMpOwog
Ci0gICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoZXhlYywgcyk7CisgICAgTGl0ZXJhbFBhcnNl
ciBwcmVwYXJzZXIoZXhlYywgcywgZmFsc2UpOwogICAgIGlmIChKU1ZhbHVlIHBhcnNlZE9iamVj
dCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKICAgICAgICAgcmV0dXJuIHBhcnNlZE9i
amVjdDsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKaW5kZXggZjdlNzA4ZS4u
YjhkZGMxNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKICNpbmNs
dWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
QEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoSlNPTk9iamVjdCk7CiAKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlBy
b3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogCiB9CkBA
IC01NjIsNiArNTY0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTT05PYmplY3Q6OmluZm8gPSB7ICJK
U09OIiwgMCwgMCwgRXhlY1N0YXRlOjpqc29uVGFibGUgfTsKIAogLyogU291cmNlIGZvciBKU09O
T2JqZWN0Lmx1dC5oCiBAYmVnaW4ganNvblRhYmxlCisgIHBhcnNlICAgICAgICAgSlNPTlByb3Rv
RnVuY1BhcnNlICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKICAgc3RyaW5naWZ5ICAg
ICBKU09OUHJvdG9GdW5jU3RyaW5naWZ5ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQogQGVu
ZAogKi8KQEAgLTU4NSw2ICs1ODgsMjMgQEAgdm9pZCBKU09OT2JqZWN0OjptYXJrU3RyaW5naWZp
ZXJzKFN0cmluZ2lmaWVyKiBzdHJpbmdpZmllcikKIH0KIAogLy8gRUNNQS0yNjIgdjUgMTUuMTIu
MworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAo
YXJncy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxF
cnJvciwgIk5vIGlucHV0IHRvIHN0cmluZ2lmeSIpOworICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdz
LmF0KDApOworICAgIFVTdHJpbmcgc291cmNlID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAg
CisgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoZXhlYywgc291cmNlLCB0cnVlKTsKKyAgICBp
ZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5SlNPTlBhcnNlKCkpCisgICAg
ICAgIHJldHVybiBwYXJzZWRPYmplY3Q7CisgICAgCisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgU3ludGF4RXJyb3IsICJVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmciKTsKK30KKworLy8g
RUNNQS0yNjIgdjUgMTUuMTIuMwogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNT
dHJpbmdpZnkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAKaW5kZXggMjBiM2I3OC4uZGU3YmNkMiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCkBAIC0yOCwxNSArMjgsMTEgQEAKIAogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIkxleGVy
LmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0
YXRpYyBib29sIGlzU2FmZVN0cmluZ0NoYXJhY3RlcihVQ2hhciBjKQotewotICAgIHJldHVybiAo
YyA+PSAnICcgJiYgYyA8PSAweGZmICYmIGMgIT0gJ1xcJykgfHwgYyA9PSAnXHQnOwotfQotCiBM
aXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6TGV4ZXI6OmxleChMaXRlcmFs
UGFyc2VyVG9rZW4mIHRva2VuKQogewogICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVND
SUlTcGFjZSgqbV9wdHIpKQpAQCAtODQsOCArODAsMzMgQEAgTGl0ZXJhbFBhcnNlcjo6VG9rZW5U
eXBlIExpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXgoTGl0ZXJhbFBhcnNlclRva2VuJiB0b2tlbikK
ICAgICAgICAgICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CiAgICAgICAgICAgICByZXR1cm4gVG9r
Q29sb247CiAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgcmV0dXJuIGxleFN0cmluZyh0
b2tlbik7Ci0KKyAgICAgICAgICAgIGlmIChtX3N0cmljdEpTT04pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGxleFN0cmluZzx0cnVlPih0b2tlbik7CisgICAgICAgICAgICByZXR1cm4gbGV4U3Ry
aW5nPGZhbHNlPih0b2tlbik7CisgICAgICAgIGNhc2UgJ3QnOiB7CisgICAgICAgICAgICBpZiAo
bV9lbmQgLSBtX3B0ciA+PSA0ICYmIG1fcHRyWzFdID09ICdyJyAmJiBtX3B0clsyXSA9PSAndScg
JiYgbV9wdHJbM10gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9IFRva1Ry
dWU7CisgICAgICAgICAgICAgICAgdG9rZW4uZW5kID0gbV9wdHIgKz0gNDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gVG9rVHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgJ2YnOiB7CisgICAgICAgICAgICBpZiAobV9lbmQgLSBt
X3B0ciA+PSA1ICYmIG1fcHRyWzFdID09ICdhJyAmJiBtX3B0clsyXSA9PSAnbCcgJiYgbV9wdHJb
M10gPT0gJ3MnICYmIG1fcHRyWzRdID09ICdlJykgeworICAgICAgICAgICAgICAgIHRva2VuLnR5
cGUgPSBUb2tGYWxzZTsKKyAgICAgICAgICAgICAgICB0b2tlbi5lbmQgPSBtX3B0ciArPSA1Owor
ICAgICAgICAgICAgICAgIHJldHVybiBUb2tGYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgJ24nOiB7CisgICAgICAgICAgICBp
ZiAobV9lbmQgLSBtX3B0ciA+PSA0ICYmIG1fcHRyWzFdID09ICd1JyAmJiBtX3B0clsyXSA9PSAn
bCcgJiYgbV9wdHJbM10gPT0gJ2wnKSB7CisgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9IFRv
a051bGw7CisgICAgICAgICAgICAgICAgdG9rZW4uZW5kID0gbV9wdHIgKz0gNDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVG9rTnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgJy0nOgogICAgICAgICBjYXNl
ICcwJzoKICAgICAgICAgY2FzZSAnMSc6CkBAIC0xMDIsMTYgKzEyMyw3OSBAQCBMaXRlcmFsUGFy
c2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6TGV4ZXI6OmxleChMaXRlcmFsUGFyc2VyVG9r
ZW4mIHRva2VuKQogICAgIHJldHVybiBUb2tFcnJvcjsKIH0KIAotTGl0ZXJhbFBhcnNlcjo6VG9r
ZW5UeXBlIExpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXhTdHJpbmcoTGl0ZXJhbFBhcnNlclRva2Vu
JiB0b2tlbikKK3N0YXRpYyBib29sIGlzU2FmZVN0cmluZ0NoYXJhY3RlcihVQ2hhciBjKQorewor
ICAgIHJldHVybiAoYyA+PSAnICcgJiYgYyA8PSAweGZmICYmIGMgIT0gJ1xcJyAmJiBjICE9ICci
JykgfHwgYyA9PSAnXHQnOworfQorCit0ZW1wbGF0ZSA8Ym9vbCBpc0pTT04+IExpdGVyYWxQYXJz
ZXI6OlRva2VuVHlwZSBMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4U3RyaW5nKExpdGVyYWxQYXJz
ZXJUb2tlbiYgdG9rZW4pCiB7CiAgICAgKyttX3B0cjsKLSAgICB3aGlsZSAobV9wdHIgPCBtX2Vu
ZCAmJiBpc1NhZmVTdHJpbmdDaGFyYWN0ZXIoKm1fcHRyKSAmJiAqbV9wdHIgIT0gJyInKQotICAg
ICAgICArK21fcHRyOwotICAgIGlmIChtX3B0ciA+PSBtX2VuZCB8fCAqbV9wdHIgIT0gJyInKSB7
Ci0gICAgICAgIHRva2VuLnR5cGUgPSBUb2tFcnJvcjsKLSAgICAgICAgdG9rZW4uZW5kID0gKytt
X3B0cjsKKyAgICBjb25zdCBVQ2hhciogcnVuU3RhcnQ7CisgICAgZG8geworICAgICAgICBydW5T
dGFydCA9IG1fcHRyOworICAgICAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVTdHJp
bmdDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAgICAgICsrbV9wdHI7CisgICAgICAgIGlmIChy
dW5TdGFydCA8IG1fcHRyKQorICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKHJ1
blN0YXJ0LCBtX3B0ciAtIHJ1blN0YXJ0KTsKKyAgICAgICAgaWYgKGlzSlNPTiAmJiBtX3B0ciA8
IG1fZW5kICYmICptX3B0ciA9PSAnXFwnKSB7CisgICAgICAgICAgICArK21fcHRyOworICAgICAg
ICAgICAgaWYgKG1fcHRyID49IG1fZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBUb2tFcnJv
cjsKKyAgICAgICAgICAgIHN3aXRjaCAoKm1fcHRyKSB7CisgICAgICAgICAgICAgICAgY2FzZSAn
Iic6CisgICAgICAgICAgICAgICAgICAgIHRva2VuLnN0cmluZ1Rva2VuLmFwcGVuZCgnIicpOwor
ICAgICAgICAgICAgICAgICAgICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgICAgIHRva2VuLnN0
cmluZ1Rva2VuLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wdHIrKzsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnLyc6CisgICAg
ICAgICAgICAgICAgICAgIHRva2VuLnN0cmluZ1Rva2VuLmFwcGVuZCgnLycpOworICAgICAgICAg
ICAgICAgICAgICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4u
YXBwZW5kKCdcYicpOworICAgICAgICAgICAgICAgICAgICBtX3B0cisrOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAg
ICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdcZicpOworICAgICAgICAgICAgICAgICAg
ICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlICduJzoKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdc
bicpOworICAgICAgICAgICAgICAgICAgICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgdG9r
ZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdccicpOworICAgICAgICAgICAgICAgICAgICBtX3B0cisr
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICd0JzoK
KyAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdcdCcpOworICAg
ICAgICAgICAgICAgICAgICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICBpZiAoKG1fZW5k
IC0gbV9wdHIpIDwgNSkgLy8gdU5OTk4gPT0gNSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVG9rRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAxOyBpIDwgNTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlI
ZXhEaWdpdChtX3B0cltpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRv
a0Vycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRva2Vu
LnN0cmluZ1Rva2VuLmFwcGVuZChKU0M6OkxleGVyOjpjb252ZXJ0VW5pY29kZShtX3B0clsxXSwg
bV9wdHJbMl0sIG1fcHRyWzNdLCBtX3B0cls0XSkpOworICAgICAgICAgICAgICAgICAgICBtX3B0
ciArPSA1OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tFcnJvcjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGlzSlNPTiAmJiBtX3B0ciAhPSBydW5TdGFydCAm
JiAobV9wdHIgPCBtX2VuZCkgJiYgKm1fcHRyICE9ICciJyk7CisKKyAgICBpZiAobV9wdHIgPj0g
bV9lbmQgfHwgKm1fcHRyICE9ICciJykKICAgICAgICAgcmV0dXJuIFRva0Vycm9yOwotICAgIH0K
KwogICAgIHRva2VuLnR5cGUgPSBUb2tTdHJpbmc7CiAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsK
ICAgICByZXR1cm4gVG9rU3RyaW5nOwpAQCAtMjI2LDcgKzMxMCwyNSBAQCBKU1ZhbHVlIExpdGVy
YWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlIGluaXRpYWxTdGF0ZSkKICAgICAgICAgICAgIGNh
c2UgU3RhcnRQYXJzZU9iamVjdDogewogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMpOwogICAgICAgICAgICAgICAgIG9iamVjdFN0
YWNrLmFwcGVuZChvYmplY3QpOwotICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCisKKyAg
ICAgICAgICAgICAgICBUb2tlblR5cGUgdHlwZSA9IG1fbGV4ZXIubmV4dCgpOworICAgICAgICAg
ICAgICAgIGlmICh0eXBlID09IFRva1N0cmluZykgeworICAgICAgICAgICAgICAgICAgICBMZXhl
cjo6TGl0ZXJhbFBhcnNlclRva2VuIGlkZW50aWZpZXJUb2tlbiA9IG1fbGV4ZXIuY3VycmVudFRv
a2VuKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbG9uCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tDb2xvbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllclN0YWNrLmFwcGVuZChJZGVudGlmaWVyKG1fZXhlYywgaWRlbnRpZmllclRva2VuLnN0
cmluZ1Rva2VuKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKERvUGFy
c2VPYmplY3RFbmRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydFBh
cnNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gVG9rUkJy
YWNlKSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBvYmplY3RT
dGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgb2JqZWN0U3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZG9QYXJz
ZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjoKICAgICAgICAgICAgIGNhc2UgRG9QYXJzZU9iamVjdFN0
YXJ0RXhwcmVzc2lvbjogewpAQCAtMjM5LDEwICszNDEsMTAgQEAgSlNWYWx1ZSBMaXRlcmFsUGFy
c2VyOjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIubmV4
dCgpOwotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2suYXBwZW5kKElkZW50aWZp
ZXIobV9leGVjLCBpZGVudGlmaWVyVG9rZW4uc3RhcnQgKyAxLCBpZGVudGlmaWVyVG9rZW4uZW5k
IC0gaWRlbnRpZmllclRva2VuLnN0YXJ0IC0gMikpOworICAgICAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyU3RhY2suYXBwZW5kKElkZW50aWZpZXIobV9leGVjLCBpZGVudGlmaWVyVG9rZW4uc3Ry
aW5nVG9rZW4pKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoRG9QYXJz
ZU9iamVjdEVuZEV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0UGFy
c2VFeHByZXNzaW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPSBUb2tSQnJh
Y2UpIAorICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogICAgICAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOwogICAgICAgICAgICAg
ICAgIGxhc3RWYWx1ZSA9IG9iamVjdFN0YWNrLmxhc3QoKTsKQEAgLTI3Miw3ICszNzQsNyBAQCBK
U1ZhbHVlIExpdGVyYWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlIGluaXRpYWxTdGF0ZSkKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBUb2tTdHJpbmc6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIExleGVyOjpMaXRlcmFsUGFyc2VyVG9rZW4gc3RyaW5nVG9rZW4gPSBtX2xleGVyLmN1cnJl
bnRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyhtX2V4ZWMsIFVTdHJpbmco
c3RyaW5nVG9rZW4uc3RhcnQgKyAxLCBzdHJpbmdUb2tlbi5lbmQgLSBzdHJpbmdUb2tlbi5zdGFy
dCAtIDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzU3RyaW5nKG1f
ZXhlYywgc3RyaW5nVG9rZW4uc3RyaW5nVG9rZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2FzZSBU
b2tOdW1iZXI6IHsKQEAgLTI4MSw2ICszODMsMjEgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyOjpw
YXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBs
YXN0VmFsdWUgPSBqc051bWJlcihtX2V4ZWMsIFVTdHJpbmcobnVtYmVyVG9rZW4uc3RhcnQsIG51
bWJlclRva2VuLmVuZCAtIG51bWJlclRva2VuLnN0YXJ0KS50b0RvdWJsZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVG9rTnVsbDogeworICAgICAgICAgICAgICAgICAgICAgICAgbV9sZXhl
ci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc051bGwoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rVHJ1ZTogeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBq
c0Jvb2xlYW4odHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXNlIFRva0ZhbHNlOiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RWYWx1ZSA9IGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xpdGVyYWxQYXJzZXIuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNl
ci5oCmluZGV4IDdkMDI4ZjcuLjkxNzIyZGEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGl0ZXJhbFBhcnNlci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJh
bFBhcnNlci5oCkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
TGl0ZXJhbFBhcnNlciB7CiAgICAgcHVibGljOgotICAgICAgICBMaXRlcmFsUGFyc2VyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykKKyAgICAgICAgTGl0ZXJhbFBhcnNlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMsIGJvb2wgc3RyaWN0SlNPTikKICAgICAgICAg
ICAgIDogbV9leGVjKGV4ZWMpCi0gICAgICAgICAgICAsIG1fbGV4ZXIocykKKyAgICAgICAgICAg
ICwgbV9sZXhlcihzLCBzdHJpY3RKU09OKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC00OCw2ICs0OCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSlNWYWx1ZSB0cnlKU09OUGFyc2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gcGFyc2Uo
U3RhcnRQYXJzZUV4cHJlc3Npb24pOworICAgICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRv
a2VuKCkudHlwZSAhPSBUb2tFbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICAgICBwcml2YXRlOgogICAg
ICAgICBlbnVtIFBhcnNlclN0YXRlIHsgU3RhcnRQYXJzZU9iamVjdCwgU3RhcnRQYXJzZUFycmF5
LCBTdGFydFBhcnNlRXhwcmVzc2lvbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFy
dFBhcnNlU3RhdGVtZW50LCBTdGFydFBhcnNlU3RhdGVtZW50RW5kU3RhdGVtZW50LCAKQEAgLTU1
LDcgKzY0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
b1BhcnNlQXJyYXlTdGFydEV4cHJlc3Npb24sIERvUGFyc2VBcnJheUVuZEV4cHJlc3Npb24gfTsK
ICAgICAgICAgZW51bSBUb2tlblR5cGUgeyBUb2tMQnJhY2tldCwgVG9rUkJyYWNrZXQsIFRva0xC
cmFjZSwgVG9rUkJyYWNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBUb2tTdHJpbmcsIFRv
a0lkZW50aWZpZXIsIFRva051bWJlciwgVG9rQ29sb24sIAotICAgICAgICAgICAgICAgICAgICAg
ICAgIFRva0xQYXJlbiwgVG9rUlBhcmVuLCBUb2tDb21tYSwgVG9rRW5kLCBUb2tFcnJvciB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgIFRva0xQYXJlbiwgVG9rUlBhcmVuLCBUb2tDb21tYSwg
VG9rVHJ1ZSwgVG9rRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgVG9rTnVsbCwgVG9r
RW5kLCBUb2tFcnJvciB9OwogCiAgICAgICAgIGNsYXNzIExleGVyIHsKICAgICAgICAgcHVibGlj
OgpAQCAtNjMsOSArNzMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgVG9r
ZW5UeXBlIHR5cGU7CiAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0OwogICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBlbmQ7CisgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJp
bmdUb2tlbjsKICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBMZXhlcihjb25zdCBVU3RyaW5n
JiBzKQorICAgICAgICAgICAgTGV4ZXIoY29uc3QgVVN0cmluZyYgcywgYm9vbCBzdHJpY3RKU09O
KQogICAgICAgICAgICAgICAgIDogbV9zdHJpbmcocykKKyAgICAgICAgICAgICAgICAsIG1fc3Ry
aWN0SlNPTihzdHJpY3RKU09OKQogICAgICAgICAgICAgICAgICwgbV9wdHIocy5kYXRhKCkpCiAg
ICAgICAgICAgICAgICAgLCBtX2VuZChzLmRhdGEoKSArIHMuc2l6ZSgpKQogICAgICAgICAgICAg
ewpAQCAtODMsMTAgKzk1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgCiAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICBUb2tlblR5cGUgbGV4KExpdGVyYWxQYXJzZXJUb2tl
biYpOwotICAgICAgICAgICAgVG9rZW5UeXBlIGxleFN0cmluZyhMaXRlcmFsUGFyc2VyVG9rZW4m
KTsKKyAgICAgICAgICAgIHRlbXBsYXRlIDxib29sIGlzSlNPTj4gVG9rZW5UeXBlIGxleFN0cmlu
ZyhMaXRlcmFsUGFyc2VyVG9rZW4mKTsKICAgICAgICAgICAgIFRva2VuVHlwZSBsZXhOdW1iZXIo
TGl0ZXJhbFBhcnNlclRva2VuJik7CiAgICAgICAgICAgICBMaXRlcmFsUGFyc2VyVG9rZW4gbV9j
dXJyZW50VG9rZW47CiAgICAgICAgICAgICBVU3RyaW5nIG1fc3RyaW5nOworICAgICAgICAgICAg
Ym9vbCBtX3N0cmljdEpTT047CiAgICAgICAgICAgICBjb25zdCBVQ2hhciogbV9wdHI7CiAgICAg
ICAgICAgICBjb25zdCBVQ2hhciogbV9lbmQ7CiAgICAgICAgIH07CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTg5MjUxMi4u
MTY3YzVmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDA5LTA2LTIxICBPbGl2ZXIgSHVudCAg
PG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQnVnIDI2NTg3OiBTdXBwb3J0IEpTT04ucGFyc2UKKworICAgICAgICBBZGQg
dGVzdHMgdG8gY292ZXIgYmFzaWMgdXNhZ2Ugb2YgSlNPTi5wYXJzZQorCisgICAgICAgICogZmFz
dC9qcy9KU09OLXBhcnNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2Vz
L0pTT04tcGFyc2UuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlVGVzdHMucmVzdWx0KToKKyAg
ICAgICAgKGNyZWF0ZVRlc3RzKToKKwogMjAwOS0wNi0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDogU2tpcCBvbmUgbW9y
ZSB0ZXN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OLXBhcnNlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04tcGFyc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kNjU5YmVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9qcy9KU09OLXBhcnNlLmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
PHNjcmlwdD4KK3ZhciBuYXRpdmVKU09OID0gdGhpcy5KU09OOwordGhpcy5KU09OID0gbnVsbDsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qc29uMi1lczUtY29tcGF0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvSlNPTi1wYXJzZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9K
U09OLXBhcnNlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvSlNPTi1wYXJzZS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI3MDFiCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvSlNPTi1wYXJzZS5qcwpAQCAt
MCwwICsxLDI2MiBAQAorCitmdW5jdGlvbiBjcmVhdGVUZXN0cygpIHsKKyAgICB2YXIgcmVzdWx0
ID0gW107CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5n
dGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmpl
Y3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnJyk7CisgICAgfSk7CisgICAg
cmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNo
KGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
MScpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnLTEnKTsKKyAgICB9KTsKKyAgICByZXN1bHQu
cHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFy
c2UoJ0luZmluaXR5Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50
aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnTmFOJyk7CisgICAgfSk7CisgICAgcmVzdWx0
W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0
aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnbnVsbCcp
OworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAg
ICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgndW5kZWZpbmVkJyk7CisgICAgfSk7CisgICAgcmVz
dWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1
bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgne30n
KTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAg
ICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyh7fSknKTsKKyAgICB9KTsKKyAgICByZXN1bHRb
cmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rp
b24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7YX0nKTsK
KyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7Cisg
ICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCd7YTp9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGgg
LSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qp
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgne2E6NX0nKTsKKyAgICB9KTsKKyAg
ICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1
c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNl
KCd7YTo1LH0nKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93
cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAg
IHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEifScpOworICAgIH0pOworICAgIHJlc3VsdFty
ZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlv
bihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSI6fScp
OworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsK
KyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJ3siYSI6NX0nKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5j
dGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSI6
NSx9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0
cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjo1LCx9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jl
c3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9u
KGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjo1LCJh
Iix9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0
cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjooNSwiYSIpLH0nKTsKKyAgICB9KTsKKyAgICByZXN1
bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVu
Y3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdbXScp
OworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAg
ICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnWzFdJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1
c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNl
KCdbMSxdJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdbMSwyXScpOworICAgIH0pOworICAg
IHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9i
amVjdC5wYXJzZSgnWzEsMiwsXScpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3Ro
IC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ1sxLDIsLDRdJyk7CisgICAgfSk7
CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3Vs
dC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgnIiInKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJcJyInKTsKKyAgICB9KTsKKyAg
ICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25P
YmplY3QucGFyc2UoJyJhXCInKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihq
c29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFwiJyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAg
IHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9i
amVjdC5wYXJzZSgnImFcXHoiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24o
anNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcXHoiJyk7
CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOwor
ICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZSgnImFcXFxceiInKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5j
dGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXHR6
IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHR6IicpOworICAgIH0pOworICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgnImFcbnoiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNv
bk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcbnoiJyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxyeiInKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVz
aChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2Uo
JyJhXFxyeiInKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXC96IicpOworICAgIH0pOwor
ICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZSgnImFcXC96IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0
aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcYnoi
Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVl
OworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4g
anNvbk9iamVjdC5wYXJzZSgnImFcXGJ6IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1
bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFc
cnoiJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0
cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHJ6IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNo
KGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
ImFcXHV6IiAgICAgJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50
aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUweiIgICAgJyk7CisgICAgfSk7Cisg
ICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5w
dXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJz
ZSgnImFcXHUwMHoiICAgJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAx
XS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qpewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMDB6IiAgJyk7CisgICAgfSk7
CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3Vs
dC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgnImFcXHUwMDAweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24o
anNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwMEF6
IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDAwYXoiICcpOworICAgIH0pOwor
ICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZSgnImFcXHUwMDBHeiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3Vs
dC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpz
b25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMDBneiIg
Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVl
OworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4g
anNvbk9iamVjdC5wYXJzZSgnImFcXHUwMEEweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1
c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNl
KCciYVxcdTAwYTB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29u
T2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDBHMHoiICcp
OworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsK
KyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJyJhXFx1MDBnMHoiICcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1
bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihq
c29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MEEwMHoi
ICcpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwYTAweiIgJyk7CisgICAgfSk7Cisg
ICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCciYVxcdTBHMDB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0
Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNv
bk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTBnMDB6IiAn
KTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7
CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCciYVxcdUEwMDB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVz
aChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2Uo
JyJhXFx1YTAwMHoiICcpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25P
YmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHVHMDAweiIgJyk7
CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOwor
ICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZSgnImFcXHVnMDAweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3Vs
dC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJldHVybiByZXN1bHQ7Cit9Cit2YXIg
dGVzdHMgPSBjcmVhdGVUZXN0cygpOworZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7
IGkrKykgeworICAgIHRyeSB7CisgICAgICAgIGRlYnVnKHRlc3RzW2ldKTsKKyAgICAgICAgaWYg
KHRlc3RzW2ldLnRocm93cykgeworICAgICAgICAgICAgc2hvdWxkVGhyb3coJ3Rlc3RzW2ldKG5h
dGl2ZUpTT04pJyk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZhciB0aHJl
dyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRlc3RzW2ldKEpTT04pOworICAgICAgICAgICAg
fSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghdGhyZXcpCisgICAgICAgICAgICAgICAgZmFpbCgianNv
bjIuanMgZGlkIG5vdCB0aHJvdyBmb3IgYSB0ZXN0IHdlIGV4cGVjdCB0byB0aHJvdy4iKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh0ZXN0c1tpXS5leHBlY3RlZCkKKyAgICAgICAgICAgIHRyeSB7IHNo
b3VsZEJlKCdKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSknLCAgJ3Rlc3RzW2ld
LmV4cGVjdGVkJykgfSBjYXRjaChlKSB7IGZhaWwoInRocmV3Iil9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRyeSB7IHNob3VsZEJlKCdKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVK
U09OKSknLCAgJ0pTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKScpIH0gY2F0Y2goZSkgeyBm
YWlsKCJ0aHJldyIpIH07CisgICAgfWNhdGNoKGUpe30KK30KK3N1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31622</attachid>
            <date>2009-06-21 15:41:10 -0700</date>
            <delta_ts>2009-06-21 15:53:33 -0700</delta_ts>
            <desc>JSON.parse, this time correct</desc>
            <filename>JSON.parse.patch</filename>
            <type>text/plain</type>
            <size>47509</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAyZGMwOGUwLi5mZDAyM2I2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMDktMDYtMjEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjY1ODc6IFN1cHBv
cnQgSlNPTi5wYXJzZQorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI2NTg3PgorCisgICAgICAgIEV4dGVuZCB0aGUgTGl0ZXJhbFBhcnNlciB0byBzdXBw
b3J0IHRoZSBmdWxsIHN0cmljdCBKU09OCisgICAgICAgIGdyYW1tYXIsIGZpeCBhIGZldyBwbGFj
ZXMgd2hlcmUgdGhlIGdyYW1tYXIgd2FzIGluY29ycmVjdGx5CisgICAgICAgIGxlbmllbnQuICAg
RG9lc24ndCB5ZXQgc3VwcG9ydCB0aGUgSlNPTi5wYXJzZSByZXZpdmVyIGZ1bmN0aW9uCisgICAg
ICAgIGJ1dCB0aGF0IGRvZXMgbm90IGJsb2NrIHRoZSBKU09OLnBhcnNlIGZ1bmN0aW9uYWxpdHkg
aXRzZWxmLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6Cisg
ICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3Rv
RnVuY1BhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKEpTQzo6aXNTYWZl
U3RyaW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6TGV4ZXI6Omxl
eFN0cmluZyk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KiBydW50aW1lL0xpdGVyYWxQYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6
TGl0ZXJhbFBhcnNlcik6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OnRyeUpTT05QYXJz
ZSk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6Oik6CisgICAgICAgIChKU0M6OkxpdGVy
YWxQYXJzZXI6OkxleGVyOjpMZXhlcik6CisKIDIwMDktMDYtMjAgIERhdmlkIEQuIEtpbHplciAg
PGRka2lsemVyQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IG5hbWVzcGFjZSBjb21tZW50IGlu
IFNlZ21lbnRlZFZlY3Rvci5oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKaW5kZXggYjNiNjgxYS4uMWM4MDBhOSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcApAQCAtMzUwLDcgKzM1MCw3IEBAIE5FVkVSX0lOTElORSBKU1Zh
bHVlIEludGVycHJldGVyOjpjYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXJG
aWxlKiByCiAKICAgICBVU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+
dmFsdWUoKTsKIAotICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3Jh
bVNvdXJjZSk7CisgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFt
U291cmNlLCBMaXRlcmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKICAgICBpZiAoSlNWYWx1ZSBw
YXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgIHJldHVy
biBwYXJzZWRPYmplY3Q7CiAgICAgCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmluZGV4IGIwMTM5NTcuLjg1ZjkyZjIgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBA
IC0yODIsNyArMjgyLDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHUKIAogICAgIFVTdHJpbmcg
cyA9IHgudG9TdHJpbmcoZXhlYyk7CiAKLSAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihleGVj
LCBzKTsKKyAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihleGVjLCBzLCBMaXRlcmFsUGFyc2Vy
OjpOb25TdHJpY3RKU09OKTsKICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJz
ZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgIHJldHVybiBwYXJzZWRPYmplY3Q7CiAKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCmluZGV4IGY3ZTcwOGUuLjI0YTNhMDkgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKKyNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvcGVy
dHlOYW1lQXJyYXkuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNiw2ICsz
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTT05P
YmplY3QpOwogCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJz
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQpAQCAtNTYyLDYgKzU2
NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU09OT2JqZWN0OjppbmZvID0geyAiSlNPTiIsIDAsIDAs
IEV4ZWNTdGF0ZTo6anNvblRhYmxlIH07CiAKIC8qIFNvdXJjZSBmb3IgSlNPTk9iamVjdC5sdXQu
aAogQGJlZ2luIGpzb25UYWJsZQorICBwYXJzZSAgICAgICAgIEpTT05Qcm90b0Z1bmNQYXJzZSAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCiAgIHN0cmluZ2lmeSAgICAgSlNPTlByb3Rv
RnVuY1N0cmluZ2lmeSAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKIEBlbmQKICovCkBAIC01
ODUsNiArNTg4LDI0IEBAIHZvaWQgSlNPTk9iamVjdDo6bWFya1N0cmluZ2lmaWVycyhTdHJpbmdp
Zmllciogc3RyaW5naWZpZXIpCiB9CiAKIC8vIEVDTUEtMjYyIHY1IDE1LjEyLjMKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3MuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsICJKU09O
LnBhcnNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIiKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gYXJncy5hdCgwKTsKKyAgICBVU3RyaW5nIHNvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOworICAgIAorICAgIExpdGVyYWxQYXJzZXIganNvblBhcnNlcihleGVjLCBzb3VyY2UsIExp
dGVyYWxQYXJzZXI6OlN0cmljdEpTT04pOworICAgIEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0ganNv
blBhcnNlci50cnlKU09OUGFyc2UoKTsKKyAgICBpZiAoIXBhcnNlZE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJVbmFibGUgdG8gcGFyc2UgSlNP
TiBzdHJpbmciKTsKKyAgICAKKyAgICByZXR1cm4gcGFyc2VkT2JqZWN0OworfQorCisvLyBFQ01B
LTI2MiB2NSAxNS4xMi4zCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmlu
Z2lmeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcAppbmRleCAyMGIzYjc4Li4zZDg5NmM1IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKQEAgLTI4LDE1ICsyOCwxMSBAQAogCiAjaW5jbHVk
ZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGlj
IGJvb2wgaXNTYWZlU3RyaW5nQ2hhcmFjdGVyKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIChjID49
ICcgJyAmJiBjIDw9IDB4ZmYgJiYgYyAhPSAnXFwnKSB8fCBjID09ICdcdCc7Ci19Ci0KIExpdGVy
YWxQYXJzZXI6OlRva2VuVHlwZSBMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4KExpdGVyYWxQYXJz
ZXJUb2tlbiYgdG9rZW4pCiB7CiAgICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNBU0NJSVNw
YWNlKCptX3B0cikpCkBAIC04NCw4ICs4MCwzMyBAQCBMaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUg
TGl0ZXJhbFBhcnNlcjo6TGV4ZXI6OmxleChMaXRlcmFsUGFyc2VyVG9rZW4mIHRva2VuKQogICAg
ICAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKICAgICAgICAgICAgIHJldHVybiBUb2tDb2xv
bjsKICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICByZXR1cm4gbGV4U3RyaW5nKHRva2Vu
KTsKLQorICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBTdHJpY3RKU09OKQorICAgICAgICAgICAg
ICAgIHJldHVybiBsZXhTdHJpbmc8U3RyaWN0SlNPTj4odG9rZW4pOworICAgICAgICAgICAgcmV0
dXJuIGxleFN0cmluZzxOb25TdHJpY3RKU09OPih0b2tlbik7CisgICAgICAgIGNhc2UgJ3QnOiB7
CisgICAgICAgICAgICBpZiAobV9lbmQgLSBtX3B0ciA+PSA0ICYmIG1fcHRyWzFdID09ICdyJyAm
JiBtX3B0clsyXSA9PSAndScgJiYgbV9wdHJbM10gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAg
dG9rZW4udHlwZSA9IFRva1RydWU7CisgICAgICAgICAgICAgICAgdG9rZW4uZW5kID0gbV9wdHIg
Kz0gNDsKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rVHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgJ2YnOiB7CisgICAgICAg
ICAgICBpZiAobV9lbmQgLSBtX3B0ciA+PSA1ICYmIG1fcHRyWzFdID09ICdhJyAmJiBtX3B0clsy
XSA9PSAnbCcgJiYgbV9wdHJbM10gPT0gJ3MnICYmIG1fcHRyWzRdID09ICdlJykgeworICAgICAg
ICAgICAgICAgIHRva2VuLnR5cGUgPSBUb2tGYWxzZTsKKyAgICAgICAgICAgICAgICB0b2tlbi5l
bmQgPSBtX3B0ciArPSA1OworICAgICAgICAgICAgICAgIHJldHVybiBUb2tGYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgJ24n
OiB7CisgICAgICAgICAgICBpZiAobV9lbmQgLSBtX3B0ciA+PSA0ICYmIG1fcHRyWzFdID09ICd1
JyAmJiBtX3B0clsyXSA9PSAnbCcgJiYgbV9wdHJbM10gPT0gJ2wnKSB7CisgICAgICAgICAgICAg
ICAgdG9rZW4udHlwZSA9IFRva051bGw7CisgICAgICAgICAgICAgICAgdG9rZW4uZW5kID0gbV9w
dHIgKz0gNDsKKyAgICAgICAgICAgICAgICByZXR1cm4gVG9rTnVsbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Jy0nOgogICAgICAgICBjYXNlICcwJzoKICAgICAgICAgY2FzZSAnMSc6CkBAIC0xMDIsMTYgKzEy
Myw4MCBAQCBMaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6TGV4ZXI6Omxl
eChMaXRlcmFsUGFyc2VyVG9rZW4mIHRva2VuKQogICAgIHJldHVybiBUb2tFcnJvcjsKIH0KIAot
TGl0ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXhTdHJpbmco
TGl0ZXJhbFBhcnNlclRva2VuJiB0b2tlbikKK3N0YXRpYyBib29sIGlzU2FmZVN0cmluZ0NoYXJh
Y3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiAoYyA+PSAnICcgJiYgYyA8PSAweGZmICYmIGMg
IT0gJ1xcJyAmJiBjICE9ICciJykgfHwgYyA9PSAnXHQnOworfQorCit0ZW1wbGF0ZSA8TGl0ZXJh
bFBhcnNlcjo6UGFyc2VyTW9kZSBtb2RlPiBMaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJh
bFBhcnNlcjo6TGV4ZXI6OmxleFN0cmluZyhMaXRlcmFsUGFyc2VyVG9rZW4mIHRva2VuKQogewog
ICAgICsrbV9wdHI7Ci0gICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlU3RyaW5nQ2hh
cmFjdGVyKCptX3B0cikgJiYgKm1fcHRyICE9ICciJykKLSAgICAgICAgKyttX3B0cjsKLSAgICBp
ZiAobV9wdHIgPj0gbV9lbmQgfHwgKm1fcHRyICE9ICciJykgewotICAgICAgICB0b2tlbi50eXBl
ID0gVG9rRXJyb3I7Ci0gICAgICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CisgICAgY29uc3QgVUNo
YXIqIHJ1blN0YXJ0OworICAgIHRva2VuLnN0cmluZ1Rva2VuID0gVVN0cmluZygpOworICAgIGRv
IHsKKyAgICAgICAgcnVuU3RhcnQgPSBtX3B0cjsKKyAgICAgICAgd2hpbGUgKG1fcHRyIDwgbV9l
bmQgJiYgaXNTYWZlU3RyaW5nQ2hhcmFjdGVyKCptX3B0cikpCisgICAgICAgICAgICArK21fcHRy
OworICAgICAgICBpZiAocnVuU3RhcnQgPCBtX3B0cikKKyAgICAgICAgICAgIHRva2VuLnN0cmlu
Z1Rva2VuLmFwcGVuZChydW5TdGFydCwgbV9wdHIgLSBydW5TdGFydCk7CisgICAgICAgIGlmICgo
bW9kZSA9PSBTdHJpY3RKU09OKSAmJiBtX3B0ciA8IG1fZW5kICYmICptX3B0ciA9PSAnXFwnKSB7
CisgICAgICAgICAgICArK21fcHRyOworICAgICAgICAgICAgaWYgKG1fcHRyID49IG1fZW5kKQor
ICAgICAgICAgICAgICAgIHJldHVybiBUb2tFcnJvcjsKKyAgICAgICAgICAgIHN3aXRjaCAoKm1f
cHRyKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICAgICAgICAgIHRv
a2VuLnN0cmluZ1Rva2VuLmFwcGVuZCgnIicpOworICAgICAgICAgICAgICAgICAgICBtX3B0cisr
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdcXCc6
CisgICAgICAgICAgICAgICAgICAgIHRva2VuLnN0cmluZ1Rva2VuLmFwcGVuZCgnXFwnKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICAgICAgICAgIHRva2VuLnN0cmlu
Z1Rva2VuLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgICAgICBtX3B0cisrOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAg
ICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdcYicpOworICAgICAgICAgICAg
ICAgICAgICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBw
ZW5kKCdcZicpOworICAgICAgICAgICAgICAgICAgICBtX3B0cisrOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgICAgICAg
ICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdcbicpOworICAgICAgICAgICAgICAgICAgICBt
X3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
ICdyJzoKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdccicp
OworICAgICAgICAgICAgICAgICAgICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4u
c3RyaW5nVG9rZW4uYXBwZW5kKCdcdCcpOworICAgICAgICAgICAgICAgICAgICBtX3B0cisrOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgor
ICAgICAgICAgICAgICAgICAgICBpZiAoKG1fZW5kIC0gbV9wdHIpIDwgNSkgLy8gdU5OTk4gPT0g
NSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rRXJyb3I7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNTsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdChtX3B0cltpXSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva0Vycm9yOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHRva2VuLnN0cmluZ1Rva2VuLmFwcGVuZChKU0M6Okxl
eGVyOjpjb252ZXJ0VW5pY29kZShtX3B0clsxXSwgbV9wdHJbMl0sIG1fcHRyWzNdLCBtX3B0cls0
XSkpOworICAgICAgICAgICAgICAgICAgICBtX3B0ciArPSA1OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBUb2tFcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUg
KChtb2RlID09IFN0cmljdEpTT04pICYmIG1fcHRyICE9IHJ1blN0YXJ0ICYmIChtX3B0ciA8IG1f
ZW5kKSAmJiAqbV9wdHIgIT0gJyInKTsKKworICAgIGlmIChtX3B0ciA+PSBtX2VuZCB8fCAqbV9w
dHIgIT0gJyInKQogICAgICAgICByZXR1cm4gVG9rRXJyb3I7Ci0gICAgfQorCiAgICAgdG9rZW4u
dHlwZSA9IFRva1N0cmluZzsKICAgICB0b2tlbi5lbmQgPSArK21fcHRyOwogICAgIHJldHVybiBU
b2tTdHJpbmc7CkBAIC0xNTEsNyArMjM2LDcgQEAgTGl0ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExp
dGVyYWxQYXJzZXI6OkxleGVyOjpsZXhOdW1iZXIoTGl0ZXJhbFBhcnNlclRva2VuJiB0b2sKICAg
ICBpZiAobV9wdHIgPCBtX2VuZCAmJiAqbV9wdHIgPT0gJy4nKSB7CiAgICAgICAgICsrbV9wdHI7
CiAgICAgICAgIC8vIFswLTldKwotICAgICAgICBpZiAobV9wdHIgPj0gbV9lbmQgJiYgIWlzQVND
SUlEaWdpdCgqbV9wdHIpKQorICAgICAgICBpZiAobV9wdHIgPj0gbV9lbmQgfHwgIWlzQVNDSUlE
aWdpdCgqbV9wdHIpKQogICAgICAgICAgICAgcmV0dXJuIFRva0Vycm9yOwogCiAgICAgICAgICsr
bV9wdHI7CkBAIC0xNjgsNyArMjUzLDcgQEAgTGl0ZXJhbFBhcnNlcjo6VG9rZW5UeXBlIExpdGVy
YWxQYXJzZXI6OkxleGVyOjpsZXhOdW1iZXIoTGl0ZXJhbFBhcnNlclRva2VuJiB0b2sKICAgICAg
ICAgICAgICsrbV9wdHI7CiAKICAgICAgICAgLy8gWzAtOV0rCi0gICAgICAgIGlmIChtX3B0ciA+
PSBtX2VuZCAmJiAhaXNBU0NJSURpZ2l0KCptX3B0cikpCisgICAgICAgIGlmIChtX3B0ciA+PSBt
X2VuZCB8fCAhaXNBU0NJSURpZ2l0KCptX3B0cikpCiAgICAgICAgICAgICByZXR1cm4gVG9rRXJy
b3I7CiAgICAgICAgIAogICAgICAgICArK21fcHRyOwpAQCAtMjI2LDcgKzMxMSwyNSBAQCBKU1Zh
bHVlIExpdGVyYWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlIGluaXRpYWxTdGF0ZSkKICAgICAg
ICAgICAgIGNhc2UgU3RhcnRQYXJzZU9iamVjdDogewogICAgICAgICAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMpOwogICAgICAgICAgICAgICAg
IG9iamVjdFN0YWNrLmFwcGVuZChvYmplY3QpOwotICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJv
dWdoCisKKyAgICAgICAgICAgICAgICBUb2tlblR5cGUgdHlwZSA9IG1fbGV4ZXIubmV4dCgpOwor
ICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRva1N0cmluZykgeworICAgICAgICAgICAgICAg
ICAgICBMZXhlcjo6TGl0ZXJhbFBhcnNlclRva2VuIGlkZW50aWZpZXJUb2tlbiA9IG1fbGV4ZXIu
Y3VycmVudFRva2VuKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbG9u
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLm5leHQoKSAhPSBUb2tDb2xvbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWRlbnRpZmllclN0YWNrLmFwcGVuZChJZGVudGlmaWVyKG1fZXhlYywgaWRlbnRpZmll
clRva2VuLnN0cmluZ1Rva2VuKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBw
ZW5kKERvUGFyc2VPYmplY3RFbmRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZ290
byBzdGFydFBhcnNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
IT0gVG9rUkJyYWNlKSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICBsYXN0VmFsdWUg
PSBvYmplY3RTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgb2JqZWN0U3RhY2sucmVtb3Zl
TGFzdCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZG9QYXJzZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjoKICAgICAgICAgICAgIGNhc2UgRG9QYXJz
ZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjogewpAQCAtMjM5LDEwICszNDIsMTAgQEAgSlNWYWx1ZSBM
aXRlcmFsUGFyc2VyOjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIG1f
bGV4ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2suYXBwZW5k
KElkZW50aWZpZXIobV9leGVjLCBpZGVudGlmaWVyVG9rZW4uc3RhcnQgKyAxLCBpZGVudGlmaWVy
VG9rZW4uZW5kIC0gaWRlbnRpZmllclRva2VuLnN0YXJ0IC0gMikpOworICAgICAgICAgICAgICAg
ICAgICBpZGVudGlmaWVyU3RhY2suYXBwZW5kKElkZW50aWZpZXIobV9leGVjLCBpZGVudGlmaWVy
VG9rZW4uc3RyaW5nVG9rZW4pKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBl
bmQoRG9QYXJzZU9iamVjdEVuZEV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgICBnb3Rv
IHN0YXJ0UGFyc2VFeHByZXNzaW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAh
PSBUb2tSQnJhY2UpIAorICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOwogICAg
ICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG9iamVjdFN0YWNrLmxhc3QoKTsKQEAgLTI3Miw3ICsz
NzUsNyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI6OnBhcnNlKFBhcnNlclN0YXRlIGluaXRpYWxT
dGF0ZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tTdHJpbmc6IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIExleGVyOjpMaXRlcmFsUGFyc2VyVG9rZW4gc3RyaW5nVG9rZW4gPSBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9sZXhlci5uZXh0
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc1N0cmluZyhtX2V4ZWMs
IFVTdHJpbmcoc3RyaW5nVG9rZW4uc3RhcnQgKyAxLCBzdHJpbmdUb2tlbi5lbmQgLSBzdHJpbmdU
b2tlbi5zdGFydCAtIDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpz
U3RyaW5nKG1fZXhlYywgc3RyaW5nVG9rZW4uc3RyaW5nVG9rZW4pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBUb2tOdW1iZXI6IHsKQEAgLTI4MSw2ICszODQsMjEgQEAgSlNWYWx1ZSBMaXRlcmFs
UGFyc2VyOjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0VmFsdWUgPSBqc051bWJlcihtX2V4ZWMsIFVTdHJpbmcobnVtYmVyVG9rZW4u
c3RhcnQsIG51bWJlclRva2VuLmVuZCAtIG51bWJlclRva2VuLnN0YXJ0KS50b0RvdWJsZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rTnVsbDogeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBq
c051bGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rVHJ1ZTogeworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
VmFsdWUgPSBqc0Jvb2xlYW4odHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXNlIFRva0ZhbHNl
OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0
ZXJhbFBhcnNlci5oCmluZGV4IDdkMDI4ZjcuLmQ5MzdlOWUgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5oCkBAIC0zNCw5ICszNCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIExpdGVyYWxQYXJzZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgTGl0ZXJhbFBh
cnNlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCisgICAgICAgIHR5cGVkZWYg
ZW51bSB7IFN0cmljdEpTT04sIE5vblN0cmljdEpTT04gfSBQYXJzZXJNb2RlOworICAgICAgICBM
aXRlcmFsUGFyc2VyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcywgUGFyc2VyTW9k
ZSBtb2RlKQogICAgICAgICAgICAgOiBtX2V4ZWMoZXhlYykKLSAgICAgICAgICAgICwgbV9sZXhl
cihzKQorICAgICAgICAgICAgLCBtX2xleGVyKHMsIG1vZGUpCiAgICAgICAgIHsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTQ4LDYgKzQ5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHRyeUpTT05QYXJzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBwYXJzZShTdGFydFBhcnNlRXhwcmVzc2lvbik7CisgICAgICAgICAgICBpZiAobV9sZXhl
ci5jdXJyZW50VG9rZW4oKS50eXBlICE9IFRva0VuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogICAgIHBy
aXZhdGU6CiAgICAgICAgIGVudW0gUGFyc2VyU3RhdGUgeyBTdGFydFBhcnNlT2JqZWN0LCBTdGFy
dFBhcnNlQXJyYXksIFN0YXJ0UGFyc2VFeHByZXNzaW9uLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0YXJ0UGFyc2VTdGF0ZW1lbnQsIFN0YXJ0UGFyc2VTdGF0ZW1lbnRFbmRTdGF0ZW1l
bnQsIApAQCAtNTUsNyArNjUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERvUGFyc2VBcnJheVN0YXJ0RXhwcmVzc2lvbiwgRG9QYXJzZUFycmF5RW5kRXhw
cmVzc2lvbiB9OwogICAgICAgICBlbnVtIFRva2VuVHlwZSB7IFRva0xCcmFja2V0LCBUb2tSQnJh
Y2tldCwgVG9rTEJyYWNlLCBUb2tSQnJhY2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgIFRv
a1N0cmluZywgVG9rSWRlbnRpZmllciwgVG9rTnVtYmVyLCBUb2tDb2xvbiwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgVG9rTFBhcmVuLCBUb2tSUGFyZW4sIFRva0NvbW1hLCBUb2tFbmQsIFRv
a0Vycm9yIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgVG9rTFBhcmVuLCBUb2tSUGFyZW4s
IFRva0NvbW1hLCBUb2tUcnVlLCBUb2tGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBU
b2tOdWxsLCBUb2tFbmQsIFRva0Vycm9yIH07CiAKICAgICAgICAgY2xhc3MgTGV4ZXIgewogICAg
ICAgICBwdWJsaWM6CkBAIC02Myw5ICs3NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgICAgICBUb2tlblR5cGUgdHlwZTsKICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogc3Rh
cnQ7CiAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGVuZDsKKyAgICAgICAgICAgICAgICBV
U3RyaW5nIHN0cmluZ1Rva2VuOwogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIExleGVyKGNv
bnN0IFVTdHJpbmcmIHMpCisgICAgICAgICAgICBMZXhlcihjb25zdCBVU3RyaW5nJiBzLCBQYXJz
ZXJNb2RlIG1vZGUpCiAgICAgICAgICAgICAgICAgOiBtX3N0cmluZyhzKQorICAgICAgICAgICAg
ICAgICwgbV9tb2RlKG1vZGUpCiAgICAgICAgICAgICAgICAgLCBtX3B0cihzLmRhdGEoKSkKICAg
ICAgICAgICAgICAgICAsIG1fZW5kKHMuZGF0YSgpICsgcy5zaXplKCkpCiAgICAgICAgICAgICB7
CkBAIC04MywxMCArOTYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAKICAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgIFRva2VuVHlwZSBsZXgoTGl0ZXJhbFBhcnNlclRva2Vu
Jik7Ci0gICAgICAgICAgICBUb2tlblR5cGUgbGV4U3RyaW5nKExpdGVyYWxQYXJzZXJUb2tlbiYp
OworICAgICAgICAgICAgdGVtcGxhdGUgPFBhcnNlck1vZGUgcGFyc2VyTW9kZT4gVG9rZW5UeXBl
IGxleFN0cmluZyhMaXRlcmFsUGFyc2VyVG9rZW4mKTsKICAgICAgICAgICAgIFRva2VuVHlwZSBs
ZXhOdW1iZXIoTGl0ZXJhbFBhcnNlclRva2VuJik7CiAgICAgICAgICAgICBMaXRlcmFsUGFyc2Vy
VG9rZW4gbV9jdXJyZW50VG9rZW47CiAgICAgICAgICAgICBVU3RyaW5nIG1fc3RyaW5nOworICAg
ICAgICAgICAgUGFyc2VyTW9kZSBtX21vZGU7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciogbV9w
dHI7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciogbV9lbmQ7CiAgICAgICAgIH07CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MTg5MjUxMi4uOTFmNjE3MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA2LTIxICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDI2NTg3OiBTdXBwb3J0IEpTT04ucGFyc2UKKworICAg
ICAgICBBZGQgdGVzdHMgdG8gY292ZXIgYmFzaWMgdXNhZ2Ugb2YgSlNPTi5wYXJzZQorCisgICAg
ICAgICogZmFzdC9qcy9KU09OLXBhcnNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMv
SlNPTi1wYXJzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVzb3Vy
Y2VzL0pTT04tcGFyc2UuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlVGVzdHMucmVzdWx0KToK
KyAgICAgICAgKGNyZWF0ZVRlc3RzKToKKwogMjAwOS0wNi0yMSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDogU2tpcCBvbmUg
bW9yZSB0ZXN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OLXBhcnNlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvanMvSlNPTi1wYXJzZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiNmJmNAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvSlNPTi1wYXJzZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzOTYgQEAKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IEpTT04ucGFyc2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRl
ci4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBh
cnNlKCcnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlv
biBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpz
b25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzEnKTsKKyAgICB9
CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmlu
Z2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCctMScpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnko
dGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQor
ZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2Uo
J0luZmluaXR5Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNl
cHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9u
IChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdOYU4nKTsK
KyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhF
cnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3Qp
IHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ251bGwnKTsKKyAgICB9CitQQVNT
IEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCd1bmRlZmluZWQnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2
ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04g
c3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmpl
Y3QucGFyc2UoJ3t9Jyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRp
dmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNv
bk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnKHt9KScpOworICAg
IH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9y
OiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgne2F9Jyk7CisgICAgfQorUEFTUyB0ZXN0
c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBw
YXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCd7YTp9Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVK
U09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0
cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCd7YTo1fScpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcg
ZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5j
dGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgne2E6
NSx9Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24g
U3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29u
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEifScpOworICAg
IH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9y
OiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjp9Jyk7CisgICAgfQorUEFTUyB0
ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0
byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEiOjV9Jyk7CisgICAgfQorUEFTUyBKU09OLnN0cmlu
Z2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNP
TikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgneyJhIjo1LH0nKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3
IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgoranNv
bjIuanMgZGlkIG5vdCB0aHJvdyBmb3IgYSB0ZXN0IHdlIGV4cGVjdCB0byB0aHJvdy4KK2Z1bmN0
aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEi
OjUsLH0nKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlv
biBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpz
b25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSI6NSwiYSIs
fScpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5
bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9i
amVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjooNSwiYSIpLH0n
KTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50
YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ1tdJyk7CisgICAgfQorUEFT
UyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnko
dGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4g
anNvbk9iamVjdC5wYXJzZSgnWzFdJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0
c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5j
dGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnWzEs
XScpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlz
IEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ1sxLDJdJyk7CisgICAgfQorUEFTUyBK
U09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVz
dHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZSgnWzEsMiwsXScpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNP
TikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJp
bmcuCitqc29uMi5qcyBkaWQgbm90IHRocm93IGZvciBhIHRlc3Qgd2UgZXhwZWN0IHRvIHRocm93
LgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFy
c2UoJ1sxLDIsLDRdJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBl
eGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2pzb24y
LmpzIGRpZCBub3QgdGhyb3cgZm9yIGEgdGVzdCB3ZSBleHBlY3QgdG8gdGhyb3cuCitmdW5jdGlv
biAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnIiInKTsK
KyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09O
LnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAg
ICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciXCciJyk7CisgICAgfQorUEFTUyBKU09OLnN0
cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0o
SlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgnImFcIicpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0
aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpz
b25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFwiJyk7Cisg
ICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJy
b3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxceiInKTsKKyAgICB9CitQQVNT
IHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxl
IHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFxceiInKTsKKyAgICB9CitQQVNTIHRlc3RzW2ld
KG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNl
IEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJyJhXFxcXHoiJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitm
dW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
ImFcdHoiJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09O
KSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVj
dCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHR6IicpOworICAgIH0K
K1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5n
aWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXG56IicpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0
aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNP
TiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9i
amVjdC5wYXJzZSgnImFcXG56IicpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNb
aV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rp
b24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXHJ6
IicpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5
bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9i
amVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHJ6IicpOworICAg
IH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3Ry
aW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXC96IicpOworICAgIH0KK1BBU1MgSlNPTi5zdHJp
bmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpT
T04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJyJhXFwveiInKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5h
dGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChq
c29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxieiInKTsK
KyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhF
cnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgoranNvbjIuanMgZGlkIG5vdCB0aHJv
dyBmb3IgYSB0ZXN0IHdlIGV4cGVjdCB0byB0aHJvdy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcYnoiJyk7CisgICAgfQorUEFT
UyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnko
dGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4g
anNvbk9iamVjdC5wYXJzZSgnImFccnoiJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVK
U09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0
cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCciYVxccnoiJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShu
YXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAo
anNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHV6IiAg
ICAgJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24g
U3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29u
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTB6IiAgICAn
KTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50
YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDB6IiAgICcpOwor
ICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVy
cm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkg
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMDB6IiAgJyk7CisgICAg
fQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6
IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwMDB6IiAnKTsKKyAgICB9CitQ
QVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lm
eSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwMEF6IiAnKTsKKyAgICB9CitQQVNTIEpTT04uc3Ry
aW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShK
U09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCciYVxcdTAwMGF6IiAnKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3Rz
W2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0
aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxc
dTAwMEd6IiAnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24g
KGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDAw
Z3oiICcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9u
IFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNv
bk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMEEweiIg
Jyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMg
SlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMGEweiIgJyk7CisgICAgfQor
UEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdp
ZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMEcweiIgJyk7CisgICAgfQorUEFTUyB0ZXN0c1tp
XShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJz
ZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCciYVxcdTAwZzB6IiAnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5h
dGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpT
T04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25P
YmplY3QucGFyc2UoJyJhXFx1MEEwMHoiICcpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnko
dGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQor
ZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2Uo
JyJhXFx1MGEwMHoiICcpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0
aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpz
b25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MEcwMHoi
ICcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5
bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9i
amVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwZzAweiIgJyk7
CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4
RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0
KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdUEwMDB6IiAnKTsKKyAg
ICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0
cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAg
IHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdWEwMDB6IiAnKTsKKyAgICB9CitQQVNTIEpT
T04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0
c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCciYVxcdUcwMDB6IiAnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2
ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04g
c3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmpl
Y3QucGFyc2UoJyJhXFx1ZzAwMHoiICcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNP
TikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJp
bmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgnMDAnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgoranNvbjIuanMg
ZGlkIG5vdCB0aHJvdyBmb3IgYSB0ZXN0IHdlIGV4cGVjdCB0byB0aHJvdy4KK2Z1bmN0aW9uIChq
c29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcwMScpOworICAg
IH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9y
OiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitqc29uMi5qcyBkaWQgbm90IHRocm93IGZv
ciBhIHRlc3Qgd2UgZXhwZWN0IHRvIHRocm93LgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzAuYScpOworICAgIH0KK1BBU1MgdGVzdHNb
aV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFy
c2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4g
anNvbk9iamVjdC5wYXJzZSgnMHgwJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09O
KSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmlu
Zy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBh
cnNlKCcyZTEuMycpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhj
ZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlv
biAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMmUtKzEw
Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3lu
dGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2Jq
ZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcyZSstMTAnKTsKKyAgICB9
CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjog
VW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzJlM2U0Jyk7CisgICAgfQorUEFTUyB0ZXN0
c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBw
YXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCctMDEuMCcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZl
SlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBz
dHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgnLTAxJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBl
eGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2pzb24y
LmpzIGRpZCBub3QgdGhyb3cgZm9yIGEgdGVzdCB3ZSBleHBlY3QgdG8gdGhyb3cuCitmdW5jdGlv
biAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnLTAxLmEn
KTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50
YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzEuZTEnKTsKKyAgICB9CitQ
QVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5h
YmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgoranNvbjIuanMgZGlkIG5vdCB0aHJvdyBmb3IgYSB0
ZXN0IHdlIGV4cGVjdCB0byB0aHJvdy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAg
IHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd0cnVlJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmlu
Z2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNP
TikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgnZmFsc2UnKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2
ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29u
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5
KHNpbXBsZU9iamVjdCkpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0
aXZlSlNPTikpIGlzIHRlc3RzW2ldLmV4cGVjdGVkCitmdW5jdGlvbiAoanNvbk9iamVjdCkgewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wbGV4T2Jq
ZWN0KSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkg
aXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkg
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wbGV4
T2JqZWN0KSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09O
KSkgaXMgdGVzdHNbaV0uZXhwZWN0ZWQKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAg
IHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KHNpbXBsZU9iamVjdCxudWxs
LDEwMCkpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikp
IGlzIHRlc3RzW2ldLmV4cGVjdGVkCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICBy
ZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wbGV4T2JqZWN0LG51bGws
MTAwKSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkg
aXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkg
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wbGV4
T2JqZWN0LG51bGwsMTAwKSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShu
YXRpdmVKU09OKSkgaXMgdGVzdHNbaV0uZXhwZWN0ZWQKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KHNpbXBsZU9i
amVjdCxudWxsLCIgIikpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0
aXZlSlNPTikpIGlzIHRlc3RzW2ldLmV4cGVjdGVkCitmdW5jdGlvbiAoanNvbk9iamVjdCkgewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wbGV4T2Jq
ZWN0LG51bGwsIiAiKSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRp
dmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNv
bk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lm
eShjb21wbGV4T2JqZWN0LG51bGwsIiAiKSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgdGVzdHNbaV0uZXhwZWN0ZWQKK2Z1bmN0aW9uIChqc29u
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5
KHNpbXBsZU9iamVjdCxudWxsLCJcdCIpKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRl
c3RzW2ldKG5hdGl2ZUpTT04pKSBpcyB0ZXN0c1tpXS5leHBlY3RlZAorZnVuY3Rpb24gKGpzb25P
YmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnko
Y29tcGxleE9iamVjdCxudWxsLCJcdCIpKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRl
c3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1
bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpT
T04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QsbnVsbCwiXHQiKSk7CisgICAgfQorUEFTUyBKU09O
LnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgdGVzdHNbaV0uZXhwZWN0ZWQKK2Z1
bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpT
T04uc3RyaW5naWZ5KHNpbXBsZU9iamVjdCxudWxsLCJcbiIpKTsKKyAgICB9CitQQVNTIEpTT04u
c3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyB0ZXN0c1tpXS5leHBlY3RlZAorZnVu
Y3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNP
Ti5zdHJpbmdpZnkoY29tcGxleE9iamVjdCxudWxsLCJcbiIpKTsKKyAgICB9CitQQVNTIEpTT04u
c3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tp
XShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2Jq
ZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QsbnVsbCwiXG4iKSk7CisgICAg
fQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgdGVzdHNbaV0u
ZXhwZWN0ZWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04tcGFyc2UuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvSlNPTi1wYXJzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmQ2NTliZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2pzL0pTT04tcGFyc2UuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0PgordmFyIG5hdGl2ZUpTT04gPSB0aGlzLkpTT047Cit0aGlzLkpTT04gPSBudWxsOworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzb24yLWVzNS1jb21wYXQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9KU09OLXBhcnNlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04t
cGFyc2UuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9KU09OLXBhcnNlLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDgwZTkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9KU09OLXBhcnNlLmpzCkBAIC0wLDAg
KzEsMzgzIEBACisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RzKCkgeworICAgIHZhciByZXN1bHQgPSBb
XTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJu
IGpzb25PYmplY3QucGFyc2UoKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAt
IDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcnKTsKKyAgICB9KTsKKyAgICByZXN1
bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVu
Y3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcxJyk7
CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAg
IHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCctMScpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNo
KGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
SW5maW5pdHknKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93
cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAg
IHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdOYU4nKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVz
dWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24o
anNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdudWxsJyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCd1bmRlZmluZWQnKTsKKyAgICB9KTsKKyAgICByZXN1bHRb
cmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rp
b24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7fScpOwor
ICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICBy
ZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnKHt9KScpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1
bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihq
c29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3thfScpOworICAg
IH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICBy
ZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmpl
Y3QucGFyc2UoJ3thOn0nKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFd
LnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7YTo1fScpOworICAgIH0pOworICAgIHJl
c3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChm
dW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3th
OjUsfScpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0g
dHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSJ9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3Vs
dC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpz
b25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjp9Jyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAg
IHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9i
amVjdC5wYXJzZSgneyJhIjo1fScpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9u
KGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjo1LH0n
KTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7
CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCd7ImEiOjUsLH0nKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0
Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNv
bk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEiOjUsImEiLH0n
KTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7
CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCd7ImEiOig1LCJhIiksfScpOworICAgIH0pOworICAgIHJlc3VsdFty
ZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlv
bihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ1tdJyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCdbMV0nKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChm
dW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ1sx
LF0nKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ1sxLDJdJyk7CisgICAgfSk7CisgICAgcmVz
dWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCdbMSwyLCxdJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAx
XS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qpewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnWzEsMiwsNF0nKTsKKyAgICB9KTsKKyAg
ICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1
c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNl
KCciIicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qpewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnIlwnIicpOworICAgIH0pOworICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgnImFcIicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25P
YmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXCInKTsKKyAgICB9
KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVz
dWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCciYVxceiInKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFd
LnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcXHoiJyk7CisgICAgfSk7CisgICAg
cmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNo
KGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
ImFcXFxceiInKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXHR6IicpOworICAgIH0pOwor
ICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZSgnImFcXHR6IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0
aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcbnoi
Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVl
OworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4g
anNvbk9iamVjdC5wYXJzZSgnImFcXG56IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1
bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFc
cnoiJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0
cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHJ6IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNo
KGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
ImFcL3oiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcL3oiJyk7CisgICAgfSk7Cisg
ICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCciYVxieiInKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0
aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVj
dCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcYnoiJyk7CisgICAgfSk7
CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCciYVxyeiInKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxl
bmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9i
amVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxccnoiJyk7CisgICAg
fSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCciYVxcdXoiICAgICAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRb
cmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rp
b24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTB6
IiAgICAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9
IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAweiIgICAnKTsKKyAgICB9KTsKKyAgICByZXN1
bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVu
Y3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxc
dTAwMHoiICAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93
cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAg
IHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwMDB6IiAnKTsKKyAgICB9KTsKKyAgICBy
ZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmpl
Y3QucGFyc2UoJyJhXFx1MDAwQXoiICcpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0
aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUw
MDBheiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwMEd6IiAnKTsKKyAgICB9
KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVz
dWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCciYVxcdTAwMGd6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0
aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVj
dCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwQTB6IiAnKTsKKyAg
ICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDBhMHoiICcpOworICAgIH0pOworICAgIHJlc3Vs
dC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgnImFcXHUwMEcweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGgg
LSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qp
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMGcweiIgJyk7CisgICAg
fSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgnImFcXHUwQTAweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rp
b24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTBh
MDB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MEcwMHoiICcpOworICAgIH0p
OworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1
bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJyJhXFx1MGcwMHoiICcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3Ro
IC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1QTAwMHoiICcpOworICAg
IH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHVhMDAweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0
LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBh
cnNlKCciYVxcdUcwMDB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAt
IDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdWcwMDB6IiAnKTsKKyAgICB9
KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVz
dWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCcwMCcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhy
b3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAg
ICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzAxJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jl
c3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9u
KGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMC5hJyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAg
IHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9i
amVjdC5wYXJzZSgnMHgwJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAx
XS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qpewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMmUxLjMnKTsKKyAgICB9KTsKKyAgICBy
ZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2go
ZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcy
ZS0rMTAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9
IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCcyZSstMTAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVz
dWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24o
anNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcyZTNlNCcpOwor
ICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAg
ICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25P
YmplY3QucGFyc2UoJy0wMS4wJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGgg
LSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qp
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnLTAxJyk7CisgICAgfSk7CisgICAg
cmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNo
KGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
LTAxLmEnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9
IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCcxLmUxJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3Vs
dC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpz
b25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgndHJ1ZScpOworICAg
IH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgnZmFsc2UnKTsKKyAgICB9KTsKKyAgICB2YXIgc2ltcGxlQXJy
YXkgPSBbJ2EnLCAnYicsICdjJ107CisgICAgdmFyIHNpbXBsZU9iamVjdCA9IHthOiIxIiwgYjoi
MiIsIGM6IjMifTsKKyAgICB2YXIgY29tcGxleEFycmF5ID0gWydhJywgJ2InLCAnYycsLCxzaW1w
bGVPYmplY3QsIHNpbXBsZUFycmF5LCBbc2ltcGxlT2JqZWN0LHNpbXBsZUFycmF5XV07CisgICAg
dmFyIGNvbXBsZXhPYmplY3QgPSB7YToiMSIsIGI6IjIiLCBjOiIzIiwgZDo0LjVlMTAsIGc6IDAu
NDVlLTUsIGg6IDAuMCwgaTogMCwgajouNSwgazowLiwgbDotMCwgbTotMC4wLCBuOi0wLiwgbzot
LjUsIHA6LTAuNDVlLTEwLCBxOi00LjVlMTAsIGU6bnVsbCwgIiI6MTIsIGY6IHNpbXBsZUFycmF5
LCBhcnJheTogY29tcGxleEFycmF5fTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2Jq
ZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2lt
cGxlT2JqZWN0KSk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBl
Y3RlZCA9IEpTT04uc3RyaW5naWZ5KHNpbXBsZU9iamVjdCk7CisgICAgcmVzdWx0LnB1c2goZnVu
Y3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04u
c3RyaW5naWZ5KGNvbXBsZXhPYmplY3QpKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5j
dGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5z
dHJpbmdpZnkoY29tcGxleE9iamVjdCkpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVu
Z3RoIC0gMV0uZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjb21wbGV4T2JqZWN0KTsKKyAgICBy
ZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmpl
Y3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2ltcGxlT2JqZWN0LG51bGwsMTAwKSk7CisgICAgfSk7
CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5
KHNpbXBsZU9iamVjdCk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmpl
Y3QsbnVsbCwxMDApKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2Jq
ZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29t
cGxleE9iamVjdCxudWxsLDEwMCkpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3Ro
IC0gMV0uZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjb21wbGV4T2JqZWN0KTsKKyAgICByZXN1
bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoSlNPTi5zdHJpbmdpZnkoc2ltcGxlT2JqZWN0LG51bGwsIiAiKSk7CisgICAgfSk7Cisg
ICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KHNp
bXBsZU9iamVjdCk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAg
ICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3Qs
bnVsbCwiICIpKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGxl
eE9iamVjdCxudWxsLCIgIikpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0g
MV0uZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjb21wbGV4T2JqZWN0KTsKKyAgICAKKyAgICBy
ZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmpl
Y3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2ltcGxlT2JqZWN0LG51bGwsIlx0IikpOworICAgIH0p
OworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lm
eShzaW1wbGVPYmplY3QpOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qpewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wbGV4T2Jq
ZWN0LG51bGwsIlx0IikpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25P
YmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShj
b21wbGV4T2JqZWN0LG51bGwsIlx0IikpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVu
Z3RoIC0gMV0uZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjb21wbGV4T2JqZWN0KTsKKyAgICAK
KyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2ltcGxlT2JqZWN0LG51bGwsIlxuIikpOwor
ICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQgPSBKU09OLnN0
cmluZ2lmeShzaW1wbGVPYmplY3QpOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmpl
Y3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21w
bGV4T2JqZWN0LG51bGwsIlxuIikpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9u
KGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmlu
Z2lmeShjb21wbGV4T2JqZWN0LG51bGwsIlxuIikpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1
bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjb21wbGV4T2JqZWN0KTsK
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQordmFyIHRlc3RzID0gY3JlYXRlVGVzdHMoKTsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICB0cnkgeworICAg
ICAgICBkZWJ1Zyh0ZXN0c1tpXSk7CisgICAgICAgIGlmICh0ZXN0c1tpXS50aHJvd3MpIHsKKyAg
ICAgICAgICAgIHNob3VsZFRocm93KCd0ZXN0c1tpXShuYXRpdmVKU09OKScpOworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB0ZXN0c1tpXShKU09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAg
ICAgICAgIHZhciB0aHJldyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IXRocmV3KQorICAgICAgICAgICAgICAgIGRlYnVnKCJqc29uMi5qcyBkaWQgbm90IHRocm93IGZv
ciBhIHRlc3Qgd2UgZXhwZWN0IHRvIHRocm93LiIpOworICAgICAgICB9IGVsc2UgaWYgKHRlc3Rz
W2ldLmV4cGVjdGVkKQorICAgICAgICAgICAgdHJ5IHsgc2hvdWxkQmUoJ0pTT04uc3RyaW5naWZ5
KHRlc3RzW2ldKG5hdGl2ZUpTT04pKScsICAidGVzdHNbaV0uZXhwZWN0ZWQiKSB9IGNhdGNoKGUp
IHsgZGVidWcoInRocmV3IC0gIiArIGUpfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB0cnkg
eyBzaG91bGRCZSgnSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpJywgICdKU09O
LnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSknKSB9IGNhdGNoKGUpIHsgZGVidWcoInRocmV3IC0g
IiArIGUpIH07CisgICAgfWNhdGNoKGUpeworICAgICAgICBkZWJ1ZyhlKTsKKyAgICB9Cit9Citz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31623</attachid>
            <date>2009-06-21 15:53:33 -0700</date>
            <delta_ts>2009-06-21 16:09:12 -0700</delta_ts>
            <desc>Address rest of darin&apos;s comments</desc>
            <filename>JSON.parse.patch</filename>
            <type>text/plain</type>
            <size>47394</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAyZGMwOGUwLi5mZDAyM2I2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMDktMDYtMjEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjY1ODc6IFN1cHBv
cnQgSlNPTi5wYXJzZQorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI2NTg3PgorCisgICAgICAgIEV4dGVuZCB0aGUgTGl0ZXJhbFBhcnNlciB0byBzdXBw
b3J0IHRoZSBmdWxsIHN0cmljdCBKU09OCisgICAgICAgIGdyYW1tYXIsIGZpeCBhIGZldyBwbGFj
ZXMgd2hlcmUgdGhlIGdyYW1tYXIgd2FzIGluY29ycmVjdGx5CisgICAgICAgIGxlbmllbnQuICAg
RG9lc24ndCB5ZXQgc3VwcG9ydCB0aGUgSlNPTi5wYXJzZSByZXZpdmVyIGZ1bmN0aW9uCisgICAg
ICAgIGJ1dCB0aGF0IGRvZXMgbm90IGJsb2NrIHRoZSBKU09OLnBhcnNlIGZ1bmN0aW9uYWxpdHkg
aXRzZWxmLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6Cisg
ICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3Rv
RnVuY1BhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKEpTQzo6aXNTYWZl
U3RyaW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6TGV4ZXI6Omxl
eFN0cmluZyk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OnBhcnNlKToKKyAgICAgICAg
KiBydW50aW1lL0xpdGVyYWxQYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6
TGl0ZXJhbFBhcnNlcik6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6OnRyeUpTT05QYXJz
ZSk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI6Oik6CisgICAgICAgIChKU0M6OkxpdGVy
YWxQYXJzZXI6OkxleGVyOjpMZXhlcik6CisKIDIwMDktMDYtMjAgIERhdmlkIEQuIEtpbHplciAg
PGRka2lsemVyQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IG5hbWVzcGFjZSBjb21tZW50IGlu
IFNlZ21lbnRlZFZlY3Rvci5oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKaW5kZXggYjNiNjgxYS4uMWM4MDBhOSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcApAQCAtMzUwLDcgKzM1MCw3IEBAIE5FVkVSX0lOTElORSBKU1Zh
bHVlIEludGVycHJldGVyOjpjYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXJG
aWxlKiByCiAKICAgICBVU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+
dmFsdWUoKTsKIAotICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3Jh
bVNvdXJjZSk7CisgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFt
U291cmNlLCBMaXRlcmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKICAgICBpZiAoSlNWYWx1ZSBw
YXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgIHJldHVy
biBwYXJzZWRPYmplY3Q7CiAgICAgCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmluZGV4IGIwMTM5NTcuLjg1ZjkyZjIgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBA
IC0yODIsNyArMjgyLDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHUKIAogICAgIFVTdHJpbmcg
cyA9IHgudG9TdHJpbmcoZXhlYyk7CiAKLSAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihleGVj
LCBzKTsKKyAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihleGVjLCBzLCBMaXRlcmFsUGFyc2Vy
OjpOb25TdHJpY3RKU09OKTsKICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJz
ZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgIHJldHVybiBwYXJzZWRPYmplY3Q7CiAKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCmluZGV4IGY3ZTcwOGUuLmMxYjI4NGMgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKKyNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvcGVy
dHlOYW1lQXJyYXkuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNiw2ICsz
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTT05P
YmplY3QpOwogCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJz
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQpAQCAtNTYyLDYgKzU2
NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU09OT2JqZWN0OjppbmZvID0geyAiSlNPTiIsIDAsIDAs
IEV4ZWNTdGF0ZTo6anNvblRhYmxlIH07CiAKIC8qIFNvdXJjZSBmb3IgSlNPTk9iamVjdC5sdXQu
aAogQGJlZ2luIGpzb25UYWJsZQorICBwYXJzZSAgICAgICAgIEpTT05Qcm90b0Z1bmNQYXJzZSAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCiAgIHN0cmluZ2lmeSAgICAgSlNPTlByb3Rv
RnVuY1N0cmluZ2lmeSAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKIEBlbmQKICovCkBAIC01
ODUsNiArNTg4LDI0IEBAIHZvaWQgSlNPTk9iamVjdDo6bWFya1N0cmluZ2lmaWVycyhTdHJpbmdp
Zmllciogc3RyaW5naWZpZXIpCiB9CiAKIC8vIEVDTUEtMjYyIHY1IDE1LjEyLjMKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3MuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsICJKU09O
LnBhcnNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIiKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gYXJncy5hdCgwKTsKKyAgICBVU3RyaW5nIHNvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOworICAgIAorICAgIExpdGVyYWxQYXJzZXIganNvblBhcnNlcihleGVjLCBzb3VyY2UsIExp
dGVyYWxQYXJzZXI6OlN0cmljdEpTT04pOworICAgIEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0ganNv
blBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKKyAgICBpZiAoIXBhcnNlZE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJVbmFibGUgdG8gcGFyc2Ug
SlNPTiBzdHJpbmciKTsKKyAgICAKKyAgICByZXR1cm4gcGFyc2VkT2JqZWN0OworfQorCisvLyBF
Q01BLTI2MiB2NSAxNS4xMi4zCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0
cmluZ2lmeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MaXRlcmFsUGFyc2VyLmNwcAppbmRleCAyMGIzYjc4Li5hY2QwOTUwIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKQEAgLTI4LDE1ICsyOCwxMSBAQAogCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiTGV4ZXIu
aCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3Rh
dGljIGJvb2wgaXNTYWZlU3RyaW5nQ2hhcmFjdGVyKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIChj
ID49ICcgJyAmJiBjIDw9IDB4ZmYgJiYgYyAhPSAnXFwnKSB8fCBjID09ICdcdCc7Ci19Ci0KIExp
dGVyYWxQYXJzZXI6OlRva2VuVHlwZSBMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4KExpdGVyYWxQ
YXJzZXJUb2tlbiYgdG9rZW4pCiB7CiAgICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNBU0NJ
SVNwYWNlKCptX3B0cikpCkBAIC04NCw4ICs4MCwzMSBAQCBMaXRlcmFsUGFyc2VyOjpUb2tlblR5
cGUgTGl0ZXJhbFBhcnNlcjo6TGV4ZXI6OmxleChMaXRlcmFsUGFyc2VyVG9rZW4mIHRva2VuKQog
ICAgICAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKICAgICAgICAgICAgIHJldHVybiBUb2tD
b2xvbjsKICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICByZXR1cm4gbGV4U3RyaW5nKHRv
a2VuKTsKLQorICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBTdHJpY3RKU09OKQorICAgICAgICAg
ICAgICAgIHJldHVybiBsZXhTdHJpbmc8U3RyaWN0SlNPTj4odG9rZW4pOworICAgICAgICAgICAg
cmV0dXJuIGxleFN0cmluZzxOb25TdHJpY3RKU09OPih0b2tlbik7CisgICAgICAgIGNhc2UgJ3Qn
OgorICAgICAgICAgICAgaWYgKG1fZW5kIC0gbV9wdHIgPj0gNCAmJiBtX3B0clsxXSA9PSAncicg
JiYgbV9wdHJbMl0gPT0gJ3UnICYmIG1fcHRyWzNdID09ICdlJykgeworICAgICAgICAgICAgICAg
IG1fcHRyICs9IDQ7CisgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9IFRva1RydWU7CisgICAg
ICAgICAgICAgICAgdG9rZW4uZW5kID0gbV9wdHI7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRv
a1RydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
Zic6CisgICAgICAgICAgICBpZiAobV9lbmQgLSBtX3B0ciA+PSA1ICYmIG1fcHRyWzFdID09ICdh
JyAmJiBtX3B0clsyXSA9PSAnbCcgJiYgbV9wdHJbM10gPT0gJ3MnICYmIG1fcHRyWzRdID09ICdl
JykgeworICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPSBUb2tGYWxzZTsKKyAgICAgICAgICAg
ICAgICB0b2tlbi5lbmQgPSBtX3B0ciArPSA1OworICAgICAgICAgICAgICAgIHJldHVybiBUb2tG
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdu
JzoKKyAgICAgICAgICAgIGlmIChtX2VuZCAtIG1fcHRyID49IDQgJiYgbV9wdHJbMV0gPT0gJ3Un
ICYmIG1fcHRyWzJdID09ICdsJyAmJiBtX3B0clszXSA9PSAnbCcpIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbi50eXBlID0gVG9rTnVsbDsKKyAgICAgICAgICAgICAgICB0b2tlbi5lbmQgPSBtX3B0
ciArPSA0OworICAgICAgICAgICAgICAgIHJldHVybiBUb2tOdWxsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7ICAgIAogICAgICAgICBjYXNlICctJzoKICAgICAgICAgY2FzZSAn
MCc6CiAgICAgICAgIGNhc2UgJzEnOgpAQCAtMTAyLDE2ICsxMjEsODAgQEAgTGl0ZXJhbFBhcnNl
cjo6VG9rZW5UeXBlIExpdGVyYWxQYXJzZXI6OkxleGVyOjpsZXgoTGl0ZXJhbFBhcnNlclRva2Vu
JiB0b2tlbikKICAgICByZXR1cm4gVG9rRXJyb3I7CiB9CiAKLUxpdGVyYWxQYXJzZXI6OlRva2Vu
VHlwZSBMaXRlcmFsUGFyc2VyOjpMZXhlcjo6bGV4U3RyaW5nKExpdGVyYWxQYXJzZXJUb2tlbiYg
dG9rZW4pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlU3RyaW5nQ2hhcmFjdGVyKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIChjID49ICcgJyAmJiBjIDw9IDB4ZmYgJiYgYyAhPSAnXFwnICYmIGMg
IT0gJyInKSB8fCBjID09ICdcdCc7Cit9CisKK3RlbXBsYXRlIDxMaXRlcmFsUGFyc2VyOjpQYXJz
ZXJNb2RlIG1vZGU+IExpdGVyYWxQYXJzZXI6OlRva2VuVHlwZSBMaXRlcmFsUGFyc2VyOjpMZXhl
cjo6bGV4U3RyaW5nKExpdGVyYWxQYXJzZXJUb2tlbiYgdG9rZW4pCiB7CiAgICAgKyttX3B0cjsK
LSAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVTdHJpbmdDaGFyYWN0ZXIoKm1fcHRy
KSAmJiAqbV9wdHIgIT0gJyInKQotICAgICAgICArK21fcHRyOwotICAgIGlmIChtX3B0ciA+PSBt
X2VuZCB8fCAqbV9wdHIgIT0gJyInKSB7Ci0gICAgICAgIHRva2VuLnR5cGUgPSBUb2tFcnJvcjsK
LSAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKKyAgICBjb25zdCBVQ2hhciogcnVuU3RhcnQ7
CisgICAgdG9rZW4uc3RyaW5nVG9rZW4gPSBVU3RyaW5nKCk7CisgICAgZG8geworICAgICAgICBy
dW5TdGFydCA9IG1fcHRyOworICAgICAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVT
dHJpbmdDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAgICAgICsrbV9wdHI7CisgICAgICAgIGlm
IChydW5TdGFydCA8IG1fcHRyKQorICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5k
KHJ1blN0YXJ0LCBtX3B0ciAtIHJ1blN0YXJ0KTsKKyAgICAgICAgaWYgKChtb2RlID09IFN0cmlj
dEpTT04pICYmIG1fcHRyIDwgbV9lbmQgJiYgKm1fcHRyID09ICdcXCcpIHsKKyAgICAgICAgICAg
ICsrbV9wdHI7CisgICAgICAgICAgICBpZiAobV9wdHIgPj0gbV9lbmQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFRva0Vycm9yOworICAgICAgICAgICAgc3dpdGNoICgqbV9wdHIpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9r
ZW4uYXBwZW5kKCciJyk7CisgICAgICAgICAgICAgICAgICAgIG1fcHRyKys7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAg
ICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgICAg
ICAgICBtX3B0cisrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlICcvJzoKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5k
KCcvJyk7CisgICAgICAgICAgICAgICAgICAgIG1fcHRyKys7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICB0
b2tlbi5zdHJpbmdUb2tlbi5hcHBlbmQoJ1xiJyk7CisgICAgICAgICAgICAgICAgICAgIG1fcHRy
Kys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2Yn
OgorICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbi5hcHBlbmQoJ1xmJyk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fcHRyKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdHJp
bmdUb2tlbi5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICAgICAgICAgIG1fcHRyKys7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAg
ICAgICAgICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbi5hcHBlbmQoJ1xyJyk7CisgICAgICAgICAg
ICAgICAgICAgIG1fcHRyKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICB0b2tlbi5zdHJpbmdUb2tlbi5h
cHBlbmQoJ1x0Jyk7CisgICAgICAgICAgICAgICAgICAgIG1fcHRyKys7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAg
ICAgICAgIGlmICgobV9lbmQgLSBtX3B0cikgPCA1KSAvLyB1Tk5OTiA9PSA1IGNoYXJhY3RlcnMK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tFcnJvcjsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNBU0NJSUhleERpZ2l0KG1fcHRyW2ldKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVG9rRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgdG9rZW4uc3RyaW5nVG9rZW4uYXBwZW5kKEpTQzo6TGV4ZXI6OmNvbnZlcnRV
bmljb2RlKG1fcHRyWzFdLCBtX3B0clsyXSwgbV9wdHJbM10sIG1fcHRyWzRdKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fcHRyICs9IDU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva0Vy
cm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoKG1vZGUgPT0gU3Ry
aWN0SlNPTikgJiYgbV9wdHIgIT0gcnVuU3RhcnQgJiYgKG1fcHRyIDwgbV9lbmQpICYmICptX3B0
ciAhPSAnIicpOworCisgICAgaWYgKG1fcHRyID49IG1fZW5kIHx8ICptX3B0ciAhPSAnIicpCiAg
ICAgICAgIHJldHVybiBUb2tFcnJvcjsKLSAgICB9CisKICAgICB0b2tlbi50eXBlID0gVG9rU3Ry
aW5nOwogICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CiAgICAgcmV0dXJuIFRva1N0cmluZzsKQEAg
LTE1MSw3ICsyMzQsNyBAQCBMaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6
TGV4ZXI6OmxleE51bWJlcihMaXRlcmFsUGFyc2VyVG9rZW4mIHRvawogICAgIGlmIChtX3B0ciA8
IG1fZW5kICYmICptX3B0ciA9PSAnLicpIHsKICAgICAgICAgKyttX3B0cjsKICAgICAgICAgLy8g
WzAtOV0rCi0gICAgICAgIGlmIChtX3B0ciA+PSBtX2VuZCAmJiAhaXNBU0NJSURpZ2l0KCptX3B0
cikpCisgICAgICAgIGlmIChtX3B0ciA+PSBtX2VuZCB8fCAhaXNBU0NJSURpZ2l0KCptX3B0cikp
CiAgICAgICAgICAgICByZXR1cm4gVG9rRXJyb3I7CiAKICAgICAgICAgKyttX3B0cjsKQEAgLTE2
OCw3ICsyNTEsNyBAQCBMaXRlcmFsUGFyc2VyOjpUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjo6TGV4
ZXI6OmxleE51bWJlcihMaXRlcmFsUGFyc2VyVG9rZW4mIHRvawogICAgICAgICAgICAgKyttX3B0
cjsKIAogICAgICAgICAvLyBbMC05XSsKLSAgICAgICAgaWYgKG1fcHRyID49IG1fZW5kICYmICFp
c0FTQ0lJRGlnaXQoKm1fcHRyKSkKKyAgICAgICAgaWYgKG1fcHRyID49IG1fZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKm1fcHRyKSkKICAgICAgICAgICAgIHJldHVybiBUb2tFcnJvcjsKICAgICAgICAg
CiAgICAgICAgICsrbV9wdHI7CkBAIC0yMjYsNyArMzA5LDI1IEBAIEpTVmFsdWUgTGl0ZXJhbFBh
cnNlcjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5pdGlhbFN0YXRlKQogICAgICAgICAgICAgY2FzZSBT
dGFydFBhcnNlT2JqZWN0OiB7CiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7CiAgICAgICAgICAgICAgICAgb2JqZWN0U3RhY2su
YXBwZW5kKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gKKworICAgICAg
ICAgICAgICAgIFRva2VuVHlwZSB0eXBlID0gbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gVG9rU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIExleGVyOjpM
aXRlcmFsUGFyc2VyVG9rZW4gaWRlbnRpZmllclRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4o
KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgY29sb24KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fbGV4ZXIubmV4dCgpICE9IFRva0NvbG9uKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZGVudGlm
aWVyU3RhY2suYXBwZW5kKElkZW50aWZpZXIobV9leGVjLCBpZGVudGlmaWVyVG9rZW4uc3RyaW5n
VG9rZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoRG9QYXJzZU9i
amVjdEVuZEV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0UGFyc2VF
eHByZXNzaW9uOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPSBUb2tSQnJhY2Up
IAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgICAg
IG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG9iamVjdFN0YWNr
Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICBvYmplY3RTdGFjay5yZW1vdmVMYXN0KCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkb1BhcnNlT2Jq
ZWN0U3RhcnRFeHByZXNzaW9uOgogICAgICAgICAgICAgY2FzZSBEb1BhcnNlT2JqZWN0U3RhcnRF
eHByZXNzaW9uOiB7CkBAIC0yMzksMTAgKzM0MCwxMCBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI6
OnBhcnNlKFBhcnNlclN0YXRlIGluaXRpYWxTdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5hcHBlbmQoSWRlbnRpZmllciht
X2V4ZWMsIGlkZW50aWZpZXJUb2tlbi5zdGFydCArIDEsIGlkZW50aWZpZXJUb2tlbi5lbmQgLSBp
ZGVudGlmaWVyVG9rZW4uc3RhcnQgLSAyKSk7CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXJTdGFjay5hcHBlbmQoSWRlbnRpZmllcihtX2V4ZWMsIGlkZW50aWZpZXJUb2tlbi5zdHJpbmdU
b2tlbikpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChEb1BhcnNlT2Jq
ZWN0RW5kRXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnRQYXJzZUV4
cHJlc3Npb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9IFRva1JCcmFjZSkg
CisgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7CiAgICAgICAgICAgICAgICAg
bGFzdFZhbHVlID0gb2JqZWN0U3RhY2subGFzdCgpOwpAQCAtMjcyLDcgKzM3Myw3IEBAIEpTVmFs
dWUgTGl0ZXJhbFBhcnNlcjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5pdGlhbFN0YXRlKQogICAgICAg
ICAgICAgICAgICAgICBjYXNlIFRva1N0cmluZzogewogICAgICAgICAgICAgICAgICAgICAgICAg
TGV4ZXI6OkxpdGVyYWxQYXJzZXJUb2tlbiBzdHJpbmdUb2tlbiA9IG1fbGV4ZXIuY3VycmVudFRv
a2VuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGpzU3RyaW5nKG1fZXhlYywgVVN0cmluZyhzdHJp
bmdUb2tlbi5zdGFydCArIDEsIHN0cmluZ1Rva2VuLmVuZCAtIHN0cmluZ1Rva2VuLnN0YXJ0IC0g
MikpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0ganNTdHJpbmcobV9leGVj
LCBzdHJpbmdUb2tlbi5zdHJpbmdUb2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjYXNlIFRva051
bWJlcjogewpAQCAtMjgxLDYgKzM4MiwyMSBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI6OnBhcnNl
KFBhcnNlclN0YXRlIGluaXRpYWxTdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RW
YWx1ZSA9IGpzTnVtYmVyKG1fZXhlYywgVVN0cmluZyhudW1iZXJUb2tlbi5zdGFydCwgbnVtYmVy
VG9rZW4uZW5kIC0gbnVtYmVyVG9rZW4uc3RhcnQpLnRvRG91YmxlKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUb2tOdWxsOgorICAgICAgICAgICAgICAgICAgICAgICAgbV9sZXhlci5uZXh0
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBqc051bGwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVG9r
VHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdFZhbHVlID0ganNCb29sZWFuKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tGYWxzZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdFZhbHVlID0ganNCb29sZWFuKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBFcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNl
ci5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmgKaW5kZXggN2QwMjhm
Ny4uMWZlMzNhZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmgKQEAgLTM0
LDE2ICszNCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIExpdGVyYWxQYXJzZXIg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgTGl0ZXJhbFBhcnNlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFVTdHJpbmcmIHMpCisgICAgICAgIHR5cGVkZWYgZW51bSB7IFN0cmljdEpTT04sIE5vblN0
cmljdEpTT04gfSBQYXJzZXJNb2RlOworICAgICAgICBMaXRlcmFsUGFyc2VyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgcywgUGFyc2VyTW9kZSBtb2RlKQogICAgICAgICAgICAgOiBt
X2V4ZWMoZXhlYykKLSAgICAgICAgICAgICwgbV9sZXhlcihzKQorICAgICAgICAgICAgLCBtX2xl
eGVyKHMsIG1vZGUpCisgICAgICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgdHJ5TGl0ZXJhbFBhcnNlKCkKICAgICAg
ICAgewogICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IHBhcnNlKFN0YXJ0UGFyc2VTdGF0ZW1lbnQpOworICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBwYXJzZShtX21vZGUgPT0gU3RyaWN0SlNPTiA/IFN0YXJ0UGFyc2VFeHByZXNzaW9u
IDogU3RhcnRQYXJzZVN0YXRlbWVudCk7CiAgICAgICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50
VG9rZW4oKS50eXBlICE9IFRva0VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTU1LDcgKzU3LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb1BhcnNlQXJyYXlTdGFydEV4cHJl
c3Npb24sIERvUGFyc2VBcnJheUVuZEV4cHJlc3Npb24gfTsKICAgICAgICAgZW51bSBUb2tlblR5
cGUgeyBUb2tMQnJhY2tldCwgVG9rUkJyYWNrZXQsIFRva0xCcmFjZSwgVG9rUkJyYWNlLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICBUb2tTdHJpbmcsIFRva0lkZW50aWZpZXIsIFRva051bWJl
ciwgVG9rQ29sb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgIFRva0xQYXJlbiwgVG9rUlBh
cmVuLCBUb2tDb21tYSwgVG9rRW5kLCBUb2tFcnJvciB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgIFRva0xQYXJlbiwgVG9rUlBhcmVuLCBUb2tDb21tYSwgVG9rVHJ1ZSwgVG9rRmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgVG9rTnVsbCwgVG9rRW5kLCBUb2tFcnJvciB9OwogCiAg
ICAgICAgIGNsYXNzIExleGVyIHsKICAgICAgICAgcHVibGljOgpAQCAtNjMsOSArNjYsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgVG9rZW5UeXBlIHR5cGU7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0OwogICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiBlbmQ7CisgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdUb2tlbjsKICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICBMZXhlcihjb25zdCBVU3RyaW5nJiBzKQorICAgICAgICAgICAgTGV4
ZXIoY29uc3QgVVN0cmluZyYgcywgUGFyc2VyTW9kZSBtb2RlKQogICAgICAgICAgICAgICAgIDog
bV9zdHJpbmcocykKKyAgICAgICAgICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgICAgICAgICAg
ICAgICwgbV9wdHIocy5kYXRhKCkpCiAgICAgICAgICAgICAgICAgLCBtX2VuZChzLmRhdGEoKSAr
IHMuc2l6ZSgpKQogICAgICAgICAgICAgewpAQCAtODMsMTAgKzg4LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgCiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBUb2tlblR5
cGUgbGV4KExpdGVyYWxQYXJzZXJUb2tlbiYpOwotICAgICAgICAgICAgVG9rZW5UeXBlIGxleFN0
cmluZyhMaXRlcmFsUGFyc2VyVG9rZW4mKTsKKyAgICAgICAgICAgIHRlbXBsYXRlIDxQYXJzZXJN
b2RlIHBhcnNlck1vZGU+IFRva2VuVHlwZSBsZXhTdHJpbmcoTGl0ZXJhbFBhcnNlclRva2VuJik7
CiAgICAgICAgICAgICBUb2tlblR5cGUgbGV4TnVtYmVyKExpdGVyYWxQYXJzZXJUb2tlbiYpOwog
ICAgICAgICAgICAgTGl0ZXJhbFBhcnNlclRva2VuIG1fY3VycmVudFRva2VuOwogICAgICAgICAg
ICAgVVN0cmluZyBtX3N0cmluZzsKKyAgICAgICAgICAgIFBhcnNlck1vZGUgbV9tb2RlOwogICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIG1fcHRyOwogICAgICAgICAgICAgY29uc3QgVUNoYXIqIG1f
ZW5kOwogICAgICAgICB9OwpAQCAtOTYsNiArMTAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgRXhlY1N0YXRlKiBtX2V4ZWM7CiAgICAgICAgIExpdGVyYWxQYXJzZXI6OkxleGVyIG1f
bGV4ZXI7CisgICAgICAgIFBhcnNlck1vZGUgbV9tb2RlOwogICAgIH07CiB9CiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAx
ODkyNTEyLi45MWY2MTcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDYtMjEgIE9saXZl
ciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBCdWcgMjY1ODc6IFN1cHBvcnQgSlNPTi5wYXJzZQorCisgICAg
ICAgIEFkZCB0ZXN0cyB0byBjb3ZlciBiYXNpYyB1c2FnZSBvZiBKU09OLnBhcnNlCisKKyAgICAg
ICAgKiBmYXN0L2pzL0pTT04tcGFyc2UuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9K
U09OLXBhcnNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZXNvdXJj
ZXMvSlNPTi1wYXJzZS5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVUZXN0cy5yZXN1bHQpOgor
ICAgICAgICAoY3JlYXRlVGVzdHMpOgorCiAyMDA5LTA2LTIxICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBTa2lwIG9uZSBt
b3JlIHRlc3QuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04tcGFyc2UtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OLXBhcnNlLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI2YmY0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OLXBhcnNlLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDM5NiBAQAorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25P
YmplY3QucGFyc2UoKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcGFyYW1ldGVy
LgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFy
c2UoJycpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9u
IFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNv
bk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMScpOworICAgIH0K
K1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5n
aWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJy0xJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitm
dW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
SW5maW5pdHknKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24g
KGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ05hTicpOwor
ICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVy
cm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkg
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnbnVsbCcpOworICAgIH0KK1BBU1Mg
SlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRl
c3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJ3VuZGVmaW5lZCcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZl
SlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBz
dHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgne30nKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2
ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29u
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcoe30pJyk7CisgICAg
fQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6
IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7YX0nKTsKKyAgICB9CitQQVNTIHRlc3Rz
W2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBh
cnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJu
IGpzb25PYmplY3QucGFyc2UoJ3thOn0nKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpT
T04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3Ry
aW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJ3thOjV9Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBl
eGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0
aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7YTo1
LH0nKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBT
eW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25P
YmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSJ9Jyk7CisgICAg
fQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6
IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEiOn0nKTsKKyAgICB9CitQQVNTIHRl
c3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRv
IHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSI6NX0nKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5n
aWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09O
KSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBh
cnNlKCd7ImEiOjUsfScpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcg
ZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitqc29u
Mi5qcyBkaWQgbm90IHRocm93IGZvciBhIHRlc3Qgd2UgZXhwZWN0IHRvIHRocm93LgorZnVuY3Rp
b24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSI6
NSwsfScpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9u
IFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNv
bk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIjo1LCJhIix9
Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3lu
dGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2Jq
ZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEiOig1LCJhIiksfScp
OworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRh
eEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVj
dCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnW10nKTsKKyAgICB9CitQQVNT
IEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCdbMV0nKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3Rz
W2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0
aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdbMSxd
Jyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMg
SlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnWzEsMl0nKTsKKyAgICB9CitQQVNTIEpT
T04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0
c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCdbMSwyLCxdJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09O
KSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmlu
Zy4KK2pzb24yLmpzIGRpZCBub3QgdGhyb3cgZm9yIGEgdGVzdCB3ZSBleHBlY3QgdG8gdGhyb3cu
CitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJz
ZSgnWzEsMiwsNF0nKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4
Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgoranNvbjIu
anMgZGlkIG5vdCB0aHJvdyBmb3IgYSB0ZXN0IHdlIGV4cGVjdCB0byB0aHJvdy4KK2Z1bmN0aW9u
IChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciIicpOwor
ICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04u
c3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAg
ICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJcJyInKTsKKyAgICB9CitQQVNTIEpTT04uc3Ry
aW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShK
U09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCciYVwiJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRp
dmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNv
bk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXCInKTsKKyAg
ICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJv
cjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx6IicpOworICAgIH0KK1BBU1Mg
dGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUg
dG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICBy
ZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXFx6IicpOworICAgIH0KK1BBU1MgdGVzdHNbaV0o
bmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2Ug
SlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZSgnImFcXFxceiInKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRl
c3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1
bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCci
YVx0eiInKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04p
KSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0
KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdHoiJyk7CisgICAgfQor
UEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdp
ZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgnImFcbnoiJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRp
dmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09O
IHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2Jq
ZWN0LnBhcnNlKCciYVxcbnoiJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tp
XShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlv
biAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFccnoi
Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3lu
dGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2Jq
ZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxccnoiJyk7CisgICAg
fQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJp
bmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICBy
ZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcL3oiJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmlu
Z2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNP
TikpCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgnImFcXC96IicpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0
aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpz
b25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXGJ6IicpOwor
ICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVy
cm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitqc29uMi5qcyBkaWQgbm90IHRocm93
IGZvciBhIHRlc3Qgd2UgZXhwZWN0IHRvIHRocm93LgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFxieiInKTsKKyAgICB9CitQQVNT
IEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCciYVxyeiInKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpT
T04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3Ry
aW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJyJhXFxyeiInKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5h
dGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChq
c29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdXoiICAg
ICAnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBT
eW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25P
YmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MHoiICAgICcp
OworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRh
eEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVj
dCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMHoiICAgJyk7Cisg
ICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJy
b3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwMHoiICAnKTsKKyAgICB9
CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjog
VW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDAwMHoiICcpOworICAgIH0KK1BB
U1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5
KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJu
IGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDAwQXoiICcpOworICAgIH0KK1BBU1MgSlNPTi5zdHJp
bmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpT
T04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJyJhXFx1MDAwYXoiICcpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNb
aV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rp
b24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1
MDAwR3oiICcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0
aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAo
anNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMDBn
eiIgJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24g
U3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29u
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwQTB6IiAn
KTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBK
U09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwYTB6IiAnKTsKKyAgICB9CitQ
QVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lm
eSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwRzB6IiAnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ld
KG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNl
IEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJyJhXFx1MDBnMHoiICcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0
aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNP
TiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9i
amVjdC5wYXJzZSgnImFcXHUwQTAweiIgJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitm
dW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgn
ImFcXHUwYTAweiIgJyk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRp
dmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCitmdW5jdGlvbiAoanNv
bk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwRzAweiIg
Jyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3lu
dGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2Jq
ZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTBnMDB6IiAnKTsK
KyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhF
cnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3Qp
IHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1QTAwMHoiICcpOworICAg
IH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3Ry
aW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1YTAwMHoiICcpOworICAgIH0KK1BBU1MgSlNP
Ti5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3Rz
W2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25P
YmplY3QucGFyc2UoJyJhXFx1RzAwMHoiICcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZl
SlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBz
dHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgnImFcXHVnMDAweiIgJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09O
KSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmlu
Zy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBh
cnNlKCcwMCcpOworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0
aW9uIFN5bnRheEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitqc29uMi5qcyBk
aWQgbm90IHRocm93IGZvciBhIHRlc3Qgd2UgZXhwZWN0IHRvIHRocm93LgorZnVuY3Rpb24gKGpz
b25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzAxJyk7CisgICAg
fQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6
IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2pzb24yLmpzIGRpZCBub3QgdGhyb3cgZm9y
IGEgdGVzdCB3ZSBleHBlY3QgdG8gdGhyb3cuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMC5hJyk7CisgICAgfQorUEFTUyB0ZXN0c1tp
XShuYXRpdmVKU09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJz
ZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCcweDAnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04p
IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5n
LgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFy
c2UoJzJlMS4zJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVKU09OKSB0aHJldyBleGNl
cHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0cmluZy4KK2Z1bmN0aW9u
IChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcyZS0rMTAn
KTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50
YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzJlKy0xMCcpOworICAgIH0K
K1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBV
bmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVjdCkgeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMmUzZTQnKTsKKyAgICB9CitQQVNTIHRlc3Rz
W2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBh
cnNlIEpTT04gc3RyaW5nLgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJu
IGpzb25PYmplY3QucGFyc2UoJy0wMS4wJyk7CisgICAgfQorUEFTUyB0ZXN0c1tpXShuYXRpdmVK
U09OKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuYWJsZSB0byBwYXJzZSBKU09OIHN0
cmluZy4KK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCctMDEnKTsKKyAgICB9CitQQVNTIHRlc3RzW2ldKG5hdGl2ZUpTT04pIHRocmV3IGV4
Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nLgoranNvbjIu
anMgZGlkIG5vdCB0aHJvdyBmb3IgYSB0ZXN0IHdlIGV4cGVjdCB0byB0aHJvdy4KK2Z1bmN0aW9u
IChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCctMDEuYScp
OworICAgIH0KK1BBU1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRh
eEVycm9yOiBVbmFibGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitmdW5jdGlvbiAoanNvbk9iamVj
dCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMS5lMScpOworICAgIH0KK1BB
U1MgdGVzdHNbaV0obmF0aXZlSlNPTikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmFi
bGUgdG8gcGFyc2UgSlNPTiBzdHJpbmcuCitqc29uMi5qcyBkaWQgbm90IHRocm93IGZvciBhIHRl
c3Qgd2UgZXhwZWN0IHRvIHRocm93LgorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3RydWUnKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5n
aWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09O
KSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBh
cnNlKCdmYWxzZScpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZl
SlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVuY3Rpb24gKGpzb25P
YmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnko
c2ltcGxlT2JqZWN0KSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRp
dmVKU09OKSkgaXMgdGVzdHNbaV0uZXhwZWN0ZWQKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmpl
Y3QpKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBp
cyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhP
YmplY3QpKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04p
KSBpcyB0ZXN0c1tpXS5leHBlY3RlZAorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2ltcGxlT2JqZWN0LG51bGws
MTAwKSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSkg
aXMgdGVzdHNbaV0uZXhwZWN0ZWQKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QsbnVsbCwx
MDApKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBp
cyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhP
YmplY3QsbnVsbCwxMDApKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5h
dGl2ZUpTT04pKSBpcyB0ZXN0c1tpXS5leHBlY3RlZAorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2ltcGxlT2Jq
ZWN0LG51bGwsIiAiKSk7CisgICAgfQorUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRp
dmVKU09OKSkgaXMgdGVzdHNbaV0uZXhwZWN0ZWQKK2Z1bmN0aW9uIChqc29uT2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmpl
Y3QsbnVsbCwiICIpKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2
ZUpTT04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2Z1bmN0aW9uIChqc29u
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5
KGNvbXBsZXhPYmplY3QsbnVsbCwiICIpKTsKKyAgICB9CitQQVNTIEpTT04uc3RyaW5naWZ5KHRl
c3RzW2ldKG5hdGl2ZUpTT04pKSBpcyB0ZXN0c1tpXS5leHBlY3RlZAorZnVuY3Rpb24gKGpzb25P
YmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnko
c2ltcGxlT2JqZWN0LG51bGwsIlx0IikpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVz
dHNbaV0obmF0aXZlSlNPTikpIGlzIHRlc3RzW2ldLmV4cGVjdGVkCitmdW5jdGlvbiAoanNvbk9i
amVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShj
b21wbGV4T2JqZWN0LG51bGwsIlx0IikpOworICAgIH0KK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVz
dHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQorZnVu
Y3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNP
Ti5zdHJpbmdpZnkoY29tcGxleE9iamVjdCxudWxsLCJcdCIpKTsKKyAgICB9CitQQVNTIEpTT04u
c3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyB0ZXN0c1tpXS5leHBlY3RlZAorZnVu
Y3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNP
Ti5zdHJpbmdpZnkoc2ltcGxlT2JqZWN0LG51bGwsIlxuIikpOworICAgIH0KK1BBU1MgSlNPTi5z
dHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIHRlc3RzW2ldLmV4cGVjdGVkCitmdW5j
dGlvbiAoanNvbk9iamVjdCkgeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09O
LnN0cmluZ2lmeShjb21wbGV4T2JqZWN0LG51bGwsIlxuIikpOworICAgIH0KK1BBU1MgSlNPTi5z
dHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ld
KEpTT04pKQorZnVuY3Rpb24gKGpzb25PYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGpzb25PYmpl
Y3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGxleE9iamVjdCxudWxsLCJcbiIpKTsKKyAgICB9
CitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyB0ZXN0c1tpXS5l
eHBlY3RlZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvSlNPTi1wYXJzZS5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OLXBhcnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDY1OWJlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
anMvSlNPTi1wYXJzZS5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQ+Cit2YXIgbmF0aXZlSlNPTiA9IHRoaXMuSlNPTjsKK3RoaXMuSlNPTiA9IG51bGw7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanNvbjItZXM1LWNvbXBhdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL0pTT04tcGFyc2UuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvSlNPTi1w
YXJzZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04tcGFyc2UuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwODBlOQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04tcGFyc2UuanMKQEAgLTAsMCAr
MSwzODMgQEAKKworZnVuY3Rpb24gY3JlYXRlVGVzdHMoKSB7CisgICAgdmFyIHJlc3VsdCA9IFtd
OworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4g
anNvbk9iamVjdC5wYXJzZSgpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0g
MV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJycpOworICAgIH0pOworICAgIHJlc3Vs
dFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5j
dGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzEnKTsK
KyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoJy0xJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2go
ZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdJ
bmZpbml0eScpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dz
ID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ05hTicpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1
bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihq
c29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ251bGwnKTsKKyAg
ICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJ3VuZGVmaW5lZCcpOworICAgIH0pOworICAgIHJlc3VsdFty
ZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlv
bihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3t9Jyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJl
dHVybiBqc29uT2JqZWN0LnBhcnNlKCcoe30pJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3Vs
dC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpz
b25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgne2F9Jyk7CisgICAg
fSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgne2E6fScpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0u
dGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3thOjV9Jyk7CisgICAgfSk7CisgICAgcmVz
dWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1
bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgne2E6
NSx9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0
cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgneyJhIn0nKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0
Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNv
bk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEiOn0nKTsKKyAg
ICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAg
cmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2Jq
ZWN0LnBhcnNlKCd7ImEiOjV9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24o
anNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEiOjUsfScp
OworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsK
KyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJ3siYSI6NSwsfScpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQu
bGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29u
T2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3siYSI6NSwiYSIsfScp
OworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsK
KyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJ3siYSI6KDUsImEiKSx9Jyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jl
c3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9u
KGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnW10nKTsKKyAg
ICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJ1sxXScpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1
bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnWzEs
XScpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAg
ICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnWzEsMl0nKTsKKyAgICB9KTsKKyAgICByZXN1
bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJ1sxLDIsLF0nKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFd
LnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCdbMSwyLCw0XScpOworICAgIH0pOworICAg
IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVz
aChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2Uo
JyIiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciXCciJyk7CisgICAgfSk7CisgICAgcmVz
dWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCciYVwiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9i
amVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcIicpOworICAgIH0p
OworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1
bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJyJhXFx6IicpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0u
dGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFxceiInKTsKKyAgICB9KTsKKyAgICBy
ZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2go
ZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCci
YVxcXFx6IicpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qp
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcdHoiJyk7CisgICAgfSk7Cisg
ICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCciYVxcdHoiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rp
b24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxueiIn
KTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7
CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBq
c29uT2JqZWN0LnBhcnNlKCciYVxcbnoiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVu
Y3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxy
eiInKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRy
dWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCciYVxccnoiJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2go
ZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCci
YVwveiInKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFwveiInKTsKKyAgICB9KTsKKyAg
ICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25P
YmplY3QucGFyc2UoJyJhXGJ6IicpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3Ro
IC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFxieiInKTsKKyAgICB9KTsK
KyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpz
b25PYmplY3QucGFyc2UoJyJhXHJ6IicpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVu
Z3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2Jq
ZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFxyeiInKTsKKyAgICB9
KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJu
IGpzb25PYmplY3QucGFyc2UoJyJhXFx1eiIgICAgICcpOworICAgIH0pOworICAgIHJlc3VsdFty
ZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlv
bihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MHoi
ICAgICcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0g
dHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDB6IiAgICcpOworICAgIH0pOworICAgIHJlc3Vs
dFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5j
dGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1
MDAweiIgICcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dz
ID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAg
cmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDAwMHoiICcpOworICAgIH0pOworICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgnImFcXHUwMDBBeiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rp
b24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAw
MGF6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDAwR3oiICcpOworICAgIH0p
OworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1
bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJyJhXFx1MDAwZ3oiICcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3Ro
IC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0
KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MDBBMHoiICcpOworICAg
IH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1
cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwMGEweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0
LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBh
cnNlKCciYVxcdTAwRzB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAt
IDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCciYVxcdTAwZzB6IiAnKTsKKyAgICB9
KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVz
dWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0
LnBhcnNlKCciYVxcdTBBMDB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlv
bihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1MGEw
MHoiICcpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qpewor
ICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHUwRzAweiIgJyk7CisgICAgfSk7
CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3Vs
dC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZSgnImFcXHUwZzAweiIgJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGgg
LSAxXS50aHJvd3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qp
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnImFcXHVBMDAweiIgJyk7CisgICAg
fSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCciYVxcdWEwMDB6IiAnKTsKKyAgICB9KTsKKyAgICByZXN1bHQu
cHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFy
c2UoJyJhXFx1RzAwMHoiICcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0g
MV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsK
KyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJyJhXFx1ZzAwMHoiICcpOworICAgIH0p
OworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1
bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3Qu
cGFyc2UoJzAwJyk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJv
d3MgPSB0cnVlOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAg
ICByZXR1cm4ganNvbk9iamVjdC5wYXJzZSgnMDEnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVz
dWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24o
anNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcwLmEnKTsKKyAg
ICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAg
cmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2Jq
ZWN0LnBhcnNlKCcweDAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFd
LnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCcyZTEuMycpOworICAgIH0pOworICAgIHJl
c3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChm
dW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzJl
LSsxMCcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0g
dHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJzJlKy0xMCcpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1
bHQubGVuZ3RoIC0gMV0udGhyb3dzID0gdHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihq
c29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJzJlM2U0Jyk7Cisg
ICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS50aHJvd3MgPSB0cnVlOworICAg
IHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9i
amVjdC5wYXJzZSgnLTAxLjAnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAt
IDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7
CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCctMDEnKTsKKyAgICB9KTsKKyAgICBy
ZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2go
ZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCct
MDEuYScpOworICAgIH0pOworICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0udGhyb3dzID0g
dHJ1ZTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0
dXJuIGpzb25PYmplY3QucGFyc2UoJzEuZTEnKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0
Lmxlbmd0aCAtIDFdLnRocm93cyA9IHRydWU7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNv
bk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd0cnVlJyk7CisgICAg
fSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CisgICAgICAgIHJldHVy
biBqc29uT2JqZWN0LnBhcnNlKCdmYWxzZScpOworICAgIH0pOworICAgIHZhciBzaW1wbGVBcnJh
eSA9IFsnYScsICdiJywgJ2MnXTsKKyAgICB2YXIgc2ltcGxlT2JqZWN0ID0ge2E6IjEiLCBiOiIy
IiwgYzoiMyJ9OworICAgIHZhciBjb21wbGV4QXJyYXkgPSBbJ2EnLCAnYicsICdjJywsLHNpbXBs
ZU9iamVjdCwgc2ltcGxlQXJyYXksIFtzaW1wbGVPYmplY3Qsc2ltcGxlQXJyYXldXTsKKyAgICB2
YXIgY29tcGxleE9iamVjdCA9IHthOiIxIiwgYjoiMiIsIGM6IjMiLCBkOjQuNWUxMCwgZzogMC40
NWUtNSwgaDogMC4wLCBpOiAwLCBqOi41LCBrOjAuLCBsOi0wLCBtOi0wLjAsIG46LTAuLCBvOi0u
NSwgcDotMC40NWUtMTAsIHE6LTQuNWUxMCwgZTpudWxsLCAiIjoxMiwgZjogc2ltcGxlQXJyYXks
IGFycmF5OiBjb21wbGV4QXJyYXl9OworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmpl
Y3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShzaW1w
bGVPYmplY3QpKTsKKyAgICB9KTsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLmV4cGVj
dGVkID0gSlNPTi5zdHJpbmdpZnkoc2ltcGxlT2JqZWN0KTsKKyAgICByZXN1bHQucHVzaChmdW5j
dGlvbihqc29uT2JqZWN0KXsKKyAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5z
dHJpbmdpZnkoY29tcGxleE9iamVjdCkpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0
aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0
cmluZ2lmeShjb21wbGV4T2JqZWN0KSk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5n
dGggLSAxXS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QpOworICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZShKU09OLnN0cmluZ2lmeShzaW1wbGVPYmplY3QsbnVsbCwxMDApKTsKKyAgICB9KTsK
KyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLmV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnko
c2ltcGxlT2JqZWN0KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAg
ICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGxleE9iamVj
dCxudWxsLDEwMCkpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmpl
Y3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21w
bGV4T2JqZWN0LG51bGwsMTAwKSk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGgg
LSAxXS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QpOworICAgIHJlc3Vs
dC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5w
YXJzZShKU09OLnN0cmluZ2lmeShzaW1wbGVPYmplY3QsbnVsbCwiICIpKTsKKyAgICB9KTsKKyAg
ICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLmV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoc2lt
cGxlT2JqZWN0KTsKKyAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKKyAgICAg
ICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGxleE9iamVjdCxu
dWxsLCIgIikpOworICAgIH0pOworICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3Qp
eworICAgICAgICByZXR1cm4ganNvbk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wbGV4
T2JqZWN0LG51bGwsIiAiKSk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAx
XS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QpOworICAgIAorICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZShKU09OLnN0cmluZ2lmeShzaW1wbGVPYmplY3QsbnVsbCwiXHQiKSk7CisgICAgfSk7
CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5
KHNpbXBsZU9iamVjdCk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7Cisg
ICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmpl
Y3QsbnVsbCwiXHQiKSk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9i
amVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNv
bXBsZXhPYmplY3QsbnVsbCwiXHQiKSk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5n
dGggLSAxXS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QpOworICAgIAor
ICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpeworICAgICAgICByZXR1cm4ganNv
bk9iamVjdC5wYXJzZShKU09OLnN0cmluZ2lmeShzaW1wbGVPYmplY3QsbnVsbCwiXG4iKSk7Cisg
ICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3RlZCA9IEpTT04uc3Ry
aW5naWZ5KHNpbXBsZU9iamVjdCk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVj
dCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBs
ZXhPYmplY3QsbnVsbCwiXG4iKSk7CisgICAgfSk7CisgICAgcmVzdWx0LnB1c2goZnVuY3Rpb24o
anNvbk9iamVjdCl7CisgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKEpTT04uc3RyaW5n
aWZ5KGNvbXBsZXhPYmplY3QsbnVsbCwiXG4iKSk7CisgICAgfSk7CisgICAgcmVzdWx0W3Jlc3Vs
dC5sZW5ndGggLSAxXS5leHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNvbXBsZXhPYmplY3QpOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9Cit2YXIgdGVzdHMgPSBjcmVhdGVUZXN0cygpOwor
Zm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworICAgIHRyeSB7CisgICAg
ICAgIGRlYnVnKHRlc3RzW2ldKTsKKyAgICAgICAgaWYgKHRlc3RzW2ldLnRocm93cykgeworICAg
ICAgICAgICAgc2hvdWxkVGhyb3coJ3Rlc3RzW2ldKG5hdGl2ZUpTT04pJyk7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIHZhciB0aHJldyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIHRlc3RzW2ldKEpTT04pOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh
dGhyZXcpCisgICAgICAgICAgICAgICAgZGVidWcoImpzb24yLmpzIGRpZCBub3QgdGhyb3cgZm9y
IGEgdGVzdCB3ZSBleHBlY3QgdG8gdGhyb3cuIik7CisgICAgICAgIH0gZWxzZSBpZiAodGVzdHNb
aV0uZXhwZWN0ZWQpCisgICAgICAgICAgICB0cnkgeyBzaG91bGRCZSgnSlNPTi5zdHJpbmdpZnko
dGVzdHNbaV0obmF0aXZlSlNPTikpJywgICJ0ZXN0c1tpXS5leHBlY3RlZCIpIH0gY2F0Y2goZSkg
eyBkZWJ1ZygidGhyZXcgLSAiICsgZSl9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyeSB7
IHNob3VsZEJlKCdKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRpdmVKU09OKSknLCAgJ0pTT04u
c3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKScpIH0gY2F0Y2goZSkgeyBkZWJ1ZygidGhyZXcgLSAi
ICsgZSkgfTsKKyAgICB9Y2F0Y2goZSl7CisgICAgICAgIGRlYnVnKGUpOworICAgIH0KK30KK3N1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>