<?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>156832</bug_id>
          
          <creation_ts>2016-04-20 21:39:17 -0700</creation_ts>
          <short_desc>Align RegExp[@@match] with other @@ methods</short_desc>
          <delta_ts>2016-05-17 05:29:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>157595</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1185687</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-20 21:39:17 -0700</bug_when>
    <thetext>RegExp[@@search] and [@@split] were implemented after [@@match] and are written to take advantage of capabilities added after [@@match] was written, such as determining if RegExp.prototype.exec has been overwritten.  Therefore RegExp[@@match] should be changed to conform to these other implementations.  Other cleanup is possible, such as making RegExp.prototype.@exec a hidden property of the global object to reduce the overhead of accessing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185692</commentid>
    <comment_count>1</comment_count>
      <attachid>276898</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-20 21:58:11 -0700</bug_when>
    <thetext>Created attachment 276898
Patch

Performance tests show the change to be neutral.

VMs tested:
&quot;Baseline&quot; at /Volumes/Data/src/webkit.work/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc
&quot;MatchCleanup&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc

Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                 Baseline                MatchCleanup                                   
SunSpider:
   3d-cube                                    6.5433+-0.2248     ?      6.5587+-0.0851        ?
   3d-morph                                   6.4429+-1.0437            6.3725+-0.6656          might be 1.0111x faster
   3d-raytrace                                7.5284+-0.5019            7.4109+-0.5968          might be 1.0158x faster
   access-binary-trees                        2.5365+-0.1192     ?      2.6064+-0.1574        ? might be 1.0276x slower
   access-fannkuch                            7.4948+-0.3563            7.4009+-0.0886          might be 1.0127x faster
   access-nbody                               3.3707+-0.2332            3.3433+-0.1980        
   access-nsieve                              3.9188+-0.3051            3.9163+-0.2285        
   bitops-3bit-bits-in-byte                   1.4540+-0.0457     ?      1.4930+-0.0488        ? might be 1.0268x slower
   bitops-bits-in-byte                        3.6873+-0.1733            3.5651+-0.1466          might be 1.0343x faster
   bitops-bitwise-and                         2.4251+-0.0497     ?      2.4637+-0.1788        ? might be 1.0159x slower
   bitops-nsieve-bits                         3.8368+-0.1977            3.8152+-0.2503        
   controlflow-recursive                      2.8558+-0.1176     ?      2.9936+-0.1871        ? might be 1.0482x slower
   crypto-aes                                 5.6514+-0.3803            5.3979+-0.0748          might be 1.0470x faster
   crypto-md5                                 3.3098+-0.1738            3.1350+-0.1633          might be 1.0558x faster
   crypto-sha1                                3.0820+-0.0845     ?      3.1250+-0.1171        ? might be 1.0140x slower
   date-format-tofte                         10.8714+-0.1048           10.7490+-0.5254          might be 1.0114x faster
   date-format-xparb                          6.4147+-0.6334            5.7380+-0.2221          might be 1.1179x faster
   math-cordic                                3.5575+-0.0937     ?      3.5599+-0.2351        ?
   math-partial-sums                          6.1335+-0.3211     ?      6.1850+-0.1287        ?
   math-spectral-norm                         2.5281+-0.1955     ?      2.5421+-0.1738        ?
   regexp-dna                                 8.0870+-0.6587            7.9974+-0.2135          might be 1.0112x faster
   string-base64                              5.5316+-0.5308     ?      5.5733+-0.2920        ?
   string-fasta                               7.1266+-0.4464            6.9807+-0.3774          might be 1.0209x faster
   string-tagcloud                           10.3281+-1.1714           10.2260+-0.9551        
   string-unpack-code                        22.5161+-1.8216     ?     22.6944+-1.9004        ?
   string-validate-input                      5.2698+-0.2386     ?      5.5350+-0.3361        ? might be 1.0503x slower

   &lt;arithmetic&gt;                               5.8655+-0.0147            5.8223+-0.0728          might be 1.0074x faster

                                                 Baseline                MatchCleanup                                   
V8Spider:
   crypto                                    47.6120+-2.5335           47.0132+-0.9663          might be 1.0127x faster
   deltablue                                 63.2944+-1.6345           62.7013+-3.2528        
   earley-boyer                              49.7480+-0.9024     ?     49.9853+-2.4668        ?
   raytrace                                  35.7768+-0.5457     ?     36.9423+-2.2565        ? might be 1.0326x slower
   regexp                                    73.6180+-6.4317     ?     74.0724+-6.1114        ?
   richards                                  55.1022+-1.7113     ?     56.2052+-5.3655        ? might be 1.0200x slower
   splay                                     35.2679+-0.8128     ?     36.3536+-1.6283        ? might be 1.0308x slower

   &lt;geometric&gt;                               49.8615+-1.0403     ?     50.3598+-1.6381        ? might be 1.0100x slower

                                                 Baseline                MatchCleanup                                   
Octane:
   encrypt                                   0.21685+-0.02155          0.21004+-0.02030         might be 1.0324x faster
   decrypt                                   3.78450+-0.37222          3.67021+-0.25879         might be 1.0311x faster
   deltablue                        x2       0.17408+-0.01506    ?     0.17466+-0.01515       ?
   earley                                    0.38849+-0.02485    ?     0.38980+-0.02819       ?
   boyer                                     6.04879+-0.07190    ?     6.45180+-0.44488       ? might be 1.0666x slower
   navier-stokes                    x2       5.71549+-0.19270    ?     5.77068+-0.45744       ?
   raytrace                         x2       1.05800+-0.07801          1.04034+-0.02997         might be 1.0170x faster
   richards                         x2       0.11255+-0.00172    ?     0.11349+-0.00453       ?
   splay                            x2       0.40229+-0.00670          0.40183+-0.00218       
   regexp                           x2      20.58057+-0.60117    ?    22.20006+-1.38589       ? might be 1.0787x slower
   pdfjs                            x2      49.00001+-0.34920    ?    51.39205+-4.38271       ? might be 1.0488x slower
   mandreel                         x2      55.26996+-3.89472    ?    56.08615+-4.51110       ? might be 1.0148x slower
   gbemu                            x2      35.54019+-3.74243    ?    36.83474+-4.23541       ? might be 1.0364x slower
   closure                                   0.75688+-0.05865    ?     0.75805+-0.05174       ?
   jquery                                    9.38341+-0.07685    ?     9.64384+-0.83593       ? might be 1.0278x slower
   box2d                            x2      13.76967+-1.37758         13.48207+-1.09540         might be 1.0213x faster
   zlib                             x2     429.67440+-2.30962        424.39040+-26.78692        might be 1.0125x faster
   typescript                       x2     971.48657+-81.04340       948.14832+-69.03914        might be 1.0246x faster

   &lt;geometric&gt;                               6.60661+-0.19750    ?     6.66511+-0.08633       ? might be 1.0089x slower

                                                 Baseline                MatchCleanup                                   
Kraken:
   ai-astar                                  115.521+-4.322      ?     115.697+-7.411         ?
   audio-beat-detection                       52.152+-3.924             51.529+-0.596           might be 1.0121x faster
   audio-dft                                 118.021+-1.362            117.844+-1.016         
   audio-fft                                  42.993+-3.562             42.079+-2.501           might be 1.0217x faster
   audio-oscillator                           59.745+-0.447      ?      60.338+-1.025         ?
   imaging-darkroom                           78.641+-8.121             78.592+-5.613         
   imaging-desaturate                         68.223+-4.147      ?      71.065+-6.995         ? might be 1.0417x slower
   imaging-gaussian-blur                      88.408+-14.810     ?      88.441+-13.068        ?
   json-parse-financial                       49.546+-0.749      ?      51.770+-5.167         ? might be 1.0449x slower
   json-stringify-tinderbox                   30.319+-2.661             30.225+-1.589         
   stanford-crypto-aes                        47.246+-2.759      ?      48.446+-1.314         ? might be 1.0254x slower
   stanford-crypto-ccm                        44.336+-3.893             42.866+-2.626           might be 1.0343x faster
   stanford-crypto-pbkdf2                    116.219+-9.545      ?     116.504+-2.625         ?
   stanford-crypto-sha256-iterative           46.717+-2.416             46.299+-3.389         

   &lt;arithmetic&gt;                               68.435+-1.608      ?      68.692+-2.509         ? might be 1.0038x slower

                                                 Baseline                MatchCleanup                                   
AsmBench:
   bigfib.cpp                               560.6772+-22.6286    ?    579.9601+-53.6733       ? might be 1.0344x slower
   cray.c                                   449.7924+-27.4427         442.8202+-8.4744          might be 1.0157x faster
   dry.c                                    539.3149+-80.7257    ?    541.6490+-89.3612       ?
   FloatMM.c                                843.0039+-45.7769         827.4686+-4.3725          might be 1.0188x faster
   gcc-loops.cpp                           4786.2945+-50.3050        4785.0507+-85.7497       
   n-body.c                                1050.0835+-53.9163        1040.3228+-10.2812       
   Quicksort.c                              499.2238+-24.4644    ?    505.1614+-37.7292       ? might be 1.0119x slower
   stepanov_container.cpp                  3890.3535+-312.1475   ?   3891.8465+-295.8277      ?
   Towers.c                                 313.3977+-4.9532     ?    322.8462+-22.9486       ? might be 1.0301x slower

   &lt;geometric&gt;                              889.5447+-14.8601    ?    893.0001+-18.6593       ? might be 1.0039x slower

                                                 Baseline                MatchCleanup                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                           41.1219+-0.2931     ?     41.2774+-0.3372        ? might be 1.0038x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185697</commentid>
    <comment_count>2</comment_count>
      <attachid>276898</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-04-20 22:17:43 -0700</bug_when>
    <thetext>Comment on attachment 276898
Patch

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

r=me with comments.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:265
&gt; +static JSObject* getById(ExecState* exec, JSObject* base, const Identifier&amp; ident)
&gt; +{
&gt; +    JSValue baseValue = JSValue(base);
&gt; +    PropertySlot slot(baseValue, PropertySlot::InternalMethodType::VMInquiry);
&gt; +    return baseValue.get(exec, ident, slot).toObject(exec);
&gt; +}

You don&apos;t need this.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:566
&gt; +    JSObject* regExpProtoExecObject = getById(exec, m_regExpPrototype.get(), vm.propertyNames-&gt;exec);

You can just do &quot;m_regExpPrototype-&gt;getDirect(exec, vm.propertyNames-&gt;exec)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185698</commentid>
    <comment_count>3</comment_count>
      <attachid>276898</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-20 22:18:36 -0700</bug_when>
    <thetext>Comment on attachment 276898
Patch

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

r- because there&apos;s a bug.

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        called in @regExpBuiltinExec to match the name it has in the standard.

typo:/called in/called it/.
nit: I think &quot;spec&quot; or &quot;specification&quot; is a better term than &quot;standard&quot; in this case.

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +        Added the builting function @hasObservableSideEffectsForRegExpMatch() that

typo:/builting/builtin/.

&gt; Source/JavaScriptCore/builtins/RegExpPrototype.js:122
&gt; +        resultList.@push(resultString);
&gt;      }
&gt; -    return builtinExec.@call(regexp, str);
&gt;  }

I think you have a bug here.   I think match() needs to end with a call to @regExpBuiltinExec() to achieve parity with the old code.  I recommend that you rig hasObservableSideEffectsForRegExpMatch() to always return true, and run all the tests (JSC and layout tests) to test the slow path.  That&apos;s what I did with @@split and @@search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185699</commentid>
    <comment_count>4</comment_count>
      <attachid>276898</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-20 22:22:24 -0700</bug_when>
    <thetext>Comment on attachment 276898
Patch

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

&gt; Source/JavaScriptCore/builtins/RegExpPrototype.js:75
&gt; +    // These are accessed by the builtin flags getter.
&gt; +    let regexpGlobal = @tryGetById(regexp, &quot;global&quot;);
&gt; +    if (regexpGlobal !== @regExpProtoGlobalGetter)
&gt; +        return true;
&gt; +    let regexpIgnoreCase = @tryGetById(regexp, &quot;ignoreCase&quot;);
&gt; +    if (regexpIgnoreCase !== @regExpProtoIgnoreCaseGetter)
&gt; +        return true;

Also, according to https://tc39.github.io/ecma262/2016/#sec-regexp.prototype-@@match, the 2 flags that are accessed are &quot;global&quot; and &quot;unicode&quot;, not &quot;ignoreCase&quot;.  Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185700</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-20 22:28:46 -0700</bug_when>
    <thetext>BTW, do you already have tests that tests for the observable side effects on @@match for RegExp and String?  If not, you can take a look at LayoutTests/js/regress/script-tests/regexp-prototype-split-observable-side-effects*.js and .../string-prototype-split-observable-side-effects*.js.  There are also analogous versions for search.

In those tests, you&apos;ll find a collection of tests on objects that looks like RegExp, subclasses of RegExp, any of the above with the prototype chain tampered with, the default RegExp prototype tampered with, etc.  The tests that tamper with builtin objects like RegExp.prototype are put in separate files because that tampering cannot be undone to the primodial state (the structure has already transitioned).

If needed, you can used those as a template to write tests to check for observable side effects on @@match for RegExp and String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185702</commentid>
    <comment_count>6</comment_count>
      <attachid>276900</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-20 23:22:57 -0700</bug_when>
    <thetext>Created attachment 276900
Fixed typos and adopted suggestion to get exec property from RegExp.prototype in JSGlobalObject.cpp

(In reply to comment #3)
&gt; Comment on attachment 276898 [details]
&gt; &gt; Source/JavaScriptCore/builtins/RegExpPrototype.js:122
&gt; &gt; +        resultList.@push(resultString);
&gt; &gt;      }
&gt; &gt; -    return builtinExec.@call(regexp, str);
&gt; &gt;  }
&gt; 
&gt; I think you have a bug here.   I think match() needs to end with a call to
&gt; @regExpBuiltinExec() to achieve parity with the old code.  I recommend that
&gt; you rig hasObservableSideEffectsForRegExpMatch() to always return true, and
&gt; run all the tests (JSC and layout tests) to test the slow path.  That&apos;s what
&gt; I did with @@split and @@search.

No bug.  The diff is confusing.  In the prior code, the fast path was after the loop, which was entered if RegExp.prototype.exec had been overridden.  I added the &quot;not-global&quot; case to the fast path in this patch and as a result moved it higher in this function.  The spec shows the exit for the global case from within the while true loop.

I did run the test with the fast path disabled.

(In reply to comment #5)
&gt; BTW, do you already have tests that tests for the observable side effects on
&gt; @@match for RegExp and String? 

Those tests were written shortly after the original @@match change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185704</commentid>
    <comment_count>7</comment_count>
      <attachid>276900</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-20 23:34:40 -0700</bug_when>
    <thetext>Comment on attachment 276900
Fixed typos and adopted suggestion to get exec property from RegExp.prototype in JSGlobalObject.cpp

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

Yes, you&apos;re right.  I misread the while loop in RegExp&apos;s match.

r=me with the one comment change / removal.

&gt; Source/JavaScriptCore/builtins/RegExpPrototype.js:69
&gt; +    // These are accessed by the builtin flags getter.

Please remove or change this comment.  The builtin flags getter says RegExp.prototype.flags to me, and @@match does not access flags.  In @@split, it actually did read &quot;flags&quot;, and that indirectly reads the other individual flags.  In your case, I think this comment is not correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185738</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-21 03:57:25 -0700</bug_when>
    <thetext>Committed r199812: &lt;http://trac.webkit.org/changeset/199812&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276898</attachid>
            <date>2016-04-20 21:58:11 -0700</date>
            <delta_ts>2016-04-20 23:22:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>156832.patch</filename>
            <type>text/plain</type>
            <size>17753</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE2LTA0LTIwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFsaWduIFJlZ0V4cFtAQG1hdGNoXSB3aXRoIG90aGVyIEBAIG1ldGhvZHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjgzMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZhcmlvdXMgY2hhbmdlcyB0
byBhbGlnbiB0aGUgUmVnRXhwW0BAbWF0Y2hdIHdpdGggW0BAc2VhcmNoXSBhbmQgW0BAc3BsaXRd
LgorCisgICAgICAgIE1hZGUgUmVnRXhwLnByb3RvdHlwZS5AZXhlYyBhIGhpZGRlbiBwcm9wZXJ0
eSBvbiB0aGUgZ2xvYmFsIG9iamVjdCBhbmQKKyAgICAgICAgY2FsbGVkIGluIEByZWdFeHBCdWls
dGluRXhlYyB0byBtYXRjaCB0aGUgbmFtZSBpdCBoYXMgaW4gdGhlIHN0YW5kYXJkLgorICAgICAg
ICBDaGFuZ2VkIGFsbCBwbGFjZXMgdGhhdCB1c2VkIHRoZSBvbGQgbmFtZSB0byB1c2UgdGhlIG5l
dyBvbmUuCisKKyAgICAgICAgTWFkZSB0aGUgbWF0Y2ggZmFzdCBwYXRoIGZ1bmN0aW9uLCB3aGlj
aCB1c2VkIHRvIGJlIGNhbGwgQG1hdGNoLCB0byBiZSBjYWxsZWQKKyAgICAgICAgQHJlZ0V4cE1h
dGNoRmFzdCBhbmQgcHV0IGl0IG9uIHRoZSBnbG9iYWwgb2JqZWN0LiAgQ2hhbmdlZCBpdCB0byBh
bHNvIGhhbmRsZQorICAgICAgICBleHByZXNzaW9ucyBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhl
IGdsb2JhbCBmbGFnLiAgUmVmYWN0b3JlZCB0aGUgYnVpbHRpbgorICAgICAgICBAbWF0Y2ggYWNj
b3JkaW5nbHkuCisKKyAgICAgICAgQWRkZWQgdGhlIGJ1aWx0aW5nIGZ1bmN0aW9uIEBoYXNPYnNl
cnZhYmxlU2lkZUVmZmVjdHNGb3JSZWdFeHBNYXRjaCgpIHRoYXQKKyAgICAgICAgY2hlY2tzIHRv
IHNlZSBpZiB3ZSBjYW4gdXNlIHRoZSBmYXN0IHBhdGggb2YgaWYgd2UgbmVlZCB0aGUgZXhwbGlj
aXQgdmVyc2lvbi4KKworICAgICAgICBQdXQgdGhlIG1haW4gUmVnRXhwIGZ1bmN0aW9ucyBAbWF0
Y2gsIEBzZWFyY2ggYW5kIEBzcGxpdCBpbiBhbHBoYWJldGljYWwKKyAgICAgICAgb3JkZXIgaW4g
UmVnRXhwUHJvdG90eXBlLmpzLiAgRGlkIHRoZSBzYW1lIGZvciBAbWF0Y2gsIEByZXBlYXQsIEBz
ZWFyY2ggYW5kIAorICAgICAgICBAc3BsaXQgaW4gU3RyaW5nUHJvdG90eXBlLmpzLgorICAgICAg
ICAKKyAgICAgICAgKiBidWlsdGlucy9SZWdFeHBQcm90b3R5cGUuanM6CisgICAgICAgIChyZWdF
eHBFeGVjKToKKyAgICAgICAgKGhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4cE1hdGNo
KTogTmV3LgorICAgICAgICAobWF0Y2gpOgorICAgICAgICAoc2VhcmNoKToKKyAgICAgICAgKGhh
c09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4cFNwbGl0KToKKyAgICAgICAgUmVvcmRlcmVk
IGluIHRoZSBmaWxlIGFuZCB1cGRhdGVkIHRvIHVzZSBAcmVnRXhwQnVpbHRpbkV4ZWMuCisKKyAg
ICAgICAgKiBidWlsdGlucy9TdHJpbmdQcm90b3R5cGUuanM6CisgICAgICAgIChtYXRjaCk6Cisg
ICAgICAgIChyZXBlYXRTbG93UGF0aCk6CisgICAgICAgIChyZXBlYXQpOgorICAgICAgICAoc2Vh
cmNoKToKKyAgICAgICAgKHNwbGl0KToKKyAgICAgICAgUmVvcmRlcmVkIGZ1bmN0aW9ucyBpbiB0
aGUgZmlsZS4KKworICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnNldEdsb2JhbFRoaXMpOgorICAgICAgICAoSlNDOjpnZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6Z2V0R2V0dGVyQnlJZCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OlJlZ0V4cFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpyZWdFeHBQ
cm90b0Z1bmNFeGVjKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jTWF0Y2hGYXN0KToK
KyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jTWF0Y2hQcml2YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oOgorCiAyMDE2LTA0LTIwICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgSmF2YVNjcmlwdENvcmUgZ2Fy
YmFnZSBjb2xsZWN0aW9uIGlzIG1pc3NpbmcgYW4gYXV0b3JlbGVhc2UgcG9vbApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1JlZ0V4cFByb3RvdHlwZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUmVnRXhwUHJvdG90eXBlLmpzCShy
ZXZpc2lvbiAxOTk3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUmVnRXhw
UHJvdG90eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwzOSBAQCBmdW5jdGlvbiBh
ZHZhbmNlU3RyaW5nSW5kZXgoc3RyaW5nLCBpbmRlCiAgICAgcmV0dXJuIGluZGV4ICsgMjsKIH0K
IAotZnVuY3Rpb24gbWF0Y2goc3RyKQorZnVuY3Rpb24gcmVnRXhwRXhlYyhyZWdleHAsIHN0cikK
K3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBsZXQgZXhlYyA9IHJlZ2V4cC5leGVjOworICAg
IGxldCBidWlsdGluRXhlYyA9IEByZWdFeHBCdWlsdGluRXhlYzsKKyAgICBpZiAoZXhlYyAhPT0g
YnVpbHRpbkV4ZWMgJiYgdHlwZW9mIGV4ZWMgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IGV4ZWMuQGNhbGwocmVnZXhwLCBzdHIpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSBudWxsICYmICFAaXNPYmplY3QocmVzdWx0KSkKKyAgICAgICAgICAgIHRocm93IG5ldyBAVHlw
ZUVycm9yKCJUaGUgcmVzdWx0IG9mIGEgUmVnRXhwIGV4ZWMgbXVzdCBiZSBudWxsIG9yIGFuIG9i
amVjdCIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gYnVpbHRp
bkV4ZWMuQGNhbGwocmVnZXhwLCBzdHIpOworfQorCitmdW5jdGlvbiBoYXNPYnNlcnZhYmxlU2lk
ZUVmZmVjdHNGb3JSZWdFeHBNYXRjaChyZWdleHApIHsKKyAgICAvLyBUaGlzIGlzIGFjY2Vzc2Vk
IGJ5IHRoZSBSZWdFeHBFeGVjIGludGVybmFsIGZ1bmN0aW9uLgorICAgIGxldCByZWdleHBFeGVj
ID0gQHRyeUdldEJ5SWQocmVnZXhwLCAiZXhlYyIpOworICAgIGlmIChyZWdleHBFeGVjICE9PSBA
cmVnRXhwQnVpbHRpbkV4ZWMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIFRo
ZXNlIGFyZSBhY2Nlc3NlZCBieSB0aGUgYnVpbHRpbiBmbGFncyBnZXR0ZXIuCisgICAgbGV0IHJl
Z2V4cEdsb2JhbCA9IEB0cnlHZXRCeUlkKHJlZ2V4cCwgImdsb2JhbCIpOworICAgIGlmIChyZWdl
eHBHbG9iYWwgIT09IEByZWdFeHBQcm90b0dsb2JhbEdldHRlcikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgbGV0IHJlZ2V4cElnbm9yZUNhc2UgPSBAdHJ5R2V0QnlJZChyZWdleHAsICJpZ25v
cmVDYXNlIik7CisgICAgaWYgKHJlZ2V4cElnbm9yZUNhc2UgIT09IEByZWdFeHBQcm90b0lnbm9y
ZUNhc2VHZXR0ZXIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiAhQGlz
UmVnRXhwT2JqZWN0KHJlZ2V4cCk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoKHN0ckFyZykKIHsKICAg
ICAidXNlIHN0cmljdCI7CiAKQEAgLTUzLDU5ICs4NSw0MCBAQCBmdW5jdGlvbiBtYXRjaChzdHIp
CiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJSZWdFeHAucHJvdG90eXBlLkBAbWF0Y2gg
cmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYW4gT2JqZWN0Iik7CiAKICAgICBsZXQgcmVnZXhwID0g
dGhpczsKLSAgICBsZXQgc3RyaW5nQXJnID0gQHRvU3RyaW5nKHN0cik7CiAKLSAgICBpZiAoIXJl
Z2V4cC5nbG9iYWwpCi0gICAgICAgIHJldHVybiByZWdleHAuZXhlYyhzdHJpbmdBcmcpOworICAg
IC8vIENoZWNrIGZvciBvYnNlcnZhYmxlIHNpZGUgZWZmZWN0cyBhbmQgY2FsbCB0aGUgZmFzdCBw
YXRoIGlmIHRoZXJlIGFyZW4ndCBhbnkuCisgICAgaWYgKCFAaGFzT2JzZXJ2YWJsZVNpZGVFZmZl
Y3RzRm9yUmVnRXhwTWF0Y2gocmVnZXhwKSkKKyAgICAgICAgcmV0dXJuIEByZWdFeHBNYXRjaEZh
c3QuQGNhbGwocmVnZXhwLCBzdHJBcmcpOwogCisgICAgbGV0IHN0ciA9IEB0b1N0cmluZyhzdHJB
cmcpOworCisgICAgaWYgKCFyZWdleHAuZ2xvYmFsKQorICAgICAgICByZXR1cm4gQHJlZ0V4cEV4
ZWMocmVnZXhwLCBzdHIpOworICAgIAogICAgIGxldCB1bmljb2RlID0gcmVnZXhwLnVuaWNvZGU7
CiAgICAgcmVnZXhwLmxhc3RJbmRleCA9IDA7CiAgICAgbGV0IHJlc3VsdExpc3QgPSBbXTsKLSAg
ICBsZXQgZXhlY0Z1bmMgPSByZWdleHAuZXhlYzsKLQotICAgIGlmIChleGVjRnVuYyAhPT0gQFJl
Z0V4cC5wcm90b3R5cGUuQGV4ZWMgJiYgdHlwZW9mIGV4ZWNGdW5jID09PSAiZnVuY3Rpb24iKSB7
Ci0gICAgICAgIC8vIE1hdGNoIHVzaW5nIHRoZSBvdmVycmlkZGVuIGV4ZWMuCi0gICAgICAgIGxl
dCBzdHJpbmdMZW5ndGggPSBzdHJpbmdBcmcubGVuZ3RoOwotCi0gICAgICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgICAgICBsZXQgcmVzdWx0ID0gZXhlY0Z1bmMoc3RyaW5nQXJnKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgewotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdExpc3Q7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICghQGlzT2JqZWN0KHJlc3VsdCkpCi0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlJlZ0V4cC5wcm90b3R5cGUuQEBtYXRjaCBjYWxsIHRv
IFJlZ0V4cC5leGVjIGRpZG4ndCByZXR1cm4gbnVsbCBvciBhbiBvYmplY3QiKTsKLQotICAgICAg
ICAgICAgbGV0IHJlc3VsdFN0cmluZyA9IEB0b1N0cmluZyhyZXN1bHRbMF0pOwotCi0gICAgICAg
ICAgICBpZiAoIXJlc3VsdFN0cmluZy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmVnZXhwLmxh
c3RJbmRleCA9IEBhZHZhbmNlU3RyaW5nSW5kZXgoc3RyaW5nQXJnLCByZWdleHAubGFzdEluZGV4
LCB1bmljb2RlKTsKLQotICAgICAgICAgICAgcmVzdWx0TGlzdC5AcHVzaChyZXN1bHRTdHJpbmcp
OworICAgIGxldCBzdHJpbmdMZW5ndGggPSBzdHIubGVuZ3RoOwogCi0gICAgICAgICAgICBleGVj
RnVuYyA9IHJlZ2V4cC5leGVjOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGxldCByZXN1
bHQgPSBAcmVnRXhwRXhlYyhyZWdleHAsIHN0cik7CisgICAgICAgIAorICAgICAgICBpZiAocmVz
dWx0ID09PSBudWxsKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0TGlzdC5sZW5ndGggPT09IDAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
TGlzdDsKICAgICAgICAgfQotICAgIH0KIAotICAgIHJldHVybiByZWdleHAuQG1hdGNoKHN0cmlu
Z0FyZyk7Ci19CisgICAgICAgIGlmICghQGlzT2JqZWN0KHJlc3VsdCkpCisgICAgICAgICAgICB0
aHJvdyBuZXcgQFR5cGVFcnJvcigiUmVnRXhwLnByb3RvdHlwZS5AQG1hdGNoIGNhbGwgdG8gUmVn
RXhwLmV4ZWMgZGlkbid0IHJldHVybiBudWxsIG9yIGFuIG9iamVjdCIpOwogCi1mdW5jdGlvbiBy
ZWdFeHBFeGVjKHJlZ2V4cCwgc3RyKQotewotICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgbGV0
IHJlc3VsdFN0cmluZyA9IEB0b1N0cmluZyhyZXN1bHRbMF0pOwogCi0gICAgbGV0IGV4ZWMgPSBy
ZWdleHAuZXhlYzsKLSAgICBsZXQgYnVpbHRpbkV4ZWMgPSBAUmVnRXhwLnByb3RvdHlwZS5AZXhl
YzsKLSAgICBpZiAoZXhlYyAhPT0gYnVpbHRpbkV4ZWMgJiYgdHlwZW9mIGV4ZWMgPT09ICJmdW5j
dGlvbiIpIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGV4ZWMuQGNhbGwocmVnZXhwLCBzdHIpOwot
ICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmICFAaXNPYmplY3QocmVzdWx0KSkKLSAgICAg
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJUaGUgcmVzdWx0IG9mIGEgUmVnRXhwIGV4ZWMg
bXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICBpZiAoIXJlc3VsdFN0cmluZy5sZW5ndGgpCisgICAgICAgICAgICByZWdleHAubGFzdElu
ZGV4ID0gQGFkdmFuY2VTdHJpbmdJbmRleChzdHIsIHJlZ2V4cC5sYXN0SW5kZXgsIHVuaWNvZGUp
OworCisgICAgICAgIHJlc3VsdExpc3QuQHB1c2gocmVzdWx0U3RyaW5nKTsKICAgICB9Ci0gICAg
cmV0dXJuIGJ1aWx0aW5FeGVjLkBjYWxsKHJlZ2V4cCwgc3RyKTsKIH0KIAogLy8gMjEuMi41Ljkg
UmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0gKHN0cmluZykKQEAgLTExNiw3ICsxMjksNyBAQCBm
dW5jdGlvbiBzZWFyY2goc3RyQXJnKQogICAgIGxldCByZWdleHAgPSB0aGlzOwogCiAgICAgLy8g
Q2hlY2sgZm9yIG9ic2VydmFibGUgc2lkZSBlZmZlY3RzIGFuZCBjYWxsIHRoZSBmYXN0IHBhdGgg
aWYgdGhlcmUgYXJlbid0IGFueS4KLSAgICBpZiAoQGlzUmVnRXhwT2JqZWN0KHJlZ2V4cCkgJiYg
QHRyeUdldEJ5SWQocmVnZXhwLCAiZXhlYyIpID09PSBAUmVnRXhwLnByb3RvdHlwZS5AZXhlYykK
KyAgICBpZiAoQGlzUmVnRXhwT2JqZWN0KHJlZ2V4cCkgJiYgQHRyeUdldEJ5SWQocmVnZXhwLCAi
ZXhlYyIpID09PSBAcmVnRXhwQnVpbHRpbkV4ZWMpCiAgICAgICAgIHJldHVybiBAcmVnRXhwU2Vh
cmNoRmFzdC5AY2FsbChyZWdleHAsIHN0ckFyZyk7CiAKICAgICAvLyAxLiBMZXQgcnggYmUgdGhl
IHRoaXMgdmFsdWUuCkBAIC0xNDUsNyArMTU4LDcgQEAgZnVuY3Rpb24gc2VhcmNoKHN0ckFyZykK
IGZ1bmN0aW9uIGhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4cFNwbGl0KHJlZ2V4cCkg
ewogICAgIC8vIFRoaXMgaXMgYWNjZXNzZWQgYnkgdGhlIFJlZ0V4cEV4ZWMgaW50ZXJuYWwgZnVu
Y3Rpb24uCiAgICAgbGV0IHJlZ2V4cEV4ZWMgPSBAdHJ5R2V0QnlJZChyZWdleHAsICJleGVjIik7
Ci0gICAgaWYgKHJlZ2V4cEV4ZWMgIT09IEBSZWdFeHAucHJvdG90eXBlLkBleGVjKQorICAgIGlm
IChyZWdleHBFeGVjICE9PSBAcmVnRXhwQnVpbHRpbkV4ZWMpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAogICAgIC8vIFRoaXMgaXMgYWNjZXNzZWQgYnkgc3RlcCA1IGJlbG93LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1N0cmluZ1Byb3RvdHlwZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nUHJvdG90eXBlLmpz
CShyZXZpc2lvbiAxOTk3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3Ry
aW5nUHJvdG90eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyNyArNDYsNiBAQCBmdW5jdGlv
biBtYXRjaChyZWdleHApCiAgICAgcmV0dXJuIGNyZWF0ZWRSZWdFeHBbQHN5bWJvbE1hdGNoXSh0
aGlzU3RyaW5nKTsKIH0KIAotZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkKLXsKLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICBpZiAodGhpcyA9PSBudWxsKSB7Ci0gICAgICAgIGlmICh0aGlzID09PSBu
dWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlN0cmluZy5wcm90b3R5cGUu
c2VhcmNoIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJTdHJpbmcucHJvdG90eXBlLnNlYXJjaCByZXF1aXJlcyB0aGF0IHx0
aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7Ci0gICAgfQotCi0gICAgaWYgKHJlZ2V4cCAhPSBudWxs
KSB7Ci0gICAgICAgIHZhciBzZWFyY2hlciA9IHJlZ2V4cFtAc3ltYm9sU2VhcmNoXTsKLSAgICAg
ICAgaWYgKHNlYXJjaGVyICE9IEB1bmRlZmluZWQpCi0gICAgICAgICAgICByZXR1cm4gc2VhcmNo
ZXIuQGNhbGwocmVnZXhwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2YXIgdGhpc1N0cmluZyA9IEB0
b1N0cmluZyh0aGlzKTsKLSAgICB2YXIgY3JlYXRlZFJlZ0V4cCA9IEByZWdFeHBDcmVhdGUocmVn
ZXhwLCBAdW5kZWZpbmVkKTsKLSAgICByZXR1cm4gY3JlYXRlZFJlZ0V4cFtAc3ltYm9sU2VhcmNo
XSh0aGlzU3RyaW5nKTsKLX0KLQogZnVuY3Rpb24gcmVwZWF0U2xvd1BhdGgoc3RyaW5nLCBjb3Vu
dCkKIHsKICAgICAidXNlIHN0cmljdCI7CkBAIC0xMjYsNiArMTA1LDI3IEBAIGZ1bmN0aW9uIHJl
cGVhdChjb3VudCkKICAgICByZXR1cm4gQHJlcGVhdFNsb3dQYXRoKHN0cmluZywgY291bnQpOwog
fQogCitmdW5jdGlvbiBzZWFyY2gocmVnZXhwKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IGlmICh0aGlzID09IG51bGwpIHsKKyAgICAgICAgaWYgKHRoaXMgPT09IG51bGwpCisgICAgICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiU3RyaW5nLnByb3RvdHlwZS5zZWFyY2ggcmVxdWly
ZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwiKTsKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJy
b3IoIlN0cmluZy5wcm90b3R5cGUuc2VhcmNoIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1
bmRlZmluZWQiKTsKKyAgICB9CisKKyAgICBpZiAocmVnZXhwICE9IG51bGwpIHsKKyAgICAgICAg
dmFyIHNlYXJjaGVyID0gcmVnZXhwW0BzeW1ib2xTZWFyY2hdOworICAgICAgICBpZiAoc2VhcmNo
ZXIgIT0gQHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBzZWFyY2hlci5AY2FsbChyZWdl
eHAsIHRoaXMpOworICAgIH0KKworICAgIHZhciB0aGlzU3RyaW5nID0gQHRvU3RyaW5nKHRoaXMp
OworICAgIHZhciBjcmVhdGVkUmVnRXhwID0gQHJlZ0V4cENyZWF0ZShyZWdleHAsIEB1bmRlZmlu
ZWQpOworICAgIHJldHVybiBjcmVhdGVkUmVnRXhwW0BzeW1ib2xTZWFyY2hdKHRoaXNTdHJpbmcp
OworfQorCiBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KQogewogICAgICJ1c2Ugc3Ry
aWN0IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTk5Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDYgKzQy
Nyw4IEBACiAgICAgbWFjcm8oc2V0SXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oTWFwSXRlcmF0
b3IpIFwKICAgICBtYWNybyhtYXBJdGVyYXRvck5leHQpIFwKKyAgICBtYWNybyhyZWdFeHBCdWls
dGluRXhlYykgXAorICAgIG1hY3JvKHJlZ0V4cE1hdGNoRmFzdCkgXAogICAgIG1hY3JvKHJlZ0V4
cFByb3RvRmxhZ3NHZXR0ZXIpIFwKICAgICBtYWNybyhyZWdFeHBQcm90b0dsb2JhbEdldHRlcikg
XAogICAgIG1hY3JvKHJlZ0V4cFByb3RvSWdub3JlQ2FzZUdldHRlcikgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMTk5Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsNiArMjU3LDEyIEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnNldEdsb2JhbFRoaXMoVk0mIHYKICAgICBtX2dsb2JhbFRoaXMuc2V0KHZtLCB0aGlz
LCBnbG9iYWxUaGlzKTsKIH0KIAorc3RhdGljIEpTT2JqZWN0KiBnZXRCeUlkKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZShiYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwor
ICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KS50b09iamVjdChleGVj
KTsKK30KIAogc3RhdGljIEpTT2JqZWN0KiBnZXRHZXR0ZXJCeUlkKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewpAQCAtNTU3LDYgKzU2
Myw3IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICBKU0Z1
bmN0aW9uKiBwcml2YXRlRnVuY0FwcGVuZE1lbWNweSA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwg
dGhpcywgMCwgU3RyaW5nKCksIGFycmF5UHJvdG9Qcml2YXRlRnVuY0FwcGVuZE1lbWNweSk7CiAg
ICAgSlNGdW5jdGlvbiogcHJpdmF0ZUZ1bmNDb25jYXRTbG93UGF0aCA9IEpTRnVuY3Rpb246OmNy
ZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgYXJyYXlQcm90b3R5cGVDb25jYXRTbG93UGF0aENvZGVH
ZW5lcmF0b3Iodm0pLCB0aGlzKTsKIAorICAgIEpTT2JqZWN0KiByZWdFeHBQcm90b0V4ZWNPYmpl
Y3QgPSBnZXRCeUlkKGV4ZWMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpLCB2bS5wcm9wZXJ0eU5h
bWVzLT5leGVjKTsKICAgICBKU09iamVjdCogcmVnRXhwUHJvdG9GbGFnc0dldHRlck9iamVjdCA9
IGdldEdldHRlckJ5SWQoZXhlYywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5
TmFtZXMtPmZsYWdzKTsKICAgICBKU09iamVjdCogcmVnRXhwUHJvdG9HbG9iYWxHZXR0ZXJPYmpl
Y3QgPSBnZXRHZXR0ZXJCeUlkKGV4ZWMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5nbG9iYWwpOwogICAgIEpTT2JqZWN0KiByZWdFeHBQcm90b0lnbm9yZUNhc2VH
ZXR0ZXJPYmplY3QgPSBnZXRHZXR0ZXJCeUlkKGV4ZWMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgp
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVDYXNlKTsKQEAgLTY0NiwxMCArNjUzLDEzIEBAIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICAgICAgR2xvYmFsUHJv
cGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPnJlZ0V4cFByb3RvVW5pY29kZUdldHRlclByaXZh
dGVOYW1lLCByZWdFeHBQcm90b1VuaWNvZGVHZXR0ZXJPYmplY3QsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKIAogICAgICAgICAvLyBSZWdFeHAucHJvdG90eXBlIGhlbHBlcnMu
CisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5yZWdFeHBCdWls
dGluRXhlY1ByaXZhdGVOYW1lLCByZWdFeHBQcm90b0V4ZWNPYmplY3QsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3Bl
cnR5TmFtZXMtPnJlZ0V4cENyZWF0ZVByaXZhdGVOYW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0s
IHRoaXMsIDIsIFN0cmluZygpLCBlc1NwZWNSZWdFeHBDcmVhdGUsIE5vSW50cmluc2ljKSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaGFzT2JzZXJ2YWJsZVNpZGVFZmZl
Y3RzRm9yUmVnRXhwTWF0Y2hQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGlu
RnVuY3Rpb24odm0sIHJlZ0V4cFByb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclJl
Z0V4cE1hdGNoQ29kZUdlbmVyYXRvcih2bSksIHRoaXMpLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5oYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JSZWdFeHBTcGxpdFBy
aXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgcmVnRXhw
UHJvdG90eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwU3BsaXRDb2RlR2VuZXJh
dG9yKHZtKSwgdGhpcyksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAg
ICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFk
dmFuY2VTdHJpbmdJbmRleFByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5G
dW5jdGlvbih2bSwgcmVnRXhwUHJvdG90eXBlQWR2YW5jZVN0cmluZ0luZGV4Q29kZUdlbmVyYXRv
cih2bSksIHRoaXMpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZWdF
eHBFeGVjUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZt
LCByZWdFeHBQcm90b3R5cGVSZWdFeHBFeGVjQ29kZUdlbmVyYXRvcih2bSksIHRoaXMpLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5m
byh2bS5wcm9wZXJ0eU5hbWVzLT5yZWdFeHBNYXRjaEZhc3RQcml2YXRlTmFtZSwgSlNGdW5jdGlv
bjo6Y3JlYXRlKHZtLCB0aGlzLCAyLCBTdHJpbmcoKSwgcmVnRXhwUHJvdG9GdW5jTWF0Y2hGYXN0
KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+cmVnRXhwU2VhcmNoRmFzdFByaXZhdGVOYW1lLCBK
U0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDIsIFN0cmluZygpLCByZWdFeHBQcm90b0Z1bmNT
ZWFyY2hGYXN0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+cmVnRXhwU3BsaXRGYXN0UHJpdmF0
ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMiwgU3RyaW5nKCksIHJlZ0V4cFBy
b3RvRnVuY1NwbGl0RmFzdCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAxOTk3OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdF
eHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoUHJpdmF0ZShFeGVjU3Rh
dGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVu
Y0NvbXBpbGUoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyR2xvYmFsKEV4ZWNTdGF0ZSopOwpA
QCAtNjksNiArNjgsNyBAQCB2b2lkIFJlZ0V4cFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5jb21waWxlLCByZWdFeHBQcm90b0Z1bmNDb21waWxlLCBEb250RW51bSwgMik7
CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPmV4ZWMsIHJlZ0V4cFByb3RvRnVuY0V4ZWMsIERvbnRFbnVtLCAxLCBS
ZWdFeHBFeGVjSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+dGVzdCwgcmVnRXhwUHJvdG9GdW5j
VGVzdCwgRG9udEVudW0sIDEsIFJlZ0V4cFRlc3RJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBy
ZWdFeHBQcm90b0Z1bmNUb1N0cmluZywgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfR0VU
VEVSKHZtLnByb3BlcnR5TmFtZXMtPmdsb2JhbCwgcmVnRXhwUHJvdG9HZXR0ZXJHbG9iYWwsIERv
bnRFbnVtIHwgQWNjZXNzb3IpOwpAQCAtNzgsMTUgKzc4LDEwIEBAIHZvaWQgUmVnRXhwUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBKU0NfTkFUSVZFX0dFVFRFUih2bS5wcm9wZXJ0
eU5hbWVzLT51bmljb2RlLCByZWdFeHBQcm90b0dldHRlclVuaWNvZGUsIERvbnRFbnVtIHwgQWNj
ZXNzb3IpOwogICAgIEpTQ19OQVRJVkVfR0VUVEVSKHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSwg
cmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2UsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgIEpTQ19O
QVRJVkVfR0VUVEVSKHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzLCByZWdFeHBQcm90b0dldHRlckZs
YWdzLCBEb250RW51bSB8IEFjY2Vzc29yKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tYXRjaFByaXZh
dGVOYW1lKCksIHJlZ0V4cFByb3RvRnVuY01hdGNoUHJpdmF0ZSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHksIDEpOwogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5tYXRjaFN5bWJvbCwgcmVnRXhwUHJvdG90eXBlTWF0
Y2hDb2RlR2VuZXJhdG9yLCBEb250RW51bSk7CiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNlYXJjaFN5bWJvbCwgcmVnRXhwUHJv
dG90eXBlU2VhcmNoQ29kZUdlbmVyYXRvciwgRG9udEVudW0pOwogICAgIEpTQ19CVUlMVElOX0ZV
TkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zcGxpdFN5bWJvbCwg
cmVnRXhwUHJvdG90eXBlU3BsaXRDb2RlR2VuZXJhdG9yLCBEb250RW51bSk7CiAKLSAgICBKU0Z1
bmN0aW9uKiBleGVjRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgMSwgdm0ucHJvcGVydHlOYW1lcy0+ZXhlYy5zdHJpbmcoKSwgcmVnRXhwUHJvdG9GdW5jRXhl
YywgUmVnRXhwRXhlY0ludHJpbnNpYyk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4ZWNQcml2YXRlTmFtZSwgZXhlY0Z1bmN0aW9uLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4ZWMsIGV4ZWNGdW5jdGlvbiwgRG9udEVudW0p
OwotCiAgICAgbV9lbXB0eVJlZ0V4cC5zZXQodm0sIHRoaXMsIFJlZ0V4cDo6Y3JlYXRlKHZtLCAi
IiwgTm9GbGFncykpOwogfQogCkBAIC0xMjMsNyArMTE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNSZWdF
eHBPYmplY3QodGhpc1ZhbHVlKS0+ZXhlYyhleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIHN0cmluZykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFBy
b3RvRnVuY01hdGNoUHJpdmF0ZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoRmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkpCkBAIC0xMzEsNiArMTI2LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIEpTU3RyaW5nKiBz
dHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZ09yTnVsbChleGVjKTsKICAgICBpZiAo
IXN0cmluZykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBpZiAoIWFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpLT5nbG9iYWwoKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUp
LT5leGVjKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RyaW5nKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5tYXRjaEds
b2JhbChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmluZykpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUu
aAkocmV2aXNpb24gMTk5Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgcHJpdmF0ZToK
ICAgICBXcml0ZUJhcnJpZXI8UmVnRXhwPiBtX2VtcHR5UmVnRXhwOwogfTsKIAorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNNYXRjaEZhc3QoRXhlY1N0YXRlKik7
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NlYXJjaEZhc3Qo
RXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVu
Y1NwbGl0RmFzdChFeGVjU3RhdGUqKTsKIAo=
</data>
<flag name="review"
          id="301167"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276900</attachid>
            <date>2016-04-20 23:22:57 -0700</date>
            <delta_ts>2016-04-20 23:34:40 -0700</delta_ts>
            <desc>Fixed typos and adopted suggestion to get exec property from RegExp.prototype in JSGlobalObject.cpp</desc>
            <filename>156832-2.patch</filename>
            <type>text/plain</type>
            <size>16748</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE2LTA0LTIwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFsaWduIFJlZ0V4cFtAQG1hdGNoXSB3aXRoIG90aGVyIEBAIG1ldGhvZHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjgzMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFZhcmlvdXMgY2hhbmdlcyB0
byBhbGlnbiB0aGUgUmVnRXhwW0BAbWF0Y2hdIHdpdGggW0BAc2VhcmNoXSBhbmQgW0BAc3BsaXRd
LgorCisgICAgICAgIE1hZGUgUmVnRXhwLnByb3RvdHlwZS5AZXhlYyBhIGhpZGRlbiBwcm9wZXJ0
eSBvbiB0aGUgZ2xvYmFsIG9iamVjdCBhbmQKKyAgICAgICAgY2FsbGVkIGl0IEByZWdFeHBCdWls
dGluRXhlYyB0byBtYXRjaCB0aGUgbmFtZSBpdCBoYXMgaW4gdGhlIHN0YW5kYXJkLgorICAgICAg
ICBDaGFuZ2VkIGFsbCBwbGFjZXMgdGhhdCB1c2VkIHRoZSBvbGQgbmFtZSB0byB1c2UgdGhlIG5l
dyBvbmUuCisKKyAgICAgICAgTWFkZSB0aGUgbWF0Y2ggZmFzdCBwYXRoIGZ1bmN0aW9uLCB3aGlj
aCB1c2VkIHRvIGJlIGNhbGwgQG1hdGNoLCB0byBiZSBjYWxsZWQKKyAgICAgICAgQHJlZ0V4cE1h
dGNoRmFzdCBhbmQgcHV0IGl0IG9uIHRoZSBnbG9iYWwgb2JqZWN0LiAgQ2hhbmdlZCBpdCB0byBh
bHNvIGhhbmRsZQorICAgICAgICBleHByZXNzaW9ucyBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhl
IGdsb2JhbCBmbGFnLiAgUmVmYWN0b3JlZCB0aGUgYnVpbHRpbgorICAgICAgICBAbWF0Y2ggYWNj
b3JkaW5nbHkuCisKKyAgICAgICAgQWRkZWQgdGhlIGJ1aWx0aW4gZnVuY3Rpb24gQGhhc09ic2Vy
dmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4cE1hdGNoKCkgdGhhdAorICAgICAgICBjaGVja3MgdG8g
c2VlIGlmIHdlIGNhbiB1c2UgdGhlIGZhc3QgcGF0aCBvZiBpZiB3ZSBuZWVkIHRoZSBleHBsaWNp
dCB2ZXJzaW9uLgorCisgICAgICAgIFB1dCB0aGUgbWFpbiBSZWdFeHAgZnVuY3Rpb25zIEBtYXRj
aCwgQHNlYXJjaCBhbmQgQHNwbGl0IGluIGFscGhhYmV0aWNhbAorICAgICAgICBvcmRlciBpbiBS
ZWdFeHBQcm90b3R5cGUuanMuICBEaWQgdGhlIHNhbWUgZm9yIEBtYXRjaCwgQHJlcGVhdCwgQHNl
YXJjaCBhbmQgCisgICAgICAgIEBzcGxpdCBpbiBTdHJpbmdQcm90b3R5cGUuanMuCisgICAgICAg
IAorICAgICAgICAqIGJ1aWx0aW5zL1JlZ0V4cFByb3RvdHlwZS5qczoKKyAgICAgICAgKHJlZ0V4
cEV4ZWMpOgorICAgICAgICAoaGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwTWF0Y2gp
OiBOZXcuCisgICAgICAgIChtYXRjaCk6CisgICAgICAgIChzZWFyY2gpOgorICAgICAgICAoaGFz
T2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwU3BsaXQpOgorICAgICAgICBSZW9yZGVyZWQg
aW4gdGhlIGZpbGUgYW5kIHVwZGF0ZWQgdG8gdXNlIEByZWdFeHBCdWlsdGluRXhlYy4KKworICAg
ICAgICAqIGJ1aWx0aW5zL1N0cmluZ1Byb3RvdHlwZS5qczoKKyAgICAgICAgKG1hdGNoKToKKyAg
ICAgICAgKHJlcGVhdFNsb3dQYXRoKToKKyAgICAgICAgKHJlcGVhdCk6CisgICAgICAgIChzZWFy
Y2gpOgorICAgICAgICAoc3BsaXQpOgorICAgICAgICBSZW9yZGVyZWQgZnVuY3Rpb25zIGluIHRo
ZSBmaWxlLgorCisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6c2V0R2xvYmFsVGhpcyk6CisgICAgICAgIChKU0M6OmdldEJ5SWQpOgorICAgICAgICAo
SlNDOjpnZXRHZXR0ZXJCeUlkKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQp
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnRXhwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnJlZ0V4cFBy
b3RvRnVuY0V4ZWMpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNNYXRjaEZhc3QpOgor
ICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNNYXRjaFByaXZhdGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmg6CisKIDIwMTYtMDQtMjAgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29yZSBnYXJi
YWdlIGNvbGxlY3Rpb24gaXMgbWlzc2luZyBhbiBhdXRvcmVsZWFzZSBwb29sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUmVnRXhwUHJvdG90eXBlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9SZWdFeHBQcm90b3R5cGUuanMJKHJl
dmlzaW9uIDE5OTc5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9SZWdFeHBQ
cm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDM5IEBAIGZ1bmN0aW9uIGFk
dmFuY2VTdHJpbmdJbmRleChzdHJpbmcsIGluZGUKICAgICByZXR1cm4gaW5kZXggKyAyOwogfQog
Ci1mdW5jdGlvbiBtYXRjaChzdHIpCitmdW5jdGlvbiByZWdFeHBFeGVjKHJlZ2V4cCwgc3RyKQor
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGxldCBleGVjID0gcmVnZXhwLmV4ZWM7CisgICAg
bGV0IGJ1aWx0aW5FeGVjID0gQHJlZ0V4cEJ1aWx0aW5FeGVjOworICAgIGlmIChleGVjICE9PSBi
dWlsdGluRXhlYyAmJiB0eXBlb2YgZXhlYyA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICBsZXQg
cmVzdWx0ID0gZXhlYy5AY2FsbChyZWdleHAsIHN0cik7CisgICAgICAgIGlmIChyZXN1bHQgIT09
IG51bGwgJiYgIUBpc09iamVjdChyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIlRoZSByZXN1bHQgb2YgYSBSZWdFeHAgZXhlYyBtdXN0IGJlIG51bGwgb3IgYW4gb2Jq
ZWN0Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBidWlsdGlu
RXhlYy5AY2FsbChyZWdleHAsIHN0cik7Cit9CisKK2Z1bmN0aW9uIGhhc09ic2VydmFibGVTaWRl
RWZmZWN0c0ZvclJlZ0V4cE1hdGNoKHJlZ2V4cCkgeworICAgIC8vIFRoaXMgaXMgYWNjZXNzZWQg
YnkgdGhlIFJlZ0V4cEV4ZWMgaW50ZXJuYWwgZnVuY3Rpb24uCisgICAgbGV0IHJlZ2V4cEV4ZWMg
PSBAdHJ5R2V0QnlJZChyZWdleHAsICJleGVjIik7CisgICAgaWYgKHJlZ2V4cEV4ZWMgIT09IEBy
ZWdFeHBCdWlsdGluRXhlYykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUaGVzZSBh
cmUgYWNjZXNzZWQgYnkgdGhlIGJ1aWx0aW4gZmxhZ3MgZ2V0dGVyLgorICAgIGxldCByZWdleHBH
bG9iYWwgPSBAdHJ5R2V0QnlJZChyZWdleHAsICJnbG9iYWwiKTsKKyAgICBpZiAocmVnZXhwR2xv
YmFsICE9PSBAcmVnRXhwUHJvdG9HbG9iYWxHZXR0ZXIpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGxldCByZWdleHBVbmljb2RlID0gQHRyeUdldEJ5SWQocmVnZXhwLCAidW5pY29kZSIpOwor
ICAgIGlmIChyZWdleHBVbmljb2RlICE9PSBAcmVnRXhwUHJvdG9Vbmljb2RlR2V0dGVyKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiAhQGlzUmVnRXhwT2JqZWN0KHJlZ2V4cCk7
Cit9CisKK2Z1bmN0aW9uIG1hdGNoKHN0ckFyZykKIHsKICAgICAidXNlIHN0cmljdCI7CiAKQEAg
LTUzLDU5ICs4NSw0MCBAQCBmdW5jdGlvbiBtYXRjaChzdHIpCiAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJSZWdFeHAucHJvdG90eXBlLkBAbWF0Y2ggcmVxdWlyZXMgdGhhdCB8dGhpc3wg
YmUgYW4gT2JqZWN0Iik7CiAKICAgICBsZXQgcmVnZXhwID0gdGhpczsKLSAgICBsZXQgc3RyaW5n
QXJnID0gQHRvU3RyaW5nKHN0cik7CiAKLSAgICBpZiAoIXJlZ2V4cC5nbG9iYWwpCi0gICAgICAg
IHJldHVybiByZWdleHAuZXhlYyhzdHJpbmdBcmcpOworICAgIC8vIENoZWNrIGZvciBvYnNlcnZh
YmxlIHNpZGUgZWZmZWN0cyBhbmQgY2FsbCB0aGUgZmFzdCBwYXRoIGlmIHRoZXJlIGFyZW4ndCBh
bnkuCisgICAgaWYgKCFAaGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwTWF0Y2gocmVn
ZXhwKSkKKyAgICAgICAgcmV0dXJuIEByZWdFeHBNYXRjaEZhc3QuQGNhbGwocmVnZXhwLCBzdHJB
cmcpOwogCisgICAgbGV0IHN0ciA9IEB0b1N0cmluZyhzdHJBcmcpOworCisgICAgaWYgKCFyZWdl
eHAuZ2xvYmFsKQorICAgICAgICByZXR1cm4gQHJlZ0V4cEV4ZWMocmVnZXhwLCBzdHIpOworICAg
IAogICAgIGxldCB1bmljb2RlID0gcmVnZXhwLnVuaWNvZGU7CiAgICAgcmVnZXhwLmxhc3RJbmRl
eCA9IDA7CiAgICAgbGV0IHJlc3VsdExpc3QgPSBbXTsKLSAgICBsZXQgZXhlY0Z1bmMgPSByZWdl
eHAuZXhlYzsKLQotICAgIGlmIChleGVjRnVuYyAhPT0gQFJlZ0V4cC5wcm90b3R5cGUuQGV4ZWMg
JiYgdHlwZW9mIGV4ZWNGdW5jID09PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgIC8vIE1hdGNoIHVz
aW5nIHRoZSBvdmVycmlkZGVuIGV4ZWMuCi0gICAgICAgIGxldCBzdHJpbmdMZW5ndGggPSBzdHJp
bmdBcmcubGVuZ3RoOwotCi0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBsZXQg
cmVzdWx0ID0gZXhlY0Z1bmMoc3RyaW5nQXJnKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMaXN0Lmxl
bmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdExpc3Q7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghQGlzT2JqZWN0KHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJy
b3IoIlJlZ0V4cC5wcm90b3R5cGUuQEBtYXRjaCBjYWxsIHRvIFJlZ0V4cC5leGVjIGRpZG4ndCBy
ZXR1cm4gbnVsbCBvciBhbiBvYmplY3QiKTsKLQotICAgICAgICAgICAgbGV0IHJlc3VsdFN0cmlu
ZyA9IEB0b1N0cmluZyhyZXN1bHRbMF0pOwotCi0gICAgICAgICAgICBpZiAoIXJlc3VsdFN0cmlu
Zy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmVnZXhwLmxhc3RJbmRleCA9IEBhZHZhbmNlU3Ry
aW5nSW5kZXgoc3RyaW5nQXJnLCByZWdleHAubGFzdEluZGV4LCB1bmljb2RlKTsKLQotICAgICAg
ICAgICAgcmVzdWx0TGlzdC5AcHVzaChyZXN1bHRTdHJpbmcpOworICAgIGxldCBzdHJpbmdMZW5n
dGggPSBzdHIubGVuZ3RoOwogCi0gICAgICAgICAgICBleGVjRnVuYyA9IHJlZ2V4cC5leGVjOwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGxldCByZXN1bHQgPSBAcmVnRXhwRXhlYyhyZWdl
eHAsIHN0cik7CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7CisgICAg
ICAgICAgICBpZiAocmVzdWx0TGlzdC5sZW5ndGggPT09IDApCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0TGlzdDsKICAgICAgICAgfQotICAg
IH0KIAotICAgIHJldHVybiByZWdleHAuQG1hdGNoKHN0cmluZ0FyZyk7Ci19CisgICAgICAgIGlm
ICghQGlzT2JqZWN0KHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
UmVnRXhwLnByb3RvdHlwZS5AQG1hdGNoIGNhbGwgdG8gUmVnRXhwLmV4ZWMgZGlkbid0IHJldHVy
biBudWxsIG9yIGFuIG9iamVjdCIpOwogCi1mdW5jdGlvbiByZWdFeHBFeGVjKHJlZ2V4cCwgc3Ry
KQotewotICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgbGV0IHJlc3VsdFN0cmluZyA9IEB0b1N0
cmluZyhyZXN1bHRbMF0pOwogCi0gICAgbGV0IGV4ZWMgPSByZWdleHAuZXhlYzsKLSAgICBsZXQg
YnVpbHRpbkV4ZWMgPSBAUmVnRXhwLnByb3RvdHlwZS5AZXhlYzsKLSAgICBpZiAoZXhlYyAhPT0g
YnVpbHRpbkV4ZWMgJiYgdHlwZW9mIGV4ZWMgPT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgbGV0
IHJlc3VsdCA9IGV4ZWMuQGNhbGwocmVnZXhwLCBzdHIpOwotICAgICAgICBpZiAocmVzdWx0ICE9
PSBudWxsICYmICFAaXNPYmplY3QocmVzdWx0KSkKLSAgICAgICAgICAgIHRocm93IG5ldyBAVHlw
ZUVycm9yKCJUaGUgcmVzdWx0IG9mIGEgUmVnRXhwIGV4ZWMgbXVzdCBiZSBudWxsIG9yIGFuIG9i
amVjdCIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoIXJlc3VsdFN0cmlu
Zy5sZW5ndGgpCisgICAgICAgICAgICByZWdleHAubGFzdEluZGV4ID0gQGFkdmFuY2VTdHJpbmdJ
bmRleChzdHIsIHJlZ2V4cC5sYXN0SW5kZXgsIHVuaWNvZGUpOworCisgICAgICAgIHJlc3VsdExp
c3QuQHB1c2gocmVzdWx0U3RyaW5nKTsKICAgICB9Ci0gICAgcmV0dXJuIGJ1aWx0aW5FeGVjLkBj
YWxsKHJlZ2V4cCwgc3RyKTsKIH0KIAogLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNl
YXJjaF0gKHN0cmluZykKQEAgLTExNiw3ICsxMjksNyBAQCBmdW5jdGlvbiBzZWFyY2goc3RyQXJn
KQogICAgIGxldCByZWdleHAgPSB0aGlzOwogCiAgICAgLy8gQ2hlY2sgZm9yIG9ic2VydmFibGUg
c2lkZSBlZmZlY3RzIGFuZCBjYWxsIHRoZSBmYXN0IHBhdGggaWYgdGhlcmUgYXJlbid0IGFueS4K
LSAgICBpZiAoQGlzUmVnRXhwT2JqZWN0KHJlZ2V4cCkgJiYgQHRyeUdldEJ5SWQocmVnZXhwLCAi
ZXhlYyIpID09PSBAUmVnRXhwLnByb3RvdHlwZS5AZXhlYykKKyAgICBpZiAoQGlzUmVnRXhwT2Jq
ZWN0KHJlZ2V4cCkgJiYgQHRyeUdldEJ5SWQocmVnZXhwLCAiZXhlYyIpID09PSBAcmVnRXhwQnVp
bHRpbkV4ZWMpCiAgICAgICAgIHJldHVybiBAcmVnRXhwU2VhcmNoRmFzdC5AY2FsbChyZWdleHAs
IHN0ckFyZyk7CiAKICAgICAvLyAxLiBMZXQgcnggYmUgdGhlIHRoaXMgdmFsdWUuCkBAIC0xNDUs
NyArMTU4LDcgQEAgZnVuY3Rpb24gc2VhcmNoKHN0ckFyZykKIGZ1bmN0aW9uIGhhc09ic2VydmFi
bGVTaWRlRWZmZWN0c0ZvclJlZ0V4cFNwbGl0KHJlZ2V4cCkgewogICAgIC8vIFRoaXMgaXMgYWNj
ZXNzZWQgYnkgdGhlIFJlZ0V4cEV4ZWMgaW50ZXJuYWwgZnVuY3Rpb24uCiAgICAgbGV0IHJlZ2V4
cEV4ZWMgPSBAdHJ5R2V0QnlJZChyZWdleHAsICJleGVjIik7Ci0gICAgaWYgKHJlZ2V4cEV4ZWMg
IT09IEBSZWdFeHAucHJvdG90eXBlLkBleGVjKQorICAgIGlmIChyZWdleHBFeGVjICE9PSBAcmVn
RXhwQnVpbHRpbkV4ZWMpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIC8vIFRoaXMg
aXMgYWNjZXNzZWQgYnkgc3RlcCA1IGJlbG93LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL1N0cmluZ1Byb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nUHJvdG90eXBlLmpzCShyZXZpc2lvbiAxOTk3OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nUHJvdG90eXBlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NiwyNyArNDYsNiBAQCBmdW5jdGlvbiBtYXRjaChyZWdleHApCiAgICAg
cmV0dXJuIGNyZWF0ZWRSZWdFeHBbQHN5bWJvbE1hdGNoXSh0aGlzU3RyaW5nKTsKIH0KIAotZnVu
Y3Rpb24gc2VhcmNoKHJlZ2V4cCkKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAodGhp
cyA9PSBudWxsKSB7Ci0gICAgICAgIGlmICh0aGlzID09PSBudWxsKQotICAgICAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIlN0cmluZy5wcm90b3R5cGUuc2VhcmNoIHJlcXVpcmVzIHRoYXQg
fHRoaXN8IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJTdHJp
bmcucHJvdG90eXBlLnNlYXJjaCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVk
Iik7Ci0gICAgfQotCi0gICAgaWYgKHJlZ2V4cCAhPSBudWxsKSB7Ci0gICAgICAgIHZhciBzZWFy
Y2hlciA9IHJlZ2V4cFtAc3ltYm9sU2VhcmNoXTsKLSAgICAgICAgaWYgKHNlYXJjaGVyICE9IEB1
bmRlZmluZWQpCi0gICAgICAgICAgICByZXR1cm4gc2VhcmNoZXIuQGNhbGwocmVnZXhwLCB0aGlz
KTsKLSAgICB9Ci0KLSAgICB2YXIgdGhpc1N0cmluZyA9IEB0b1N0cmluZyh0aGlzKTsKLSAgICB2
YXIgY3JlYXRlZFJlZ0V4cCA9IEByZWdFeHBDcmVhdGUocmVnZXhwLCBAdW5kZWZpbmVkKTsKLSAg
ICByZXR1cm4gY3JlYXRlZFJlZ0V4cFtAc3ltYm9sU2VhcmNoXSh0aGlzU3RyaW5nKTsKLX0KLQog
ZnVuY3Rpb24gcmVwZWF0U2xvd1BhdGgoc3RyaW5nLCBjb3VudCkKIHsKICAgICAidXNlIHN0cmlj
dCI7CkBAIC0xMjYsNiArMTA1LDI3IEBAIGZ1bmN0aW9uIHJlcGVhdChjb3VudCkKICAgICByZXR1
cm4gQHJlcGVhdFNsb3dQYXRoKHN0cmluZywgY291bnQpOwogfQogCitmdW5jdGlvbiBzZWFyY2go
cmVnZXhwKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICh0aGlzID09IG51bGwpIHsK
KyAgICAgICAgaWYgKHRoaXMgPT09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVF
cnJvcigiU3RyaW5nLnByb3RvdHlwZS5zZWFyY2ggcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJl
IG51bGwiKTsKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlN0cmluZy5wcm90b3R5cGUu
c2VhcmNoIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmluZWQiKTsKKyAgICB9CisK
KyAgICBpZiAocmVnZXhwICE9IG51bGwpIHsKKyAgICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhw
W0BzeW1ib2xTZWFyY2hdOworICAgICAgICBpZiAoc2VhcmNoZXIgIT0gQHVuZGVmaW5lZCkKKyAg
ICAgICAgICAgIHJldHVybiBzZWFyY2hlci5AY2FsbChyZWdleHAsIHRoaXMpOworICAgIH0KKwor
ICAgIHZhciB0aGlzU3RyaW5nID0gQHRvU3RyaW5nKHRoaXMpOworICAgIHZhciBjcmVhdGVkUmVn
RXhwID0gQHJlZ0V4cENyZWF0ZShyZWdleHAsIEB1bmRlZmluZWQpOworICAgIHJldHVybiBjcmVh
dGVkUmVnRXhwW0BzeW1ib2xTZWFyY2hdKHRoaXNTdHJpbmcpOworfQorCiBmdW5jdGlvbiBzcGxp
dChzZXBhcmF0b3IsIGxpbWl0KQogewogICAgICJ1c2Ugc3RyaWN0IjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNp
b24gMTk5Nzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRp
ZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDYgKzQyNyw4IEBACiAgICAgbWFjcm8oc2V0
SXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oTWFwSXRlcmF0b3IpIFwKICAgICBtYWNybyhtYXBJ
dGVyYXRvck5leHQpIFwKKyAgICBtYWNybyhyZWdFeHBCdWlsdGluRXhlYykgXAorICAgIG1hY3Jv
KHJlZ0V4cE1hdGNoRmFzdCkgXAogICAgIG1hY3JvKHJlZ0V4cFByb3RvRmxhZ3NHZXR0ZXIpIFwK
ICAgICBtYWNybyhyZWdFeHBQcm90b0dsb2JhbEdldHRlcikgXAogICAgIG1hY3JvKHJlZ0V4cFBy
b3RvSWdub3JlQ2FzZUdldHRlcikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTk5Nzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTcsNyArMjU3LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6c2V0R2xvYmFsVGhpcyhW
TSYgdgogICAgIG1fZ2xvYmFsVGhpcy5zZXQodm0sIHRoaXMsIGdsb2JhbFRoaXMpOwogfQogCi0K
IHN0YXRpYyBKU09iamVjdCogZ2V0R2V0dGVyQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWUoYmFzZSk7CkBAIC02NDYsMTAgKzY0NSwxMyBAQCBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5w
cm9wZXJ0eU5hbWVzLT5yZWdFeHBQcm90b1VuaWNvZGVHZXR0ZXJQcml2YXRlTmFtZSwgcmVnRXhw
UHJvdG9Vbmljb2RlR2V0dGVyT2JqZWN0LCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25s
eSksCiAKICAgICAgICAgLy8gUmVnRXhwLnByb3RvdHlwZSBoZWxwZXJzLgorICAgICAgICBHbG9i
YWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+cmVnRXhwQnVpbHRpbkV4ZWNQcml2YXRl
TmFtZSwgbV9yZWdFeHBQcm90b3R5cGUtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
ZXhlYyksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPnJlZ0V4cENyZWF0ZVByaXZhdGVOYW1lLCBK
U0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDIsIFN0cmluZygpLCBlc1NwZWNSZWdFeHBDcmVh
dGUsIE5vSW50cmluc2ljKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
aGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwTWF0Y2hQcml2YXRlTmFtZSgpLCBKU0Z1
bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIHJlZ0V4cFByb3RvdHlwZUhhc09ic2Vy
dmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4cE1hdGNoQ29kZUdlbmVyYXRvcih2bSksIHRoaXMpLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5
SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5oYXNPYnNlcnZhYmxlU2lkZUVm
ZmVjdHNGb3JSZWdFeHBTcGxpdFByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0
aW5GdW5jdGlvbih2bSwgcmVnRXhwUHJvdG90eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9y
UmVnRXhwU3BsaXRDb2RlR2VuZXJhdG9yKHZtKSwgdGhpcyksIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmFkdmFuY2VTdHJpbmdJbmRleFByaXZhdGVOYW1lKCksIEpTRnVu
Y3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgcmVnRXhwUHJvdG90eXBlQWR2YW5jZVN0
cmluZ0luZGV4Q29kZUdlbmVyYXRvcih2bSksIHRoaXMpLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5yZWdFeHBFeGVjUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3Jl
YXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCByZWdFeHBQcm90b3R5cGVSZWdFeHBFeGVjQ29kZUdlbmVy
YXRvcih2bSksIHRoaXMpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5yZWdFeHBNYXRjaEZhc3RQ
cml2YXRlTmFtZSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAyLCBTdHJpbmcoKSwgcmVn
RXhwUHJvdG9GdW5jTWF0Y2hGYXN0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
LAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+cmVnRXhwU2Vh
cmNoRmFzdFByaXZhdGVOYW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDIsIFN0cmlu
ZygpLCByZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+
cmVnRXhwU3BsaXRGYXN0UHJpdmF0ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywg
MiwgU3RyaW5nKCksIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdCksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxOTk3OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSopOwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3Rh
dGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVu
Y01hdGNoUHJpdmF0ZShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVy
R2xvYmFsKEV4ZWNTdGF0ZSopOwpAQCAtNjksNiArNjgsNyBAQCB2b2lkIFJlZ0V4cFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jb21waWxlLCByZWdFeHBQcm90b0Z1bmND
b21waWxlLCBEb250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmV4ZWMsIHJlZ0V4cFByb3RvRnVu
Y0V4ZWMsIERvbnRFbnVtLCAxLCBSZWdFeHBFeGVjSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZF
X0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+
dGVzdCwgcmVnRXhwUHJvdG9GdW5jVGVzdCwgRG9udEVudW0sIDEsIFJlZ0V4cFRlc3RJbnRyaW5z
aWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPnRvU3RyaW5nLCByZWdFeHBQcm90b0Z1bmNUb1N0cmluZywgRG9udEVudW0sIDAp
OwogICAgIEpTQ19OQVRJVkVfR0VUVEVSKHZtLnByb3BlcnR5TmFtZXMtPmdsb2JhbCwgcmVnRXhw
UHJvdG9HZXR0ZXJHbG9iYWwsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwpAQCAtNzgsMTUgKzc4LDEw
IEBAIHZvaWQgUmVnRXhwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBKU0NfTkFU
SVZFX0dFVFRFUih2bS5wcm9wZXJ0eU5hbWVzLT51bmljb2RlLCByZWdFeHBQcm90b0dldHRlclVu
aWNvZGUsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgIEpTQ19OQVRJVkVfR0VUVEVSKHZtLnBy
b3BlcnR5TmFtZXMtPnNvdXJjZSwgcmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2UsIERvbnRFbnVtIHwg
QWNjZXNzb3IpOwogICAgIEpTQ19OQVRJVkVfR0VUVEVSKHZtLnByb3BlcnR5TmFtZXMtPmZsYWdz
LCByZWdFeHBQcm90b0dldHRlckZsYWdzLCBEb250RW51bSB8IEFjY2Vzc29yKTsKLSAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5tYXRjaFByaXZhdGVOYW1lKCksIHJlZ0V4cFByb3RvRnVuY01hdGNoUHJpdmF0
ZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHksIDEpOwogICAgIEpTQ19CVUlMVElO
X0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5tYXRjaFN5bWJv
bCwgcmVnRXhwUHJvdG90eXBlTWF0Y2hDb2RlR2VuZXJhdG9yLCBEb250RW51bSk7CiAgICAgSlND
X0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNl
YXJjaFN5bWJvbCwgcmVnRXhwUHJvdG90eXBlU2VhcmNoQ29kZUdlbmVyYXRvciwgRG9udEVudW0p
OwogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5zcGxpdFN5bWJvbCwgcmVnRXhwUHJvdG90eXBlU3BsaXRDb2RlR2VuZXJhdG9yLCBE
b250RW51bSk7CiAKLSAgICBKU0Z1bmN0aW9uKiBleGVjRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgdm0ucHJvcGVydHlOYW1lcy0+ZXhlYy5zdHJpbmco
KSwgcmVnRXhwUHJvdG9GdW5jRXhlYywgUmVnRXhwRXhlY0ludHJpbnNpYyk7Ci0gICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4ZWNQcml2YXRlTmFt
ZSwgZXhlY0Z1bmN0aW9uLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4ZWMsIGV4
ZWNGdW5jdGlvbiwgRG9udEVudW0pOwotCiAgICAgbV9lbXB0eVJlZ0V4cC5zZXQodm0sIHRoaXMs
IFJlZ0V4cDo6Y3JlYXRlKHZtLCAiIiwgTm9GbGFncykpOwogfQogCkBAIC0xMjMsNyArMTE4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+ZXhlYyhleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cmluZykpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoUHJpdmF0ZShFeGVjU3RhdGUqIGV4ZWMp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY01hdGNoRmFzdChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyhSZWdFeHBPYmplY3Q6OmluZm8oKSkp
CkBAIC0xMzEsNiArMTI2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90bwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZ09y
TnVsbChleGVjKTsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpZiAoIWFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSkt
PnJlZ0V4cCgpLT5nbG9iYWwoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1Jl
Z0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgc3RyaW5nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVj
dCh0aGlzVmFsdWUpLT5tYXRjaEdsb2JhbChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIHN0cmluZykpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuaAkocmV2aXNpb24gMTk5Nzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8UmVnRXhwPiBtX2VtcHR5UmVn
RXhwOwogfTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNN
YXRjaEZhc3QoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvRnVuY1NlYXJjaEZhc3QoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqKTsKIAo=
</data>
<flag name="review"
          id="301170"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>