<?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>22385</bug_id>
          
          <creation_ts>2008-11-20 10:46:57 -0800</creation_ts>
          <short_desc>Lazily reparse FunctionBodyNodes on first execution.</short_desc>
          <delta_ts>2008-11-20 15:24:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99505</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-20 10:46:57 -0800</bug_when>
    <thetext>We can save a lot of memory if we don&apos;t keep the AST under FunctionBodyNodes around all the time and instead reparse for a tempory AST when need to generate bytecode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99515</commentid>
    <comment_count>1</comment_count>
      <attachid>25320</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-20 11:36:11 -0800</bug_when>
    <thetext>Created attachment 25320
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99524</commentid>
    <comment_count>2</comment_count>
      <attachid>25320</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-20 11:50:42 -0800</bug_when>
    <thetext>Comment on attachment 25320
patch

&gt; +//Program_NoNode:
&gt; +//    /* not in spec */
&gt; +//    | SourceElements_NoNode
&gt; +//;

Lets not check that in.

&gt;  bool Lexer::isIdentStart(int c)
&gt;  {
&gt; -    return (category(c) &amp; (Letter_Uppercase | Letter_Lowercase | Letter_Titlecase | Letter_Modifier | Letter_Other))
&gt; -        || c == &apos;$&apos; || c == &apos;_&apos;;
&gt; +    return isASCIIAlpha(c) || c == &apos;$&apos; || c == &apos;_&apos; || (category(c) &amp; (Letter_Uppercase | Letter_Lowercase | Letter_Titlecase | Letter_Modifier | Letter_Other));
&gt;  }

A more efficient version of this would call &quot;category&quot; only if the character is non-ASCII. A patch I wrote a while back added isASCII to &lt;wtf/ASCIICType.h&gt; for just this sort of use.

I think you should land these smaller independent enhancements to Lexer separately.

&gt;  static bool isDecimalDigit(int c)
&gt;  {
&gt; -    return (c &gt;= &apos;0&apos; &amp;&amp; c &lt;= &apos;9&apos;);
&gt; +    return isASCIIDigit(c);
&gt;  }

I don&apos;t see the point of making a function call for this every time. Could we just eliminate this function instead and use isASCIIDigit directly? Or make it inline?

&gt;  bool Lexer::isHexDigit(int c)
&gt;  {
&gt; -    return (c &gt;= &apos;0&apos; &amp;&amp; c &lt;= &apos;9&apos;
&gt; -        || c &gt;= &apos;a&apos; &amp;&amp; c &lt;= &apos;f&apos;
&gt; -        || c &gt;= &apos;A&apos; &amp;&amp; c &lt;= &apos;F&apos;);
&gt; +    return isASCIIHexDigit(c); 
&gt;  }
&gt;  
&gt;  bool Lexer::isOctalDigit(int c)
&gt;  {
&gt; -    return (c &gt;= &apos;0&apos; &amp;&amp; c &lt;= &apos;7&apos;);
&gt; +    return isASCIIOctalDigit(c);
&gt;  }

Same comment.

&gt; +    for (size_t i = 0; i &lt; size; ++i)
&gt; +        releaser.release(m_data-&gt;m_children[i]);
&gt; +}
&gt; +
&gt; +
&gt;  // ------------------------------ ProgramNode -----------------------------

Extra blank line here.

&gt; +    // Eval code needs to hang on to its declaration stacks to keep declaration info alive until Interpreter::execute time,
&gt; +    // so the entire ScopeNodeData cannot be destoyed.
&gt; +    children().shrinkCapacity(0);

Is this the right idiom? Didn&apos;t Maciej change clear() to do this?

&gt; Index: parser/Nodes.h
&gt; ===================================================================
&gt; --- parser/Nodes.h	(revision 38582)
&gt; +++ parser/Nodes.h	(working copy)
&gt; @@ -170,6 +170,7 @@ namespace JSC {
&gt;          virtual bool isResolveNode() const JSC_FAST_CALL { return false; }
&gt;          virtual bool isBracketAccessorNode() const JSC_FAST_CALL { return false; }
&gt;          virtual bool isDotAccessorNode() const JSC_FAST_CALL { return false; }
&gt; +        virtual bool isFuncExprNode() const JSC_FAST_CALL { return false; } 
&gt;  
&gt;          virtual ExpressionNode* stripUnaryPlus() { return this; }
&gt;  
&gt; @@ -191,6 +192,7 @@ namespace JSC {
&gt;  
&gt;          virtual bool isEmptyStatement() const JSC_FAST_CALL { return false; }
&gt;          virtual bool isReturnNode() const JSC_FAST_CALL { return false; }
&gt; +        virtual bool isExprStatementNode() const JSC_FAST_CALL { return false; }

I don&apos;t think this needs &quot;Node&quot; in its name.

&gt; +        void setData(ScopeNodeData* data) { m_data.set(data); }

This should take an auto_ptr argument, in my opinion. We probably also want to name it adoptData rather than setData.

&gt; +static FunctionBodyNode* getFunctionBody(ProgramNode* program)

No need for &quot;get&quot; in the name of this function. You can just name the local variable &quot;body&quot; to avoid the conflict.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99546</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-20 14:41:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/6390179&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99549</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-20 15:24:16 -0800</bug_when>
    <thetext>Fixed in r38635.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25320</attachid>
            <date>2008-11-20 11:36:11 -0800</date>
            <delta_ts>2008-11-20 11:50:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>final.diff</filename>
            <type>text/plain</type>
            <size>48977</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NjE2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTkgQEAKKzIwMDgtMTEt
MjAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMzg1CisgICAgICAgIExhemlseSByZXBhcnNlIEZ1bmN0aW9u
Qm9keU5vZGVzIG9uIGZpcnN0IGV4ZWN1dGlvbi4KKworICAgICAgICAtIFNhdmVzIDU3TUIgb24g
TWVtYnVzdGVyIGhlYWQuCisgICAgICAgIC0gLjQlIHByb2dyZXNzaW9uIG9uIFN1bnNwaWRlci4K
KworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6IFJlbW92ZSB2ZWN0b3Igc2hyaW5r
aW5nIHNpbmNlIHRoaXMgaXMgbm93CisgICAgICAgIGhhbmRsZWQgYnkgZGVzdHJveWluZyB0aGUg
U2NvcGVOb2RlRGF0YSBhZnRlciBnZW5lcmF0aW9uLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVy
L1NlZ21lbnRlZFZlY3Rvci5oOgorICAgICAgICAoSlNDOjpTZWdtZW50ZWRWZWN0b3I6OnNocmlu
ayk6IEZpeGVkIGJ1ZyB3aGVyZSBtX3NpemUgd291bGQgbm90IGJlCisgICAgICAgIHNldCB3aGVu
IHNocmlua2luZyB0byAwLgorCisgICAgICAgICogcGFyc2VyL0dyYW1tYXIueTogQWRkIGFsdGVy
bmF0ZSBOb05vZGUgdmVyc2lvbiBvZiB0aGUgZ3JhbW1hcgorICAgICAgICB0aGF0IGRvZXMgbm90
IGNyZWF0ZSBub2Rlcy4gIFRoaXMgaXMgdXNlZCB0byBsYXppbHkgY3JlYXRlIEZ1bmN0aW9uQm9k
eU5vZGVzCisgICAgICAgIG9uIGZpcnN0IGV4ZWN1dGlvbi4KKworICAgICAgICAqIHBhcnNlci9M
ZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjpMZXhlcik6CisgICAgICAgIChKU0M6Okxl
eGVyOjpzZXRDb2RlKTogRml4IGJ1ZyB3aGVyZSBvbiByZXBhcnNlLCB0aGUgTGV4ZXIgd2FzIGNv
bmZ1c2VkIGFib3V0CisgICAgICAgIHdoYXQgcG9zaXRpb24gYW5kIGxlbmd0aCBtZWFudC4gUG9z
aXRpb24gaXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsCisgICAgICAgIGRh
dGEgYnVmZmVyIChpbXBvcnRhbnQgZm9yIGdldHRpbmcgY29ycmVjdCBsaW5lL2NvbHVtbiBpbmZv
cm1hdGlvbikgYW5kIGxlbmd0aAorICAgICAgICB0aGUgZW5kIG9mZnNldCBpbiB0aGUgb3JpZ2lu
YWwgYnVmZmVyLgorICAgICAgICAoSlNDOjpMZXhlcjo6aXNJZGVudFN0YXJ0KTogVGVzdCBmb3Ig
QVNDSUlBbHBoYSBmaXJzdCBmb3IgYSBzbWFsbCBzcGVlZHVwLgorICAgICAgICAoSlNDOjpMZXhl
cjo6aXNJZGVudFBhcnQpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6aXNEZWNpbWFsRGlnaXQpOiBV
c2UgdmVyc2lvbiBpbiBBU0NJSUNUeXBlLmgKKyAgICAgICAgKEpTQzo6TGV4ZXI6OmlzSGV4RGln
aXQpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OmlzT2N0YWxEaWdpdCk6IERpdHRvLgor
ICAgICAgICAoSlNDOjpMZXhlcjo6Y2xlYXIpOiBSZXNpemUgdGhlIG1faWRlbnRpZmllcnMgU2Vn
bWVudGVkVmVjdG9yIHRvIGluaXRpYWwKKyAgICAgICAgY2FwYWNpdHkuCisgICAgICAgICogcGFy
c2VyL0xleGVyLmg6IFJlbW92ZSB1bnVzZWQgbV9zdHJpbmdzIHZlY3Rvci4gTWFrZSBtX2lkZW50
aWZpZXJzCisgICAgICAgIGEgU2VnbWVudGVkVmVjdG9yPElkZW50aWZpZXI+IHRvIGF2b2lkIGFs
bG9jYXRpbmcgYSBuZXcgSWRlbnRpZmllciogZm9yCisgICAgICAgIGVhY2ggaWRlbnRpZmllciBm
b3VuZC4gIFRoZSBTZWdtZW50ZWRWZWN0b3IgaXMgbmVlZCBzbyB3ZSBjYW4gcGFzc2VzIAorICAg
ICAgICByZWZlcmVuY2VzIHRvIHRoZSBJZGVudGlmaWVyIHRvIHRoZSBwYXJzZXIsIHdoaWNoIHJl
bWFpbiB2YWxpZCBldmVuIHdoZW4KKyAgICAgICAgdGhlIHZlY3RvciBpcyByZXNpemVkLgorICAg
ICAgICAoSlNDOjpMZXhlcjo6c291cmNlQ29kZSk6IFBvc2l0aW9ucyBhcmUgcmVsYXRpdmUgdG8g
dGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLgorICAgICAgICAoSlNDOjpMZXhlcjo6bWFrZUlk
ZW50aWZpZXIpOiBJbmxpbmUgYW5kIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgYWRkZWQKKyAg
ICAgICAgSWRlbnRpZmllci4KKworICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAg
IChKU0M6OlNjb3BlTm9kZURhdGE6OlNjb3BlTm9kZURhdGEpOiBNb3ZlIGluaXRpYWxpemF0aW9u
IG9mIFNjb3BlTm9kZSBkYXRhIGhlcmUuCisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6U2NvcGVO
b2RlKTogQWRkIGNvbnN0cnVjdG9yIHRoYXQgb25seSBzZXRzIHRoZSBKU0dsb2JhbERhdGEKKyAg
ICAgICAgZm9yIEZ1bmN0aW9uQm9keU5vZGUgc3R1YnMuCisgICAgICAgIChKU0M6OlNjb3BlTm9k
ZTo6flNjb3BlTm9kZSk6IFJlbGVhc2UgbV9jaGlsZHJlbiBub3cgdGhhdCB3ZSBkb24ndCBpbmhl
cml0IGZyb20KKyAgICAgICAgQmxvY2tOb2RlLgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OnJl
bGVhc2VOb2Rlcyk6IERpdHRvLgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Z2VuZXJhdGVCeXRl
Y29kZSk6IE9ubHkgc2hyaW5rIG1fY2hpbGRyZW4sIGFzIHdlIG5lZWQgdG8ga2VlcCBhcm91bmQK
KyAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIGRhdGEuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9k
eU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOiBBZGQgY29uc3RydWN0b3IgdGhhdCBvbmx5IHNldHMg
dGhlCisgICAgICAgIEpTR2xvYmFsRGF0YS4gCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5v
ZGU6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpnZW5l
cmF0ZUJ5dGVjb2RlKTogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgZGF0YSwgZG8gYSByZXBhcnNlCisg
ICAgICAgIHRvIGNvbnN0cnVjdCBpdC4gVGhlbiBhZnRlciBnZW5lcmF0aW9uLCBkZXN0cm95IHRo
ZSBkYXRhLgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6Z2VuZXJhdGVCeXRlY29kZSk6IEFm
dGVyIGdlbmVyYXRpb24sIGRlc3Ryb3kgdGhlIEFTVCBkYXRhLgorICAgICAgICAqIHBhcnNlci9O
b2Rlcy5oOgorICAgICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6KTogQWRkIGlzRnVuY0V4cHJO
b2RlIGZvciBGdW5jdGlvbkNvbnN0cnVjdG9yLgorICAgICAgICAoSlNDOjpTdGF0ZW1lbnROb2Rl
OjopOiBBZGQgaXNFeHByU3RhdGVtZW50Tm9kZSBmb3IgRnVuY3Rpb25Db25zdHJ1Y3Rvci4KKyAg
ICAgICAgKEpTQzo6RXhwclN0YXRlbWVudE5vZGU6Oik6IERpdHRvLgorICAgICAgICAoSlNDOjpF
eHByU3RhdGVtZW50Tm9kZTo6ZXhwcik6IEFkZCBhY2Nlc3NvciBmb3IgRnVuY3Rpb25Db25zdHJ1
Y3Rvci4KKyAgICAgICAgKEpTQzo6RnVuY0V4cHJOb2RlOjopOiBBZGQgaXNGdW5jRXhwck5vZGUg
Zm9yIEZ1bmN0aW9uQ29uc3RydWN0b3IKKworICAgICAgICAoSlNDOjpTY29wZU5vZGU6OnNldERh
dGEpOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OmRhdGEpOgorICAgICAgICAoSlNDOjpTY29w
ZU5vZGU6OmRlc3Ryb3lEYXRhKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzZXRGZWF0dXJl
cyk6IEFkZGVkLgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OnZhclN0YWNrKToKKyAgICAgICAg
KEpTQzo6U2NvcGVOb2RlOjpmdW5jdGlvblN0YWNrKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
OjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6bmVlZGVkQ29uc3RhbnRzKToK
KyAgICAgICAgRmFjdG9yIG1fdmFyU3RhY2ssIG1fZnVuY3Rpb25TdGFjaywgbV9jaGlsZHJlbiBh
bmQgbV9udW1Db25zdGFudHMgaW50byBTY29wZU5vZGVEYXRhLgorCisgICAgICAgICogcGFyc2Vy
L1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjo6cmVwYXJzZSk6IFJlcGFyc2UgdGhl
IFNvdXJjZUNvZGUgaW4gdGhlIEZ1bmN0aW9uQm9keU5vZGUgYW5kIHNldAorICAgICAgICBzZXQg
dXAgdGhlIFNjb3BlTm9kZURhdGEgZm9yIGl0LiAKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6
CisKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZS5oOgorICAgICAgICAoSlNDOjpTb3VyY2VD
b2RlOjplbmRPZmZzZXQpOiBBZGRlZCBmb3IgdXNlIGluIHRoZSBsZXhlci4KKworICAgICAgICAq
IHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmdldEZ1bmN0
aW9uQm9keSk6IEFzc3VtaW5nIGEgUHJvZ3JhbU5vZGUgd2l0aCBvbmUgRnVuY3Rpb25FeHByZXNz
aW9uIGluIGl0LAorICAgICAgICBnZXQgdGhlIEZ1bmN0aW9uQm9keU5vZGUuICBBbnkgaXNzdWVz
IHNpZ25pZmllcyBhIHBhcnNlIGZhaWx1cmUgaW4gY29uc3RydWN0RnVuY3Rpb24uIAorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RGdW5jdGlvbik6IE1ha2UgcGFyc2luZyBmdW5jdGlvbnMgaW4gdGhl
IGZvcm0gbmV3IEZ1bmN0aW9uKCIiKSwgZWFzaWVyCisgICAgICAgIGJ5IGNvbmNhdGVuYXRpbmcg
dGhlIHN0cmluZ3MgdG9nZXRoZXIgKHdpdGggc29tZSBnbHVlKSBhbmQgcGFyc2luZyB0aGUgZnVu
Y3Rpb24gZXhwcmVzc2lvbgorICAgICAgICBhcyBhIFByb2dyYW1Ob2RlIGZyb20gd2hpY2ggd2Ug
Y2FuIHJlY2VpdmUgdGhlIEZ1bmN0aW9uQm9keU5vZGUuIFRoaXMgaGFzIHRoZSBhZGRlZCBiZW5l
Zml0CisgICAgICAgIG9mIG5vdCBoYXZpbmcgc3BlY2lhbCBwYXJzaW5nIGNvZGUgZm9yIHRoZSBh
cmd1bWVudHMgYW5kIGxhemlseSBjb25zdHJ1Y3RpbmcgdGhlIAorICAgICAgICBGdW5jdGlvbkJv
ZHlOb2RlJ3MgQVNUIG9uIGZpcnN0IGV4ZWN1dGlvbi4KKworICAgICAgICAqIHJ1bnRpbWUvSWRl
bnRpZmllci5oOgorICAgICAgICAoSlNDOjpvcGVyYXRvciE9KTogQWRkZWQuCisKIDIwMDgtMTEt
MTkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMzg1ODIpCisrKyBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzksMTIgKzEzOSw2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKCkKICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCkpOwogICAgIH0KICNlbmRpZgotCi0gICAgbV9zY29wZU5vZGUtPmNoaWxkcmVuKCkuc2hy
aW5rQ2FwYWNpdHkoMCk7Ci0gICAgaWYgKG1fY29kZVR5cGUgIT0gRXZhbENvZGUpIHsgLy8gZXZh
bCBjb2RlIG5lZWRzIHRvIGhhbmcgb24gdG8gaXRzIGRlY2xhcmF0aW9uIHN0YWNrcyB0byBrZWVw
IGRlY2xhcmF0aW9uIGluZm8gYWxpdmUgdW50aWwgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUgdGltZS4K
LSAgICAgICAgbV9zY29wZU5vZGUtPnZhclN0YWNrKCkuc2hyaW5rQ2FwYWNpdHkoMCk7Ci0gICAg
ICAgIG1fc2NvcGVOb2RlLT5mdW5jdGlvblN0YWNrKCkuc2hyaW5rQ2FwYWNpdHkoMCk7Ci0gICAg
fQogICAgIAogICAgIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuc2hyaW5rVG9GaXQoKTsKICAg
ICBtX2NvZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5zaHJpbmtUb0ZpdCgpOwpJ
bmRleDogYnl0ZWNvbXBpbGVyL1NlZ21lbnRlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJ5dGVj
b21waWxlci9TZWdtZW50ZWRWZWN0b3IuaAkocmV2aXNpb24gMzg1ODIpCisrKyBieXRlY29tcGls
ZXIvU2VnbWVudGVkVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1fc2VnbWVudHNbaV07
CiAgICAgICAgICAgICAgICAgbV9zZWdtZW50cy5yZXNpemUoMSk7CiAgICAgICAgICAgICAgICAg
bV9pbmxpbmVTZWdtZW50LnJlc2l6ZSgwKTsKKyAgICAgICAgICAgICAgICBtX3NpemUgPSBzaXpl
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApJbmRleDogcGFyc2Vy
L0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYXJzZXIvR3JhbW1hci55CShyZXZpc2lvbiAzODU4
MikKKysrIHBhcnNlci9HcmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMsMTAg
QEAgc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFRvVmFyRGVjbGFyYXRpbwogJXR5cGUgPHByb3Bl
cnR5TGlzdD4gICAgUHJvcGVydHlMaXN0CiAlJQogCisvLyBGSVhNRTogVGhlcmUgYXJlIGN1cnJl
bnRseSB0d28gdmVyc2lvbnMgb2YgdGhlIGdyYW1tYXIgaW4gdGhpcyBmaWxlLCB0aGUgbm9ybWFs
IG9uZSwgYW5kIHRoZSBOb05vZGVzIHZlcnNpb24gdXNlZCBmb3IKKy8vIGxhenkgcmVjb21waWxh
dGlvbiBvZiBGdW5jdGlvbkJvZHlOb2Rlcy4gIFdlIHNob3VsZCBtb3ZlIHRvIGdlbmVyYXRpbmcg
dGhlIHR3byB2ZXJzaW9ucyBmcm9tIGEgc2NyaXB0IHRvIGF2b2lkIGJ1Z3MuCisvLyBJbiB0aGUg
bWVhbiB0aW1lLCBtYWtlIHN1cmUgdG8gbWFrZSBhbnkgY2hhbmdlcyB0byB0aGUgZ3JhbW1hciBp
biBib3RoIHZlcnNpb25zLgorCiBMaXRlcmFsOgogICAgIE5VTExUT0tFTiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBO
dWxsTm9kZShHTE9CQUxfREFUQSksIDAsIDEpOyB9CiAgIHwgVFJVRVRPS0VOICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPEV4cHJlc3Npb25Ob2RlKj4obmV3
IEJvb2xlYW5Ob2RlKEdMT0JBTF9EQVRBLCB0cnVlKSwgMCwgMSk7IH0KQEAgLTEyMDMsMjEgKzEy
MDcsOCBAQCBGb3JtYWxQYXJhbWV0ZXJMaXN0OgogOwogCiBGdW5jdGlvbkJvZHk6Ci0gICAgLyog
bm90IGluIHNwZWMgKi8gICAgICAgICAgIHsgJCQgPSBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUo
R0xPQkFMX0RBVEEsIDAsIDAsIDAsIE5vRmVhdHVyZXMsIDApOyB9Ci0gIHwgU291cmNlRWxlbWVu
dHMgICAgICAgICAgICAgIHsgJCQgPSBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoR0xPQkFMX0RB
VEEsICQxLm1fbm9kZSwgJDEubV92YXJEZWNsYXJhdGlvbnMgPyAmJDEubV92YXJEZWNsYXJhdGlv
bnMtPmRhdGEgOiAwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAkMS5tX2Z1bmNEZWNsYXJhdGlvbnMgPyAmJDEubV9mdW5j
RGVjbGFyYXRpb25zLT5kYXRhIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5tX2ZlYXR1cmVzLCAkMS5tX251bUNv
bnN0YW50cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgaW4gbWVy
Z2VEZWNsYXJhdGlvbkxpc3RzKCkgd2UgaGF2ZSB0byByZWYvZGVyZWYgdG8gc2FmZWx5IGdldCBy
aWQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZGVjbGFyYXRp
b24gbGlzdHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQxLm1fdmFy
RGVjbGFyYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQx
Lm1fdmFyRGVjbGFyYXRpb25zLT5yZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJDEubV92YXJEZWNsYXJhdGlvbnMtPmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkMS5tX2Z1bmNEZWNsYXJhdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJDEubV9mdW5jRGVjbGFyYXRpb25zLT5yZWYoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJDEubV9mdW5jRGVjbGFyYXRpb25zLT5kZXJlZigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgIC8qIG5vdCBpbiBzcGVjICovICAgICAgICAgICAgICAgICAgIHsgJCQg
PSBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUoR0xPQkFMX0RBVEEpOyB9CisgIHwgU291cmNlRWxl
bWVudHNfTm9Ob2RlICAgICAgICAgICAgICAgeyAkJCA9IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0
ZShHTE9CQUxfREFUQSk7IH0KIDsKIAogUHJvZ3JhbToKQEAgLTEyNDcsNiArMTIzOCw2MDMgQEAg
U291cmNlRWxlbWVudDoKICAgfCBTdGF0ZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICQkID0gJDE7IH0KIDsKICAKKy8vIFN0YXJ0IE5vTm9kZXMKKworTGl0ZXJhbF9Ob05vZGU6Cisg
ICAgTlVMTFRPS0VOCisgIHwgVFJVRVRPS0VOCisgIHwgRkFMU0VUT0tFTgorICB8IE5VTUJFUgor
ICB8IFNUUklORworICB8ICcvJyAvKiByZWdleHAgKi8geyBMZXhlciYgbCA9ICpMRVhFUjsgaWYg
KCFsLnNjYW5SZWdFeHAoKSkgWVlBQk9SVDsgfQorICB8IERJVkVRVUFMIC8qIHJlZ2V4cCB3aXRo
IC89ICovIHsgTGV4ZXImIGwgPSAqTEVYRVI7IGlmICghbC5zY2FuUmVnRXhwKCkpIFlZQUJPUlQ7
IH0KKzsKKworUHJvcGVydHlfTm9Ob2RlOgorICAgIElERU5UICc6JyBBc3NpZ25tZW50RXhwcl9O
b05vZGUKKyAgfCBTVFJJTkcgJzonIEFzc2lnbm1lbnRFeHByX05vTm9kZQorICB8IE5VTUJFUiAn
OicgQXNzaWdubWVudEV4cHJfTm9Ob2RlCisgIHwgSURFTlQgSURFTlQgJygnICcpJyBPUEVOQlJB
Q0UgRnVuY3Rpb25Cb2R5X05vTm9kZSBDTE9TRUJSQUNFIHsgaWYgKCokMSAhPSAiZ2V0IiAmJiAq
JDEgIT0gInNldCIpIFlZQUJPUlQ7IH0KKyAgfCBJREVOVCBJREVOVCAnKCcgRm9ybWFsUGFyYW1l
dGVyTGlzdF9Ob05vZGUgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHlfTm9Ob2RlIENMT1NFQlJB
Q0UgeyBpZiAoKiQxICE9ICJnZXQiICYmICokMSAhPSAic2V0IikgWVlBQk9SVDsgfQorOworCitQ
cm9wZXJ0eUxpc3RfTm9Ob2RlOgorICAgIFByb3BlcnR5X05vTm9kZQorICB8IFByb3BlcnR5TGlz
dF9Ob05vZGUgJywnIFByb3BlcnR5X05vTm9kZQorOworCitQcmltYXJ5RXhwcl9Ob05vZGU6Cisg
ICAgUHJpbWFyeUV4cHJOb0JyYWNlX05vTm9kZQorICB8IE9QRU5CUkFDRSBDTE9TRUJSQUNFCisg
IHwgT1BFTkJSQUNFIFByb3BlcnR5TGlzdF9Ob05vZGUgQ0xPU0VCUkFDRQorICAvKiBhbGxvdyBl
eHRyYSBjb21tYSwgc2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5
MzkgKi8KKyAgfCBPUEVOQlJBQ0UgUHJvcGVydHlMaXN0X05vTm9kZSAnLCcgQ0xPU0VCUkFDRQor
OworCitQcmltYXJ5RXhwck5vQnJhY2VfTm9Ob2RlOgorICAgIFRISVNUT0tFTgorICB8IExpdGVy
YWxfTm9Ob2RlCisgIHwgQXJyYXlMaXRlcmFsX05vTm9kZQorICB8IElERU5UCisgIHwgJygnIEV4
cHJfTm9Ob2RlICcpJworOworCitBcnJheUxpdGVyYWxfTm9Ob2RlOgorICAgICdbJyBFbGlzaW9u
T3B0X05vTm9kZSAnXScKKyAgfCAnWycgRWxlbWVudExpc3RfTm9Ob2RlICddJworICB8ICdbJyBF
bGVtZW50TGlzdF9Ob05vZGUgJywnIEVsaXNpb25PcHRfTm9Ob2RlICddJworOworCitFbGVtZW50
TGlzdF9Ob05vZGU6CisgICAgRWxpc2lvbk9wdF9Ob05vZGUgQXNzaWdubWVudEV4cHJfTm9Ob2Rl
CisgIHwgRWxlbWVudExpc3RfTm9Ob2RlICcsJyBFbGlzaW9uT3B0X05vTm9kZSBBc3NpZ25tZW50
RXhwcl9Ob05vZGUKKzsKKworRWxpc2lvbk9wdF9Ob05vZGU6CisgICAgLyogbm90aGluZyAqLwor
ICB8IEVsaXNpb25fTm9Ob2RlCis7CisKK0VsaXNpb25fTm9Ob2RlOgorICAgICcsJworICB8IEVs
aXNpb25fTm9Ob2RlICcsJworOworCitNZW1iZXJFeHByX05vTm9kZToKKyAgICBQcmltYXJ5RXhw
cl9Ob05vZGUKKyAgfCBGdW5jdGlvbkV4cHJfTm9Ob2RlCisgIHwgTWVtYmVyRXhwcl9Ob05vZGUg
J1snIEV4cHJfTm9Ob2RlICddJworICB8IE1lbWJlckV4cHJfTm9Ob2RlICcuJyBJREVOVAorICB8
IE5FVyBNZW1iZXJFeHByX05vTm9kZSBBcmd1bWVudHNfTm9Ob2RlCis7CisKK01lbWJlckV4cHJO
b0JGX05vTm9kZToKKyAgICBQcmltYXJ5RXhwck5vQnJhY2VfTm9Ob2RlCisgIHwgTWVtYmVyRXhw
ck5vQkZfTm9Ob2RlICdbJyBFeHByX05vTm9kZSAnXScKKyAgfCBNZW1iZXJFeHByTm9CRl9Ob05v
ZGUgJy4nIElERU5UCisgIHwgTkVXIE1lbWJlckV4cHJfTm9Ob2RlIEFyZ3VtZW50c19Ob05vZGUK
KzsKKworTmV3RXhwcl9Ob05vZGU6CisgICAgTWVtYmVyRXhwcl9Ob05vZGUKKyAgfCBORVcgTmV3
RXhwcl9Ob05vZGUKKzsKKworTmV3RXhwck5vQkZfTm9Ob2RlOgorICAgIE1lbWJlckV4cHJOb0JG
X05vTm9kZQorICB8IE5FVyBOZXdFeHByX05vTm9kZQorOworCitDYWxsRXhwcl9Ob05vZGU6Cisg
ICAgTWVtYmVyRXhwcl9Ob05vZGUgQXJndW1lbnRzX05vTm9kZQorICB8IENhbGxFeHByX05vTm9k
ZSBBcmd1bWVudHNfTm9Ob2RlCisgIHwgQ2FsbEV4cHJfTm9Ob2RlICdbJyBFeHByX05vTm9kZSAn
XScKKyAgfCBDYWxsRXhwcl9Ob05vZGUgJy4nIElERU5UCis7CisKK0NhbGxFeHByTm9CRl9Ob05v
ZGU6CisgICAgTWVtYmVyRXhwck5vQkZfTm9Ob2RlIEFyZ3VtZW50c19Ob05vZGUKKyAgfCBDYWxs
RXhwck5vQkZfTm9Ob2RlIEFyZ3VtZW50c19Ob05vZGUKKyAgfCBDYWxsRXhwck5vQkZfTm9Ob2Rl
ICdbJyBFeHByX05vTm9kZSAnXScKKyAgfCBDYWxsRXhwck5vQkZfTm9Ob2RlICcuJyBJREVOVAor
OworCitBcmd1bWVudHNfTm9Ob2RlOgorICAgICcoJyAnKScKKyAgfCAnKCcgQXJndW1lbnRMaXN0
X05vTm9kZSAnKScKKzsKKworQXJndW1lbnRMaXN0X05vTm9kZToKKyAgICBBc3NpZ25tZW50RXhw
cl9Ob05vZGUKKyAgfCBBcmd1bWVudExpc3RfTm9Ob2RlICcsJyBBc3NpZ25tZW50RXhwcl9Ob05v
ZGUKKzsKKworTGVmdEhhbmRTaWRlRXhwcl9Ob05vZGU6CisgICAgTmV3RXhwcl9Ob05vZGUKKyAg
fCBDYWxsRXhwcl9Ob05vZGUKKzsKKworTGVmdEhhbmRTaWRlRXhwck5vQkZfTm9Ob2RlOgorICAg
IE5ld0V4cHJOb0JGX05vTm9kZQorICB8IENhbGxFeHByTm9CRl9Ob05vZGUKKzsKKworUG9zdGZp
eEV4cHJfTm9Ob2RlOgorICAgIExlZnRIYW5kU2lkZUV4cHJfTm9Ob2RlCisgIHwgTGVmdEhhbmRT
aWRlRXhwcl9Ob05vZGUgUExVU1BMVVMKKyAgfCBMZWZ0SGFuZFNpZGVFeHByX05vTm9kZSBNSU5V
U01JTlVTCis7CisKK1Bvc3RmaXhFeHByTm9CRl9Ob05vZGU6CisgICAgTGVmdEhhbmRTaWRlRXhw
ck5vQkZfTm9Ob2RlCisgIHwgTGVmdEhhbmRTaWRlRXhwck5vQkZfTm9Ob2RlIFBMVVNQTFVTCisg
IHwgTGVmdEhhbmRTaWRlRXhwck5vQkZfTm9Ob2RlIE1JTlVTTUlOVVMKKzsKKworVW5hcnlFeHBy
Q29tbW9uX05vTm9kZToKKyAgICBERUxFVEVUT0tFTiBVbmFyeUV4cHJfTm9Ob2RlCisgIHwgVk9J
RFRPS0VOIFVuYXJ5RXhwcl9Ob05vZGUKKyAgfCBUWVBFT0YgVW5hcnlFeHByX05vTm9kZQorICB8
IFBMVVNQTFVTIFVuYXJ5RXhwcl9Ob05vZGUKKyAgfCBBVVRPUExVU1BMVVMgVW5hcnlFeHByX05v
Tm9kZQorICB8IE1JTlVTTUlOVVMgVW5hcnlFeHByX05vTm9kZQorICB8IEFVVE9NSU5VU01JTlVT
IFVuYXJ5RXhwcl9Ob05vZGUKKyAgfCAnKycgVW5hcnlFeHByX05vTm9kZQorICB8ICctJyBVbmFy
eUV4cHJfTm9Ob2RlCisgIHwgJ34nIFVuYXJ5RXhwcl9Ob05vZGUKKyAgfCAnIScgVW5hcnlFeHBy
X05vTm9kZQorCitVbmFyeUV4cHJfTm9Ob2RlOgorICAgIFBvc3RmaXhFeHByX05vTm9kZQorICB8
IFVuYXJ5RXhwckNvbW1vbl9Ob05vZGUKKzsKKworVW5hcnlFeHByTm9CRl9Ob05vZGU6CisgICAg
UG9zdGZpeEV4cHJOb0JGX05vTm9kZQorICB8IFVuYXJ5RXhwckNvbW1vbl9Ob05vZGUKKzsKKwor
TXVsdGlwbGljYXRpdmVFeHByX05vTm9kZToKKyAgICBVbmFyeUV4cHJfTm9Ob2RlCisgIHwgTXVs
dGlwbGljYXRpdmVFeHByX05vTm9kZSAnKicgVW5hcnlFeHByX05vTm9kZQorICB8IE11bHRpcGxp
Y2F0aXZlRXhwcl9Ob05vZGUgJy8nIFVuYXJ5RXhwcl9Ob05vZGUKKyAgfCBNdWx0aXBsaWNhdGl2
ZUV4cHJfTm9Ob2RlICclJyBVbmFyeUV4cHJfTm9Ob2RlCis7CisKK011bHRpcGxpY2F0aXZlRXhw
ck5vQkZfTm9Ob2RlOgorICAgIFVuYXJ5RXhwck5vQkZfTm9Ob2RlCisgIHwgTXVsdGlwbGljYXRp
dmVFeHByTm9CRl9Ob05vZGUgJyonIFVuYXJ5RXhwcl9Ob05vZGUKKyAgfCBNdWx0aXBsaWNhdGl2
ZUV4cHJOb0JGX05vTm9kZSAnLycgVW5hcnlFeHByX05vTm9kZQorICB8IE11bHRpcGxpY2F0aXZl
RXhwck5vQkZfTm9Ob2RlICclJyBVbmFyeUV4cHJfTm9Ob2RlCis7CisKK0FkZGl0aXZlRXhwcl9O
b05vZGU6CisgICAgTXVsdGlwbGljYXRpdmVFeHByX05vTm9kZQorICB8IEFkZGl0aXZlRXhwcl9O
b05vZGUgJysnIE11bHRpcGxpY2F0aXZlRXhwcl9Ob05vZGUKKyAgfCBBZGRpdGl2ZUV4cHJfTm9O
b2RlICctJyBNdWx0aXBsaWNhdGl2ZUV4cHJfTm9Ob2RlCis7CisKK0FkZGl0aXZlRXhwck5vQkZf
Tm9Ob2RlOgorICAgIE11bHRpcGxpY2F0aXZlRXhwck5vQkZfTm9Ob2RlCisgIHwgQWRkaXRpdmVF
eHByTm9CRl9Ob05vZGUgJysnIE11bHRpcGxpY2F0aXZlRXhwcl9Ob05vZGUKKyAgfCBBZGRpdGl2
ZUV4cHJOb0JGX05vTm9kZSAnLScgTXVsdGlwbGljYXRpdmVFeHByX05vTm9kZQorOworCitTaGlm
dEV4cHJfTm9Ob2RlOgorICAgIEFkZGl0aXZlRXhwcl9Ob05vZGUKKyAgfCBTaGlmdEV4cHJfTm9O
b2RlIExTSElGVCBBZGRpdGl2ZUV4cHJfTm9Ob2RlCisgIHwgU2hpZnRFeHByX05vTm9kZSBSU0hJ
RlQgQWRkaXRpdmVFeHByX05vTm9kZQorICB8IFNoaWZ0RXhwcl9Ob05vZGUgVVJTSElGVCBBZGRp
dGl2ZUV4cHJfTm9Ob2RlCis7CisKK1NoaWZ0RXhwck5vQkZfTm9Ob2RlOgorICAgIEFkZGl0aXZl
RXhwck5vQkZfTm9Ob2RlCisgIHwgU2hpZnRFeHByTm9CRl9Ob05vZGUgTFNISUZUIEFkZGl0aXZl
RXhwcl9Ob05vZGUKKyAgfCBTaGlmdEV4cHJOb0JGX05vTm9kZSBSU0hJRlQgQWRkaXRpdmVFeHBy
X05vTm9kZQorICB8IFNoaWZ0RXhwck5vQkZfTm9Ob2RlIFVSU0hJRlQgQWRkaXRpdmVFeHByX05v
Tm9kZQorOworCitSZWxhdGlvbmFsRXhwcl9Ob05vZGU6CisgICAgU2hpZnRFeHByX05vTm9kZQor
ICB8IFJlbGF0aW9uYWxFeHByX05vTm9kZSAnPCcgU2hpZnRFeHByX05vTm9kZQorICB8IFJlbGF0
aW9uYWxFeHByX05vTm9kZSAnPicgU2hpZnRFeHByX05vTm9kZQorICB8IFJlbGF0aW9uYWxFeHBy
X05vTm9kZSBMRSBTaGlmdEV4cHJfTm9Ob2RlCisgIHwgUmVsYXRpb25hbEV4cHJfTm9Ob2RlIEdF
IFNoaWZ0RXhwcl9Ob05vZGUKKyAgfCBSZWxhdGlvbmFsRXhwcl9Ob05vZGUgSU5TVEFOQ0VPRiBT
aGlmdEV4cHJfTm9Ob2RlCisgIHwgUmVsYXRpb25hbEV4cHJfTm9Ob2RlIElOVE9LRU4gU2hpZnRF
eHByX05vTm9kZQorOworCitSZWxhdGlvbmFsRXhwck5vSW5fTm9Ob2RlOgorICAgIFNoaWZ0RXhw
cl9Ob05vZGUKKyAgfCBSZWxhdGlvbmFsRXhwck5vSW5fTm9Ob2RlICc8JyBTaGlmdEV4cHJfTm9O
b2RlCisgIHwgUmVsYXRpb25hbEV4cHJOb0luX05vTm9kZSAnPicgU2hpZnRFeHByX05vTm9kZQor
ICB8IFJlbGF0aW9uYWxFeHByTm9Jbl9Ob05vZGUgTEUgU2hpZnRFeHByX05vTm9kZQorICB8IFJl
bGF0aW9uYWxFeHByTm9Jbl9Ob05vZGUgR0UgU2hpZnRFeHByX05vTm9kZQorICB8IFJlbGF0aW9u
YWxFeHByTm9Jbl9Ob05vZGUgSU5TVEFOQ0VPRiBTaGlmdEV4cHJfTm9Ob2RlCis7CisKK1JlbGF0
aW9uYWxFeHByTm9CRl9Ob05vZGU6CisgICAgU2hpZnRFeHByTm9CRl9Ob05vZGUKKyAgfCBSZWxh
dGlvbmFsRXhwck5vQkZfTm9Ob2RlICc8JyBTaGlmdEV4cHJfTm9Ob2RlCisgIHwgUmVsYXRpb25h
bEV4cHJOb0JGX05vTm9kZSAnPicgU2hpZnRFeHByX05vTm9kZQorICB8IFJlbGF0aW9uYWxFeHBy
Tm9CRl9Ob05vZGUgTEUgU2hpZnRFeHByX05vTm9kZQorICB8IFJlbGF0aW9uYWxFeHByTm9CRl9O
b05vZGUgR0UgU2hpZnRFeHByX05vTm9kZQorICB8IFJlbGF0aW9uYWxFeHByTm9CRl9Ob05vZGUg
SU5TVEFOQ0VPRiBTaGlmdEV4cHJfTm9Ob2RlCisgIHwgUmVsYXRpb25hbEV4cHJOb0JGX05vTm9k
ZSBJTlRPS0VOIFNoaWZ0RXhwcl9Ob05vZGUKKzsKKworRXF1YWxpdHlFeHByX05vTm9kZToKKyAg
ICBSZWxhdGlvbmFsRXhwcl9Ob05vZGUKKyAgfCBFcXVhbGl0eUV4cHJfTm9Ob2RlIEVRRVEgUmVs
YXRpb25hbEV4cHJfTm9Ob2RlCisgIHwgRXF1YWxpdHlFeHByX05vTm9kZSBORSBSZWxhdGlvbmFs
RXhwcl9Ob05vZGUKKyAgfCBFcXVhbGl0eUV4cHJfTm9Ob2RlIFNUUkVRIFJlbGF0aW9uYWxFeHBy
X05vTm9kZQorICB8IEVxdWFsaXR5RXhwcl9Ob05vZGUgU1RSTkVRIFJlbGF0aW9uYWxFeHByX05v
Tm9kZQorOworCitFcXVhbGl0eUV4cHJOb0luX05vTm9kZToKKyAgICBSZWxhdGlvbmFsRXhwck5v
SW5fTm9Ob2RlCisgIHwgRXF1YWxpdHlFeHByTm9Jbl9Ob05vZGUgRVFFUSBSZWxhdGlvbmFsRXhw
ck5vSW5fTm9Ob2RlCisgIHwgRXF1YWxpdHlFeHByTm9Jbl9Ob05vZGUgTkUgUmVsYXRpb25hbEV4
cHJOb0luX05vTm9kZQorICB8IEVxdWFsaXR5RXhwck5vSW5fTm9Ob2RlIFNUUkVRIFJlbGF0aW9u
YWxFeHByTm9Jbl9Ob05vZGUKKyAgfCBFcXVhbGl0eUV4cHJOb0luX05vTm9kZSBTVFJORVEgUmVs
YXRpb25hbEV4cHJOb0luX05vTm9kZQorOworCitFcXVhbGl0eUV4cHJOb0JGX05vTm9kZToKKyAg
ICBSZWxhdGlvbmFsRXhwck5vQkZfTm9Ob2RlCisgIHwgRXF1YWxpdHlFeHByTm9CRl9Ob05vZGUg
RVFFUSBSZWxhdGlvbmFsRXhwcl9Ob05vZGUKKyAgfCBFcXVhbGl0eUV4cHJOb0JGX05vTm9kZSBO
RSBSZWxhdGlvbmFsRXhwcl9Ob05vZGUKKyAgfCBFcXVhbGl0eUV4cHJOb0JGX05vTm9kZSBTVFJF
USBSZWxhdGlvbmFsRXhwcl9Ob05vZGUKKyAgfCBFcXVhbGl0eUV4cHJOb0JGX05vTm9kZSBTVFJO
RVEgUmVsYXRpb25hbEV4cHJfTm9Ob2RlCis7CisKK0JpdHdpc2VBTkRFeHByX05vTm9kZToKKyAg
ICBFcXVhbGl0eUV4cHJfTm9Ob2RlCisgIHwgQml0d2lzZUFOREV4cHJfTm9Ob2RlICcmJyBFcXVh
bGl0eUV4cHJfTm9Ob2RlCis7CisKK0JpdHdpc2VBTkRFeHByTm9Jbl9Ob05vZGU6CisgICAgRXF1
YWxpdHlFeHByTm9Jbl9Ob05vZGUKKyAgfCBCaXR3aXNlQU5ERXhwck5vSW5fTm9Ob2RlICcmJyBF
cXVhbGl0eUV4cHJOb0luX05vTm9kZQorOworCitCaXR3aXNlQU5ERXhwck5vQkZfTm9Ob2RlOgor
ICAgIEVxdWFsaXR5RXhwck5vQkZfTm9Ob2RlCisgIHwgQml0d2lzZUFOREV4cHJOb0JGX05vTm9k
ZSAnJicgRXF1YWxpdHlFeHByX05vTm9kZQorOworCitCaXR3aXNlWE9SRXhwcl9Ob05vZGU6Cisg
ICAgQml0d2lzZUFOREV4cHJfTm9Ob2RlCisgIHwgQml0d2lzZVhPUkV4cHJfTm9Ob2RlICdeJyBC
aXR3aXNlQU5ERXhwcl9Ob05vZGUKKzsKKworQml0d2lzZVhPUkV4cHJOb0luX05vTm9kZToKKyAg
ICBCaXR3aXNlQU5ERXhwck5vSW5fTm9Ob2RlCisgIHwgQml0d2lzZVhPUkV4cHJOb0luX05vTm9k
ZSAnXicgQml0d2lzZUFOREV4cHJOb0luX05vTm9kZQorOworCitCaXR3aXNlWE9SRXhwck5vQkZf
Tm9Ob2RlOgorICAgIEJpdHdpc2VBTkRFeHByTm9CRl9Ob05vZGUKKyAgfCBCaXR3aXNlWE9SRXhw
ck5vQkZfTm9Ob2RlICdeJyBCaXR3aXNlQU5ERXhwcl9Ob05vZGUKKzsKKworQml0d2lzZU9SRXhw
cl9Ob05vZGU6CisgICAgQml0d2lzZVhPUkV4cHJfTm9Ob2RlCisgIHwgQml0d2lzZU9SRXhwcl9O
b05vZGUgJ3wnIEJpdHdpc2VYT1JFeHByX05vTm9kZQorOworCitCaXR3aXNlT1JFeHByTm9Jbl9O
b05vZGU6CisgICAgQml0d2lzZVhPUkV4cHJOb0luX05vTm9kZQorICB8IEJpdHdpc2VPUkV4cHJO
b0luX05vTm9kZSAnfCcgQml0d2lzZVhPUkV4cHJOb0luX05vTm9kZQorOworCitCaXR3aXNlT1JF
eHByTm9CRl9Ob05vZGU6CisgICAgQml0d2lzZVhPUkV4cHJOb0JGX05vTm9kZQorICB8IEJpdHdp
c2VPUkV4cHJOb0JGX05vTm9kZSAnfCcgQml0d2lzZVhPUkV4cHJfTm9Ob2RlCis7CisKK0xvZ2lj
YWxBTkRFeHByX05vTm9kZToKKyAgICBCaXR3aXNlT1JFeHByX05vTm9kZQorICB8IExvZ2ljYWxB
TkRFeHByX05vTm9kZSBBTkQgQml0d2lzZU9SRXhwcl9Ob05vZGUKKzsKKworTG9naWNhbEFOREV4
cHJOb0luX05vTm9kZToKKyAgICBCaXR3aXNlT1JFeHByTm9Jbl9Ob05vZGUKKyAgfCBMb2dpY2Fs
QU5ERXhwck5vSW5fTm9Ob2RlIEFORCBCaXR3aXNlT1JFeHByTm9Jbl9Ob05vZGUKKzsKKworTG9n
aWNhbEFOREV4cHJOb0JGX05vTm9kZToKKyAgICBCaXR3aXNlT1JFeHByTm9CRl9Ob05vZGUKKyAg
fCBMb2dpY2FsQU5ERXhwck5vQkZfTm9Ob2RlIEFORCBCaXR3aXNlT1JFeHByX05vTm9kZQorOwor
CitMb2dpY2FsT1JFeHByX05vTm9kZToKKyAgICBMb2dpY2FsQU5ERXhwcl9Ob05vZGUKKyAgfCBM
b2dpY2FsT1JFeHByX05vTm9kZSBPUiBMb2dpY2FsQU5ERXhwcl9Ob05vZGUKKzsKKworTG9naWNh
bE9SRXhwck5vSW5fTm9Ob2RlOgorICAgIExvZ2ljYWxBTkRFeHByTm9Jbl9Ob05vZGUKKyAgfCBM
b2dpY2FsT1JFeHByTm9Jbl9Ob05vZGUgT1IgTG9naWNhbEFOREV4cHJOb0luX05vTm9kZQorOwor
CitMb2dpY2FsT1JFeHByTm9CRl9Ob05vZGU6CisgICAgTG9naWNhbEFOREV4cHJOb0JGX05vTm9k
ZQorICB8IExvZ2ljYWxPUkV4cHJOb0JGX05vTm9kZSBPUiBMb2dpY2FsQU5ERXhwcl9Ob05vZGUK
KzsKKworQ29uZGl0aW9uYWxFeHByX05vTm9kZToKKyAgICBMb2dpY2FsT1JFeHByX05vTm9kZQor
ICB8IExvZ2ljYWxPUkV4cHJfTm9Ob2RlICc/JyBBc3NpZ25tZW50RXhwcl9Ob05vZGUgJzonIEFz
c2lnbm1lbnRFeHByX05vTm9kZQorOworCitDb25kaXRpb25hbEV4cHJOb0luX05vTm9kZToKKyAg
ICBMb2dpY2FsT1JFeHByTm9Jbl9Ob05vZGUKKyAgfCBMb2dpY2FsT1JFeHByTm9Jbl9Ob05vZGUg
Jz8nIEFzc2lnbm1lbnRFeHByTm9Jbl9Ob05vZGUgJzonIEFzc2lnbm1lbnRFeHByTm9Jbl9Ob05v
ZGUKKzsKKworQ29uZGl0aW9uYWxFeHByTm9CRl9Ob05vZGU6CisgICAgTG9naWNhbE9SRXhwck5v
QkZfTm9Ob2RlCisgIHwgTG9naWNhbE9SRXhwck5vQkZfTm9Ob2RlICc/JyBBc3NpZ25tZW50RXhw
cl9Ob05vZGUgJzonIEFzc2lnbm1lbnRFeHByX05vTm9kZQorOworCitBc3NpZ25tZW50RXhwcl9O
b05vZGU6CisgICAgQ29uZGl0aW9uYWxFeHByX05vTm9kZQorICB8IExlZnRIYW5kU2lkZUV4cHJf
Tm9Ob2RlIEFzc2lnbm1lbnRPcGVyYXRvcl9Ob05vZGUgQXNzaWdubWVudEV4cHJfTm9Ob2RlCis7
CisKK0Fzc2lnbm1lbnRFeHByTm9Jbl9Ob05vZGU6CisgICAgQ29uZGl0aW9uYWxFeHByTm9Jbl9O
b05vZGUKKyAgfCBMZWZ0SGFuZFNpZGVFeHByX05vTm9kZSBBc3NpZ25tZW50T3BlcmF0b3JfTm9O
b2RlIEFzc2lnbm1lbnRFeHByTm9Jbl9Ob05vZGUKKzsKKworQXNzaWdubWVudEV4cHJOb0JGX05v
Tm9kZToKKyAgICBDb25kaXRpb25hbEV4cHJOb0JGX05vTm9kZQorICB8IExlZnRIYW5kU2lkZUV4
cHJOb0JGX05vTm9kZSBBc3NpZ25tZW50T3BlcmF0b3JfTm9Ob2RlIEFzc2lnbm1lbnRFeHByX05v
Tm9kZQorOworCitBc3NpZ25tZW50T3BlcmF0b3JfTm9Ob2RlOgorICAgICc9JworICB8IFBMVVNF
UVVBTAorICB8IE1JTlVTRVFVQUwKKyAgfCBNVUxURVFVQUwKKyAgfCBESVZFUVVBTAorICB8IExT
SElGVEVRVUFMCisgIHwgUlNISUZURVFVQUwKKyAgfCBVUlNISUZURVFVQUwKKyAgfCBBTkRFUVVB
TAorICB8IFhPUkVRVUFMCisgIHwgT1JFUVVBTAorICB8IE1PREVRVUFMCis7CisKK0V4cHJfTm9O
b2RlOgorICAgIEFzc2lnbm1lbnRFeHByX05vTm9kZQorICB8IEV4cHJfTm9Ob2RlICcsJyBBc3Np
Z25tZW50RXhwcl9Ob05vZGUKKzsKKworRXhwck5vSW5fTm9Ob2RlOgorICAgIEFzc2lnbm1lbnRF
eHByTm9Jbl9Ob05vZGUKKyAgfCBFeHByTm9Jbl9Ob05vZGUgJywnIEFzc2lnbm1lbnRFeHByTm9J
bl9Ob05vZGUKKzsKKworRXhwck5vQkZfTm9Ob2RlOgorICAgIEFzc2lnbm1lbnRFeHByTm9CRl9O
b05vZGUKKyAgfCBFeHByTm9CRl9Ob05vZGUgJywnIEFzc2lnbm1lbnRFeHByX05vTm9kZQorOwor
CitTdGF0ZW1lbnRfTm9Ob2RlOgorICAgIEJsb2NrX05vTm9kZQorICB8IFZhcmlhYmxlU3RhdGVt
ZW50X05vTm9kZQorICB8IENvbnN0U3RhdGVtZW50X05vTm9kZQorICB8IEVtcHR5U3RhdGVtZW50
X05vTm9kZQorICB8IEV4cHJTdGF0ZW1lbnRfTm9Ob2RlCisgIHwgSWZTdGF0ZW1lbnRfTm9Ob2Rl
CisgIHwgSXRlcmF0aW9uU3RhdGVtZW50X05vTm9kZQorICB8IENvbnRpbnVlU3RhdGVtZW50X05v
Tm9kZQorICB8IEJyZWFrU3RhdGVtZW50X05vTm9kZQorICB8IFJldHVyblN0YXRlbWVudF9Ob05v
ZGUKKyAgfCBXaXRoU3RhdGVtZW50X05vTm9kZQorICB8IFN3aXRjaFN0YXRlbWVudF9Ob05vZGUK
KyAgfCBMYWJlbGxlZFN0YXRlbWVudF9Ob05vZGUKKyAgfCBUaHJvd1N0YXRlbWVudF9Ob05vZGUK
KyAgfCBUcnlTdGF0ZW1lbnRfTm9Ob2RlCisgIHwgRGVidWdnZXJTdGF0ZW1lbnRfTm9Ob2RlCis7
CisKK0Jsb2NrX05vTm9kZToKKyAgICBPUEVOQlJBQ0UgQ0xPU0VCUkFDRQorICB8IE9QRU5CUkFD
RSBTb3VyY2VFbGVtZW50c19Ob05vZGUgQ0xPU0VCUkFDRQorOworCitWYXJpYWJsZVN0YXRlbWVu
dF9Ob05vZGU6CisgICAgVkFSIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0X05vTm9kZSAnOycKKyAg
fCBWQVIgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3RfTm9Ob2RlIGVycm9yIHsgQVVUT19TRU1JQ09M
T047IH0KKzsKKworVmFyaWFibGVEZWNsYXJhdGlvbkxpc3RfTm9Ob2RlOgorICAgIElERU5UCisg
IHwgSURFTlQgSW5pdGlhbGl6ZXJfTm9Ob2RlCisgIHwgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Rf
Tm9Ob2RlICcsJyBJREVOVAorICB8IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0X05vTm9kZSAnLCcg
SURFTlQgSW5pdGlhbGl6ZXJfTm9Ob2RlCis7CisKK1ZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9J
bl9Ob05vZGU6CisgICAgSURFTlQKKyAgfCBJREVOVCBJbml0aWFsaXplck5vSW5fTm9Ob2RlCisg
IHwgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3ROb0luX05vTm9kZSAnLCcgSURFTlQKKyAgfCBWYXJp
YWJsZURlY2xhcmF0aW9uTGlzdE5vSW5fTm9Ob2RlICcsJyBJREVOVCBJbml0aWFsaXplck5vSW5f
Tm9Ob2RlCis7CisKK0NvbnN0U3RhdGVtZW50X05vTm9kZToKKyAgICBDT05TVFRPS0VOIENvbnN0
RGVjbGFyYXRpb25MaXN0X05vTm9kZSAnOycKKyAgfCBDT05TVFRPS0VOIENvbnN0RGVjbGFyYXRp
b25MaXN0X05vTm9kZSBlcnJvciB7IEFVVE9fU0VNSUNPTE9OOyB9Cis7CisKK0NvbnN0RGVjbGFy
YXRpb25MaXN0X05vTm9kZToKKyAgICBDb25zdERlY2xhcmF0aW9uX05vTm9kZQorICB8IENvbnN0
RGVjbGFyYXRpb25MaXN0X05vTm9kZSAnLCcgQ29uc3REZWNsYXJhdGlvbl9Ob05vZGUKKzsKKwor
Q29uc3REZWNsYXJhdGlvbl9Ob05vZGU6CisgICAgSURFTlQKKyAgfCBJREVOVCBJbml0aWFsaXpl
cl9Ob05vZGUKKzsKKworSW5pdGlhbGl6ZXJfTm9Ob2RlOgorICAgICc9JyBBc3NpZ25tZW50RXhw
cl9Ob05vZGUKKzsKKworSW5pdGlhbGl6ZXJOb0luX05vTm9kZToKKyAgICAnPScgQXNzaWdubWVu
dEV4cHJOb0luX05vTm9kZQorOworCitFbXB0eVN0YXRlbWVudF9Ob05vZGU6CisgICAgJzsnCis7
CisKK0V4cHJTdGF0ZW1lbnRfTm9Ob2RlOgorICAgIEV4cHJOb0JGX05vTm9kZSAnOycKKyAgfCBF
eHByTm9CRl9Ob05vZGUgZXJyb3IgeyBBVVRPX1NFTUlDT0xPTjsgfQorOworCitJZlN0YXRlbWVu
dF9Ob05vZGU6CisgICAgSUYgJygnIEV4cHJfTm9Ob2RlICcpJyBTdGF0ZW1lbnRfTm9Ob2RlICVw
cmVjIElGX1dJVEhPVVRfRUxTRQorICB8IElGICcoJyBFeHByX05vTm9kZSAnKScgU3RhdGVtZW50
X05vTm9kZSBFTFNFIFN0YXRlbWVudF9Ob05vZGUKKzsKKworSXRlcmF0aW9uU3RhdGVtZW50X05v
Tm9kZToKKyAgICBETyBTdGF0ZW1lbnRfTm9Ob2RlIFdISUxFICcoJyBFeHByX05vTm9kZSAnKScg
JzsnCisgIHwgRE8gU3RhdGVtZW50X05vTm9kZSBXSElMRSAnKCcgRXhwcl9Ob05vZGUgJyknIGVy
cm9yIC8vIEFsd2F5cyBwZXJmb3JtcyBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbgorICB8
IFdISUxFICcoJyBFeHByX05vTm9kZSAnKScgU3RhdGVtZW50X05vTm9kZQorICB8IEZPUiAnKCcg
RXhwck5vSW5PcHRfTm9Ob2RlICc7JyBFeHByT3B0X05vTm9kZSAnOycgRXhwck9wdF9Ob05vZGUg
JyknIFN0YXRlbWVudF9Ob05vZGUKKyAgfCBGT1IgJygnIFZBUiBWYXJpYWJsZURlY2xhcmF0aW9u
TGlzdE5vSW5fTm9Ob2RlICc7JyBFeHByT3B0X05vTm9kZSAnOycgRXhwck9wdF9Ob05vZGUgJykn
IFN0YXRlbWVudF9Ob05vZGUKKyAgfCBGT1IgJygnIExlZnRIYW5kU2lkZUV4cHJfTm9Ob2RlIElO
VE9LRU4gRXhwcl9Ob05vZGUgJyknIFN0YXRlbWVudF9Ob05vZGUKKyAgfCBGT1IgJygnIFZBUiBJ
REVOVCBJTlRPS0VOIEV4cHJfTm9Ob2RlICcpJyBTdGF0ZW1lbnRfTm9Ob2RlCisgIHwgRk9SICco
JyBWQVIgSURFTlQgSW5pdGlhbGl6ZXJOb0luX05vTm9kZSBJTlRPS0VOIEV4cHJfTm9Ob2RlICcp
JyBTdGF0ZW1lbnRfTm9Ob2RlCis7CisKK0V4cHJPcHRfTm9Ob2RlOgorICAgIC8qIG5vdGhpbmcg
Ki8KKyAgfCBFeHByX05vTm9kZQorOworCitFeHByTm9Jbk9wdF9Ob05vZGU6CisgICAgLyogbm90
aGluZyAqLworICB8IEV4cHJOb0luX05vTm9kZQorOworCitDb250aW51ZVN0YXRlbWVudF9Ob05v
ZGU6CisgICAgQ09OVElOVUUgJzsnCisgIHwgQ09OVElOVUUgZXJyb3IgeyBBVVRPX1NFTUlDT0xP
TjsgfQorICB8IENPTlRJTlVFIElERU5UICc7JworICB8IENPTlRJTlVFIElERU5UIGVycm9yIHsg
QVVUT19TRU1JQ09MT047IH0KKzsKKworQnJlYWtTdGF0ZW1lbnRfTm9Ob2RlOgorICAgIEJSRUFL
ICc7JworICB8IEJSRUFLIGVycm9yIHsgQVVUT19TRU1JQ09MT047IH0KKyAgfCBCUkVBSyBJREVO
VCAnOycKKyAgfCBCUkVBSyBJREVOVCBlcnJvciB7IEFVVE9fU0VNSUNPTE9OOyB9Cis7CisKK1Jl
dHVyblN0YXRlbWVudF9Ob05vZGU6CisgICAgUkVUVVJOICc7JworICB8IFJFVFVSTiBlcnJvciB7
IEFVVE9fU0VNSUNPTE9OOyB9CisgIHwgUkVUVVJOIEV4cHJfTm9Ob2RlICc7JworICB8IFJFVFVS
TiBFeHByX05vTm9kZSBlcnJvciB7IEFVVE9fU0VNSUNPTE9OOyB9Cis7CisKK1dpdGhTdGF0ZW1l
bnRfTm9Ob2RlOgorICAgIFdJVEggJygnIEV4cHJfTm9Ob2RlICcpJyBTdGF0ZW1lbnRfTm9Ob2Rl
Cis7CisKK1N3aXRjaFN0YXRlbWVudF9Ob05vZGU6CisgICAgU1dJVENIICcoJyBFeHByX05vTm9k
ZSAnKScgQ2FzZUJsb2NrX05vTm9kZQorOworCitDYXNlQmxvY2tfTm9Ob2RlOgorICAgIE9QRU5C
UkFDRSBDYXNlQ2xhdXNlc09wdF9Ob05vZGUgQ0xPU0VCUkFDRQorICB8IE9QRU5CUkFDRSBDYXNl
Q2xhdXNlc09wdF9Ob05vZGUgRGVmYXVsdENsYXVzZV9Ob05vZGUgQ2FzZUNsYXVzZXNPcHRfTm9O
b2RlIENMT1NFQlJBQ0UKKzsKKworQ2FzZUNsYXVzZXNPcHRfTm9Ob2RlOgorICAgIC8qIG5vdGhp
bmcgKi8KKyAgfCBDYXNlQ2xhdXNlc19Ob05vZGUKKzsKKworQ2FzZUNsYXVzZXNfTm9Ob2RlOgor
ICAgIENhc2VDbGF1c2VfTm9Ob2RlCisgIHwgQ2FzZUNsYXVzZXNfTm9Ob2RlIENhc2VDbGF1c2Vf
Tm9Ob2RlCis7CisKK0Nhc2VDbGF1c2VfTm9Ob2RlOgorICAgIENBU0UgRXhwcl9Ob05vZGUgJzon
CisgIHwgQ0FTRSBFeHByX05vTm9kZSAnOicgU291cmNlRWxlbWVudHNfTm9Ob2RlCis7CisKK0Rl
ZmF1bHRDbGF1c2VfTm9Ob2RlOgorICAgIERFRkFVTFQgJzonCisgIHwgREVGQVVMVCAnOicgU291
cmNlRWxlbWVudHNfTm9Ob2RlCis7CisKK0xhYmVsbGVkU3RhdGVtZW50X05vTm9kZToKKyAgICBJ
REVOVCAnOicgU3RhdGVtZW50X05vTm9kZTsKKworVGhyb3dTdGF0ZW1lbnRfTm9Ob2RlOgorICAg
IFRIUk9XIEV4cHJfTm9Ob2RlICc7JworICB8IFRIUk9XIEV4cHJfTm9Ob2RlIGVycm9yIHsgQVVU
T19TRU1JQ09MT047IH0KKzsKKworVHJ5U3RhdGVtZW50X05vTm9kZToKKyAgICBUUlkgQmxvY2tf
Tm9Ob2RlIEZJTkFMTFkgQmxvY2tfTm9Ob2RlCisgIHwgVFJZIEJsb2NrX05vTm9kZSBDQVRDSCAn
KCcgSURFTlQgJyknIEJsb2NrX05vTm9kZQorICB8IFRSWSBCbG9ja19Ob05vZGUgQ0FUQ0ggJygn
IElERU5UICcpJyBCbG9ja19Ob05vZGUgRklOQUxMWSBCbG9ja19Ob05vZGUKKzsKKworRGVidWdn
ZXJTdGF0ZW1lbnRfTm9Ob2RlOgorICAgIERFQlVHR0VSICc7JworICB8IERFQlVHR0VSIGVycm9y
IHsgQVVUT19TRU1JQ09MT047IH0KKzsKKworRnVuY3Rpb25EZWNsYXJhdGlvbl9Ob05vZGU6Cisg
ICAgRlVOQ1RJT04gSURFTlQgJygnICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5X05vTm9kZSBD
TE9TRUJSQUNFCisgIHwgRlVOQ1RJT04gSURFTlQgJygnIEZvcm1hbFBhcmFtZXRlckxpc3RfTm9O
b2RlICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5X05vTm9kZSBDTE9TRUJSQUNFCis7CisKK0Z1
bmN0aW9uRXhwcl9Ob05vZGU6CisgICAgRlVOQ1RJT04gJygnICcpJyBPUEVOQlJBQ0UgRnVuY3Rp
b25Cb2R5X05vTm9kZSBDTE9TRUJSQUNFCisgIHwgRlVOQ1RJT04gJygnIEZvcm1hbFBhcmFtZXRl
ckxpc3RfTm9Ob2RlICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5X05vTm9kZSBDTE9TRUJSQUNF
CisgIHwgRlVOQ1RJT04gSURFTlQgJygnICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5X05vTm9k
ZSBDTE9TRUJSQUNFCisgIHwgRlVOQ1RJT04gSURFTlQgJygnIEZvcm1hbFBhcmFtZXRlckxpc3Rf
Tm9Ob2RlICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5X05vTm9kZSBDTE9TRUJSQUNFCis7CisK
K0Zvcm1hbFBhcmFtZXRlckxpc3RfTm9Ob2RlOgorICAgIElERU5UCisgIHwgRm9ybWFsUGFyYW1l
dGVyTGlzdF9Ob05vZGUgJywnIElERU5UCis7CisKK0Z1bmN0aW9uQm9keV9Ob05vZGU6CisgICAg
Lyogbm90IGluIHNwZWMgKi8KKyAgfCBTb3VyY2VFbGVtZW50c19Ob05vZGUKKzsKKworLy9Qcm9n
cmFtX05vTm9kZToKKy8vICAgIC8qIG5vdCBpbiBzcGVjICovCisvLyAgICB8IFNvdXJjZUVsZW1l
bnRzX05vTm9kZQorLy87CisKK1NvdXJjZUVsZW1lbnRzX05vTm9kZToKKyAgICBTb3VyY2VFbGVt
ZW50X05vTm9kZQorICB8IFNvdXJjZUVsZW1lbnRzX05vTm9kZSBTb3VyY2VFbGVtZW50X05vTm9k
ZQorOworCitTb3VyY2VFbGVtZW50X05vTm9kZToKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uX05v
Tm9kZQorICB8IFN0YXRlbWVudF9Ob05vZGUKKzsKKworLy8gRW5kIE5vTm9kZXMKKwogJSUKIAog
c3RhdGljIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZSh2b2lkKiBnbG9iYWxQdHIsIEV4
cHJlc3Npb25Ob2RlKiBsb2MsIE9wZXJhdG9yIG9wLCBFeHByZXNzaW9uTm9kZSogZXhwciwgYm9v
bCBsb2NIYXNBc3NpZ25tZW50cywgYm9vbCBleHBySGFzQXNzaWdubWVudHMsIGludCBzdGFydCwg
aW50IGRpdm90LCBpbnQgZW5kKQpJbmRleDogcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAzODU4MikKKysrIHBhcnNlci9MZXhlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRp
YyBib29sIGlzRGVjaW1hbERpZ2l0KGludCk7CiAKLXN0YXRpYyBjb25zdCBzaXplX3QgaW5pdGlh
bFJlYWRCdWZmZXJDYXBhY2l0eSA9IDMyOwotc3RhdGljIGNvbnN0IHNpemVfdCBpbml0aWFsU3Ry
aW5nVGFibGVDYXBhY2l0eSA9IDY0OwotCiBMZXhlcjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogICAgIDogeXlsaW5lbm8oMSkKICAgICAsIG1fcmVzdHJLZXl3b3JkKGZhbHNlKQpA
QCAtODMsOCArODAsNiBAQCBMZXhlcjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQog
ewogICAgIG1fYnVmZmVyOC5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0
eSk7CiAgICAgbV9idWZmZXIxNi5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBh
Y2l0eSk7Ci0gICAgbV9zdHJpbmdzLnJlc2VydmVDYXBhY2l0eShpbml0aWFsU3RyaW5nVGFibGVD
YXBhY2l0eSk7Ci0gICAgbV9pZGVudGlmaWVycy5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFN0cmlu
Z1RhYmxlQ2FwYWNpdHkpOwogfQogCiBMZXhlcjo6fkxleGVyKCkKQEAgLTEwMSwxMCArOTYsMTAg
QEAgdm9pZCBMZXhlcjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzbwogICAgIG1fc3RhY2tU
b2tlbiA9IC0xOwogICAgIG1fbGFzdFRva2VuID0gLTE7CiAKLSAgICBtX3Bvc2l0aW9uID0gMDsK
KyAgICBtX3Bvc2l0aW9uID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV9zb3VyY2UgPSAm
c291cmNlOwotICAgIG1fY29kZSA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgbV9sZW5ndGggPSBzb3Vy
Y2UubGVuZ3RoKCk7CisgICAgbV9jb2RlID0gc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKTsKKyAg
ICBtX2xlbmd0aCA9IHNvdXJjZS5lbmRPZmZzZXQoKTsKICAgICBtX3NraXBMRiA9IGZhbHNlOwog
ICAgIG1fc2tpcENSID0gZmFsc2U7CiAgICAgbV9lcnJvciA9IGZhbHNlOwpAQCAtNjA4LDMyICs2
MDMsMjggQEAgYm9vbCBMZXhlcjo6aXNMaW5lVGVybWluYXRvcigpCiAKIGJvb2wgTGV4ZXI6Omlz
SWRlbnRTdGFydChpbnQgYykKIHsKLSAgICByZXR1cm4gKGNhdGVnb3J5KGMpICYgKExldHRlcl9V
cHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0dGVyX1RpdGxlY2FzZSB8IExldHRlcl9N
b2RpZmllciB8IExldHRlcl9PdGhlcikpCi0gICAgICAgIHx8IGMgPT0gJyQnIHx8IGMgPT0gJ18n
OworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgYyA9PSAnJCcgfHwgYyA9PSAnXycgfHwg
KGNhdGVnb3J5KGMpICYgKExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0
dGVyX1RpdGxlY2FzZSB8IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9PdGhlcikpOwogfQogCiBi
b29sIExleGVyOjppc0lkZW50UGFydChpbnQgYykKIHsKLSAgICByZXR1cm4gKGNhdGVnb3J5KGMp
ICYgKExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0dGVyX1RpdGxlY2Fz
ZSB8IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9PdGhlcgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgTWFya19Ob25TcGFjaW5nIHwgTWFya19TcGFjaW5nQ29tYmluaW5nIHwgTnVtYmVy
X0RlY2ltYWxEaWdpdCB8IFB1bmN0dWF0aW9uX0Nvbm5lY3RvcikpCi0gICAgICAgIHx8IGMgPT0g
JyQnIHx8IGMgPT0gJ18nOworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgYyA9PSAnJCcg
fHwgYyA9PSAnXycgfHwgKGNhdGVnb3J5KGMpICYgKExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJf
TG93ZXJjYXNlIHwgTGV0dGVyX1RpdGxlY2FzZSB8IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9P
dGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWFya19Ob25TcGFjaW5nIHwgTWFy
a19TcGFjaW5nQ29tYmluaW5nIHwgTnVtYmVyX0RlY2ltYWxEaWdpdCB8IFB1bmN0dWF0aW9uX0Nv
bm5lY3RvcikpOwogfQogCiBzdGF0aWMgYm9vbCBpc0RlY2ltYWxEaWdpdChpbnQgYykKIHsKLSAg
ICByZXR1cm4gKGMgPj0gJzAnICYmIGMgPD0gJzknKTsKKyAgICByZXR1cm4gaXNBU0NJSURpZ2l0
KGMpOwogfQogCiBib29sIExleGVyOjppc0hleERpZ2l0KGludCBjKQogewotICAgIHJldHVybiAo
YyA+PSAnMCcgJiYgYyA8PSAnOScKLSAgICAgICAgfHwgYyA+PSAnYScgJiYgYyA8PSAnZicKLSAg
ICAgICAgfHwgYyA+PSAnQScgJiYgYyA8PSAnRicpOworICAgIHJldHVybiBpc0FTQ0lJSGV4RGln
aXQoYyk7IAogfQogCiBib29sIExleGVyOjppc09jdGFsRGlnaXQoaW50IGMpCiB7Ci0gICAgcmV0
dXJuIChjID49ICcwJyAmJiBjIDw9ICc3Jyk7CisgICAgcmV0dXJuIGlzQVNDSUlPY3RhbERpZ2l0
KGMpOwogfQogCiBpbnQgTGV4ZXI6Om1hdGNoUHVuY3R1YXRvcihpbnQmIGNoYXJQb3MsIGludCBj
MSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKQEAgLTg4OCwxNSArODc5LDcgQEAgYm9vbCBMZXhl
cjo6c2NhblJlZ0V4cCgpCiAKIHZvaWQgTGV4ZXI6OmNsZWFyKCkKIHsKLSAgICBkZWxldGVBbGxW
YWx1ZXMobV9zdHJpbmdzKTsKLSAgICBWZWN0b3I8VVN0cmluZyo+IG5ld1N0cmluZ3M7Ci0gICAg
bmV3U3RyaW5ncy5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFN0cmluZ1RhYmxlQ2FwYWNpdHkpOwot
ICAgIG1fc3RyaW5ncy5zd2FwKG5ld1N0cmluZ3MpOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1f
aWRlbnRpZmllcnMpOwotICAgIFZlY3RvcjxKU0M6OklkZW50aWZpZXIqPiBuZXdJZGVudGlmaWVy
czsKLSAgICBuZXdJZGVudGlmaWVycy5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFN0cmluZ1RhYmxl
Q2FwYWNpdHkpOwotICAgIG1faWRlbnRpZmllcnMuc3dhcChuZXdJZGVudGlmaWVycyk7CisgICAg
bV9pZGVudGlmaWVycy5yZXNpemUoMCk7CiAKICAgICBWZWN0b3I8Y2hhcj4gbmV3QnVmZmVyODsK
ICAgICBuZXdCdWZmZXI4LnJlc2VydmVDYXBhY2l0eShpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5
KTsKQEAgLTkxMCwxMSArODkzLDQgQEAgdm9pZCBMZXhlcjo6Y2xlYXIoKQogICAgIG1fZmxhZ3Mg
PSAwOwogfQogCi1JZGVudGlmaWVyKiBMZXhlcjo6bWFrZUlkZW50aWZpZXIoY29uc3QgVmVjdG9y
PFVDaGFyPiYgYnVmZmVyKQotewotICAgIEpTQzo6SWRlbnRpZmllciogaWRlbnRpZmllciA9IG5l
dyBKU0M6OklkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKTsKLSAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChpZGVudGlmaWVyKTsKLSAgICByZXR1cm4g
aWRlbnRpZmllcjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBwYXJzZXIvTGV4ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwYXJzZXIvTGV4ZXIuaAkocmV2aXNpb24gMzg1ODIpCisrKyBwYXJz
ZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTQgKzIzLDE0IEBACiAjaWZuZGVmIExl
eGVyX2gKICNkZWZpbmUgTGV4ZXJfaAogCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1
ZGUgIkxvb2t1cC5oIgotI2luY2x1ZGUgIlVTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSAiU2VnbWVudGVkVmVjdG9yLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFz
cyBJZGVudGlmaWVyOwogICAgIGNsYXNzIFJlZ0V4cDsKIAogICAgIGNsYXNzIExleGVyIDogTm9u
Y29weWFibGUgewpAQCAtODgsNyArODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KIAogICAgICAgICB2b2lkIGNs
ZWFyKCk7Ci0gICAgICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZShpbnQgb3BlbkJyYWNlLCBpbnQg
Y2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkgeyByZXR1cm4gU291cmNlQ29kZShtX3NvdXJjZS0+
cHJvdmlkZXIoKSwgbV9zb3VyY2UtPnN0YXJ0T2Zmc2V0KCkgKyBvcGVuQnJhY2UgKyAxLCBtX3Nv
dXJjZS0+c3RhcnRPZmZzZXQoKSArIGNsb3NlQnJhY2UsIGZpcnN0TGluZSk7IH0KKyAgICAgICAg
U291cmNlQ29kZSBzb3VyY2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQg
Zmlyc3RMaW5lKSB7IHJldHVybiBTb3VyY2VDb2RlKG1fc291cmNlLT5wcm92aWRlcigpLCBvcGVu
QnJhY2UgKyAxLCBjbG9zZUJyYWNlLCBmaXJzdExpbmUpOyB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwpAQCAtMTEyLDcgKzExMiwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZWNvcmQxNihpbnQpOwogICAgICAgICB2b2lkIHJl
Y29yZDE2KFVDaGFyKTsKIAotICAgICAgICBKU0M6OklkZW50aWZpZXIqIG1ha2VJZGVudGlmaWVy
KGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGJ1ZmZlcik7CisgICAgICAgIEpTQzo6SWRlbnRpZmllciog
bWFrZUlkZW50aWZpZXIoY29uc3QgVmVjdG9yPFVDaGFyPiYgYnVmZmVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChKU0M6OklkZW50aWZpZXIobV9nbG9iYWxE
YXRhLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXR1cm4g
Jm1faWRlbnRpZmllcnMubGFzdCgpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5ID0gMzI7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgaW5pdGlhbElkZW50aWZpZXJUYWJsZUNhcGFjaXR5ID0gNjQ7CiAKICAgICAg
ICAgaW50IHl5bGluZW5vOwogICAgICAgICBpbnQgeXljb2x1bW47CkBAIC0xNDgsOCArMTU1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtX25leHRPZmZzZXQyOwogICAgICAgICBp
bnQgbV9uZXh0T2Zmc2V0MzsKICAgICAgICAgCi0gICAgICAgIFZlY3RvcjxVU3RyaW5nKj4gbV9z
dHJpbmdzOwotICAgICAgICBWZWN0b3I8SlNDOjpJZGVudGlmaWVyKj4gbV9pZGVudGlmaWVyczsK
KyAgICAgICAgU2VnbWVudGVkVmVjdG9yPEpTQzo6SWRlbnRpZmllciwgaW5pdGlhbElkZW50aWZp
ZXJUYWJsZUNhcGFjaXR5PiBtX2lkZW50aWZpZXJzOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSog
bV9nbG9iYWxEYXRhOwogCkluZGV4OiBwYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBh
cnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDM4NTgyKQorKysgcGFyc2VyL05vZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM3NywyMyArMjM3Nyw1NiBAQCB2b2lkIFBhcmFtZXRlck5vZGU6OnJl
bGVhc2VOb2RlcyhOb2RlUmVsCiAgICAgcmVsZWFzZXIucmVsZWFzZShtX25leHQpOwogfQogCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2NvcGVOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVNjb3BlTm9k
ZURhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNjb3BlTm9kZTo6U2NvcGVOb2Rl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3Vy
Y2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayog
ZnVuY1N0YWNrLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAg
OiBCbG9ja05vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4pCi0gICAgLCBtX3NvdXJjZShzb3VyY2Up
Ci0gICAgLCBtX2ZlYXR1cmVzKGZlYXR1cmVzKQotICAgICwgbV9udW1Db25zdGFudHMobnVtQ29u
c3RhbnRzKQorU2NvcGVOb2RlRGF0YTo6U2NvcGVOb2RlRGF0YShTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBpbnQg
bnVtQ29uc3RhbnRzKQorICAgIDogbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogewogICAg
IGlmICh2YXJTdGFjaykKICAgICAgICAgbV92YXJTdGFjayA9ICp2YXJTdGFjazsKICAgICBpZiAo
ZnVuY1N0YWNrKQogICAgICAgICBtX2Z1bmN0aW9uU3RhY2sgPSAqZnVuY1N0YWNrOworICAgIGlm
IChjaGlsZHJlbikKKyAgICAgICAgY2hpbGRyZW4tPnJlbGVhc2VDb250ZW50c0ludG9WZWN0b3Io
bV9jaGlsZHJlbik7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTY29w
ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2NvcGVOb2RlOjpTY29wZU5v
ZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogU3RhdGVtZW50Tm9kZShnbG9iYWxE
YXRhKQorICAgICwgbV9mZWF0dXJlcyhOb0ZlYXR1cmVzKQoreworI2lmIEVOQUJMRShPUENPREVf
U0FNUExJTkcpCisgICAgZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+bm90aWZ5
T2ZTY29wZSh0aGlzKTsKKyNlbmRpZgorfQorCitTY29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU3RhdGVt
ZW50Tm9kZShnbG9iYWxEYXRhKQorICAgICwgbV9kYXRhKG5ldyBTY29wZU5vZGVEYXRhKGNoaWxk
cmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBudW1Db25zdGFudHMpKQorICAgICwgbV9mZWF0dXJl
cyhmZWF0dXJlcykKKyAgICAsIG1fc291cmNlKHNvdXJjZSkKK3sKICNpZiBFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQogICAgIGdsb2JhbERhdGEtPmludGVycHJldGVyLT5zYW1wbGVyKCktPm5vdGlm
eU9mU2NvcGUodGhpcyk7CiAjZW5kaWYKIH0KIAorU2NvcGVOb2RlOjp+U2NvcGVOb2RlKCkKK3sK
KyAgICBOb2RlUmVsZWFzZXI6OnJlbGVhc2VBbGxOb2Rlcyh0aGlzKTsKK30KKwordm9pZCBTY29w
ZU5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzZXImIHJlbGVhc2VyKQoreworICAgIGlmICgh
bV9kYXRhKQorICAgICAgICByZXR1cm47CisgICAgc2l6ZV90IHNpemUgPSBtX2RhdGEtPm1fY2hp
bGRyZW4uc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICByZWxlYXNlci5yZWxlYXNlKG1fZGF0YS0+bV9jaGlsZHJlbltpXSk7Cit9CisKKwogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNr
LCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29k
ZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQpAQCAtMjQzNSw2ICsyNDY4LDEw
IEBAIHZvaWQgRXZhbE5vZGU6OmdlbmVyYXRlQnl0ZWNvZGUoU2NvcGVDaGEKIAogICAgIEJ5dGVj
b2RlR2VuZXJhdG9yIGdlbmVyYXRvcih0aGlzLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNj
b3BlQ2hhaW4sICZtX2NvZGUtPnN5bWJvbFRhYmxlLCBtX2NvZGUuZ2V0KCkpOwogICAgIGdlbmVy
YXRvci5nZW5lcmF0ZSgpOworCisgICAgLy8gRXZhbCBjb2RlIG5lZWRzIHRvIGhhbmcgb24gdG8g
aXRzIGRlY2xhcmF0aW9uIHN0YWNrcyB0byBrZWVwIGRlY2xhcmF0aW9uIGluZm8gYWxpdmUgdW50
aWwgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUgdGltZSwKKyAgICAvLyBzbyB0aGUgZW50aXJlIFNjb3Bl
Tm9kZURhdGEgY2Fubm90IGJlIGRlc3RveWVkLgorICAgIGNoaWxkcmVuKCkuc2hyaW5rQ2FwYWNp
dHkoMCk7CiB9CiAKIEV2YWxOb2RlKiBFdmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1
bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCkBAIC0yNDQ0LDYgKzI0ODEsMTQgQEAg
RXZhbE5vZGUqIEV2YWxOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKgogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25Cb2R5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCitGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhKQorICAgICwgbV9w
YXJhbWV0ZXJzKDApCisgICAgLCBtX3BhcmFtZXRlckNvdW50KDApCisgICAgLCBtX3JlZkNvdW50
KDApCit7Cit9CisKIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJT
dGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBTY29w
ZU5vZGUoZ2xvYmFsRGF0YSwgc291cmNlQ29kZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3Rh
Y2ssIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiAgICAgLCBtX3BhcmFtZXRlcnMoMCkKQEAgLTI0
ODIsOSArMjUyNyw5IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6bWFyaygpCiAgICAgICAgIG1f
Y29kZS0+bWFyaygpOwogfQogCi1GdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpj
cmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBDb2RlRmVhdHVy
ZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlv
bkJvZHlOb2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVy
biBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1
bmNTdGFjaywgU291cmNlQ29kZSgpLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKKyAgICByZXR1
cm4gbmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSk7CiB9CiAKIEZ1bmN0aW9uQm9keU5v
ZGUqIEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNr
KiBmdW5jU3RhY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKQEAgLTI0OTQsNiArMjUzOSwxMiBAQCBGdW5jdGlv
bkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlOb2RlOjpjcmVhCiAKIHZvaWQgRnVuY3Rpb25Cb2R5Tm9k
ZTo6Z2VuZXJhdGVCeXRlY29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Cisg
ICAgLy8gVGhpcyBicmFuY2ggaXMgb25seSBuZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBzdGlsbCBj
cmVhdGUgYSBub24tc3R1YiBGdW5jdGlvbkJvZHlOb2RlIGJ5CisgICAgLy8gY2FsbGluZyBQYXJz
ZXI6OnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KCkuICAgCisgICAgaWYgKCFkYXRhKCkpCisgICAg
ICAgIHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLT5wYXJzZXItPnJlcGFyc2Uoc2NvcGVDaGFp
bk5vZGUtPmdsb2JhbERhdGEsIHRoaXMpOworICAgIEFTU0VSVChkYXRhKCkpOworCiAgICAgU2Nv
cGVDaGFpbiBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKIApAQCAtMjUwMSw2ICsy
NTUyLDggQEAgdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpnZW5lcmF0ZUJ5dGVjb2RlKAogCiAgICAg
Qnl0ZWNvZGVHZW5lcmF0b3IgZ2VuZXJhdG9yKHRoaXMsIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIo
KSwgc2NvcGVDaGFpbiwgJm1fY29kZS0+c3ltYm9sVGFibGUsIG1fY29kZS5nZXQoKSk7CiAgICAg
Z2VuZXJhdG9yLmdlbmVyYXRlKCk7CisKKyAgICBkZXN0cm95RGF0YSgpOwogfQogCiBSZWdpc3Rl
cklEKiBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCopCkBAIC0yNTM3LDYgKzI1OTAsOCBAQCB2b2lkIFByb2dyYW1O
b2RlOjpnZW5lcmF0ZUJ5dGVjb2RlKFNjb3BlCiAgICAgCiAgICAgQnl0ZWNvZGVHZW5lcmF0b3Ig
Z2VuZXJhdG9yKHRoaXMsIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJmds
b2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlLmdldCgpKTsKICAgICBnZW5lcmF0b3Iu
Z2VuZXJhdGUoKTsKKworICAgIGRlc3Ryb3lEYXRhKCk7CiB9CiAKIFVTdHJpbmcgRnVuY3Rpb25C
b2R5Tm9kZTo6cGFyYW1TdHJpbmcoKSBjb25zdApJbmRleDogcGFyc2VyL05vZGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDM4NTgyKQorKysgcGFyc2VyL05vZGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw2ICsxNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdmlydHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nlc3Nvck5v
ZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc0RvdEFjY2Vzc29yTm9kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzRnVuY0V4cHJOb2RlKCkgY29uc3QgSlND
X0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfSAKIAogICAgICAgICB2aXJ0dWFsIEV4cHJlc3Np
b25Ob2RlKiBzdHJpcFVuYXJ5UGx1cygpIHsgcmV0dXJuIHRoaXM7IH0KIApAQCAtMTkxLDYgKzE5
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3Rh
dGVtZW50KCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNSZXR1cm5Ob2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBm
YWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNFeHByU3RhdGVtZW50Tm9kZSgpIGNvbnN0
IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNCbG9jaygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAg
dmlydHVhbCBib29sIGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7
IH0KQEAgLTE3NDIsOCArMTc0NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBib29sIGlzRXhwclN0YXRlbWVudE5vZGUoKSBjb25z
dCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKwogICAgICAgICB2aXJ0dWFsIFJlZ2lz
dGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
SlNDX0ZBU1RfQ0FMTDsKIAorICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhwcigpIGNvbnN0IHsg
cmV0dXJuIG1fZXhwci5nZXQoKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAgfTsKQEAgLTIwNTYsNDMgKzIwNjIsNjMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxQYXJhbWV0ZXJOb2RlPiBtX25leHQ7CiAgICAg
fTsKIAotICAgIGNsYXNzIFNjb3BlTm9kZSA6IHB1YmxpYyBCbG9ja05vZGUgeworICAgIHN0cnVj
dCBTY29wZU5vZGVEYXRhIHsKKyAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2sgVmFyU3RhY2s7CisgICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0
aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKKworICAgICAgICBTY29wZU5vZGVEYXRhKFNvdXJjZUVs
ZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgaW50IG51bUNvbnN0YW50cyk7CisK
KyAgICAgICAgVmFyU3RhY2sgbV92YXJTdGFjazsKKyAgICAgICAgRnVuY3Rpb25TdGFjayBtX2Z1
bmN0aW9uU3RhY2s7CisgICAgICAgIGludCBtX251bUNvbnN0YW50czsKKyAgICAgICAgU3RhdGVt
ZW50VmVjdG9yIG1fY2hpbGRyZW47CisgICAgfTsKKworICAgIGNsYXNzIFNjb3BlTm9kZSA6IHB1
YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgRGVjbGFy
YXRpb25TdGFja3M6OlZhclN0YWNrIFZhclN0YWNrOwogICAgICAgICB0eXBlZGVmIERlY2xhcmF0
aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrIEZ1bmN0aW9uU3RhY2s7CiAKKyAgICAgICAgU2NvcGVO
b2RlKEpTR2xvYmFsRGF0YSopIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIFNjb3BlTm9kZShKU0ds
b2JhbERhdGEqLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpIEpTQ19GQVNU
X0NBTEw7CisgICAgICAgIHZpcnR1YWwgflNjb3BlTm9kZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlciYpOworCisgICAgICAgIHZvaWQgc2V0RGF0YShT
Y29wZU5vZGVEYXRhKiBkYXRhKSB7IG1fZGF0YS5zZXQoZGF0YSk7IH0KKyAgICAgICAgU2NvcGVO
b2RlRGF0YSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorICAgICAgICB2
b2lkIGRlc3Ryb3lEYXRhKCkgeyBtX2RhdGEuY2xlYXIoKTsgfQogCiAgICAgICAgIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgICAgIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZVVSTCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9z
b3VyY2UucHJvdmlkZXIoKS0+dXJsKCk7IH0KICAgICAgICAgaW50cHRyX3Qgc291cmNlSUQoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92aWRlcigpLT5hc0lEKCk7IH0KIAorICAgICAgICB2
b2lkIHNldEZlYXR1cmVzKENvZGVGZWF0dXJlcyBmZWF0dXJlcykgeyBtX2ZlYXR1cmVzID0gZmVh
dHVyZXM7IH0KICAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVy
ZXMgJiBFdmFsRmVhdHVyZTsgfQogICAgICAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsgfQogICAgICAgICB2b2lkIHNl
dFVzZXNBcmd1bWVudHMoKSB7IG1fZmVhdHVyZXMgfD0gQXJndW1lbnRzRmVhdHVyZTsgfQogICAg
ICAgICBib29sIHVzZXNUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIFRoaXNGZWF0
dXJlOyB9CiAgICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
ZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IENsb3N1cmVGZWF0dXJlIHwgV2l0aEZlYXR1cmUgfCBD
YXRjaEZlYXR1cmUpOyB9CiAKLSAgICAgICAgVmFyU3RhY2smIHZhclN0YWNrKCkgeyByZXR1cm4g
bV92YXJTdGFjazsgfQotICAgICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyBy
ZXR1cm4gbV9mdW5jdGlvblN0YWNrOyB9CisgICAgICAgIFZhclN0YWNrJiB2YXJTdGFjaygpIHsg
QVNTRVJUKG1fZGF0YSk7IHJldHVybiBtX2RhdGEtPm1fdmFyU3RhY2s7IH0KKyAgICAgICAgRnVu
Y3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjaygpIHsgQVNTRVJUKG1fZGF0YSk7IHJldHVybiBtX2Rh
dGEtPm1fZnVuY3Rpb25TdGFjazsgfQorCisgICAgICAgIFN0YXRlbWVudFZlY3RvciYgY2hpbGRy
ZW4oKSB7IEFTU0VSVChtX2RhdGEpOyByZXR1cm4gbV9kYXRhLT5tX2NoaWxkcmVuOyB9CiAKICAg
ICAgICAgaW50IG5lZWRlZENvbnN0YW50cygpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2RhdGEpOwogICAgICAgICAgICAgLy8gV2UgbWF5IG5lZWQgMiBtb3JlIGNvbnN0YW50cyB0
aGFuIHRoZSBjb3VudCBnaXZlbiBieSB0aGUgcGFyc2VyLAogICAgICAgICAgICAgLy8gYmVjYXVz
ZSBvZiB0aGUgdmFyaW91cyB1c2VzIG9mIGpzVW5kZWZpbmVkKCkgYW5kIGpzTnVsbCgpLgotICAg
ICAgICAgICAgcmV0dXJuIG1fbnVtQ29uc3RhbnRzICsgMjsKKyAgICAgICAgICAgIHJldHVybiBt
X2RhdGEtPm1fbnVtQ29uc3RhbnRzICsgMjsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICB2b2lkIHNldFNvdXJjZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpIHsgbV9zb3Vy
Y2UgPSBzb3VyY2U7IH0KIAotICAgICAgICBWYXJTdGFjayBtX3ZhclN0YWNrOwotICAgICAgICBG
dW5jdGlvblN0YWNrIG1fZnVuY3Rpb25TdGFjazsKLQogICAgIHByaXZhdGU6Ci0gICAgICAgIFNv
dXJjZUNvZGUgbV9zb3VyY2U7CisgICAgICAgIE93blB0cjxTY29wZU5vZGVEYXRhPiBtX2RhdGE7
CiAgICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwotICAgICAgICBpbnQgbV9udW1Db25z
dGFudHM7CisgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgfTsKIAogICAgIGNsYXNz
IFByb2dyYW1Ob2RlIDogcHVibGljIFNjb3BlTm9kZSB7CkBAIC0yMTQxLDkgKzIxNjcsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3Bl
Tm9kZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlKEpTR2xvYmFsRGF0YSopIEpTQ19GQVNUX0NB
TEw7CiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRh
KiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOwot
ICAgICAgICBzdGF0aWMgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlKEpTR2xvYmFsRGF0YSosIFNv
dXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB+RnVuY3Rpb25Cb2R5Tm9k
ZSgpOworICAgICAgICB2aXJ0dWFsIH5GdW5jdGlvbkJvZHlOb2RlKCk7CiAKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciogcGFyYW1ldGVycygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4g
bV9wYXJhbWV0ZXJzOyB9CiAgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0KQEAgLTIxOTMsNiArMjIxOSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKEpTR2xvYmFsRGF0YSopIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5v
ZGUoSlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3Rh
Y2sqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKSBK
U0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZvaWQgZ2VuZXJhdGVCeXRlY29kZShTY29wZUNoYWlu
Tm9kZSopIEpTQ19GQVNUX0NBTEw7CkBAIC0yMjE3LDYgKzIyNDQsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCB+RnVuY0V4cHJOb2RlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJik7CiAKKyAgICAgICAgdmlydHVhbCBib29sIGlz
RnVuY0V4cHJOb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9IAorCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICBKU0Z1bmN0aW9uKiBt
YWtlRnVuY3Rpb24oRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSBKU0NfRkFTVF9DQUxMOwog
CkluZGV4OiBwYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYXJzZXIvUGFyc2VyLmNw
cAkocmV2aXNpb24gMzg1ODIpCisrKyBwYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsMjkgQEAgdm9pZCBQYXJzZXI6OnBhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RAogICAgIH0KIH0KIAordm9pZCBQYXJzZXI6OnJlcGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlKQoreworICAgIEFTU0VSVCgh
ZnVuY3Rpb25Cb2R5Tm9kZS0+ZGF0YSgpKTsKKworICAgIG1fc291cmNlID0gJmZ1bmN0aW9uQm9k
eU5vZGUtPnNvdXJjZSgpOworICAgIHBhcnNlKGdsb2JhbERhdGEsIDAsIDApOworICAgIEFTU0VS
VChtX3NvdXJjZUVsZW1lbnRzKTsKKyAgICBmdW5jdGlvbkJvZHlOb2RlLT5zZXREYXRhKG5ldyBT
Y29wZU5vZGVEYXRhKG1fc291cmNlRWxlbWVudHMuZ2V0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRl
Y2xhcmF0aW9ucy0+ZGF0YSA6IDAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID8gJm1fZnVuY0RlY2xhcmF0aW9ucy0+
ZGF0YSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX251bUNvbnN0YW50cykpOworCisgICAgYm9vbCB1c2VzQXJndW1lbnRzID0gZnVuY3Rpb25C
b2R5Tm9kZS0+dXNlc0FyZ3VtZW50cygpOworICAgIGZ1bmN0aW9uQm9keU5vZGUtPnNldEZlYXR1
cmVzKG1fZmVhdHVyZXMpOworICAgIGlmICh1c2VzQXJndW1lbnRzICYmICFmdW5jdGlvbkJvZHlO
b2RlLT51c2VzQXJndW1lbnRzKCkpCisgICAgICAgIGZ1bmN0aW9uQm9keU5vZGUtPnNldFVzZXNB
cmd1bWVudHMoKTsKKworICAgIG1fc291cmNlID0gMDsKKyAgICBtX3NvdXJjZUVsZW1lbnRzID0g
MDsKKyAgICBtX3ZhckRlY2xhcmF0aW9ucyA9IDA7CisgICAgbV9mdW5jRGVjbGFyYXRpb25zID0g
MDsKK30KKwogdm9pZCBQYXJzZXI6OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNv
dXJjZUVsZW1lbnRzLCBQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2s+KiB2YXJTdGFjaywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZXJS
ZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjaz4qIGZ1bmNTdGFj
aywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMp
CiB7CkluZGV4OiBwYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFyc2VyL1BhcnNlci5o
CShyZXZpc2lvbiAzODU4MikKKysrIHBhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHRlbXBs
YXRlIDxjbGFzcyBQYXJzZWROb2RlPiBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEV4ZWNT
dGF0ZSosIERlYnVnZ2VyKiwgY29uc3QgU291cmNlQ29kZSYsIGludCogZXJyTGluZSA9IDAsIFVT
dHJpbmcqIGVyck1zZyA9IDApOwogCisgICAgICAgIHZvaWQgcmVwYXJzZShKU0dsb2JhbERhdGEq
LCBGdW5jdGlvbkJvZHlOb2RlKik7CisKICAgICAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNv
dXJjZUVsZW1lbnRzKiwgUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZh
clN0YWNrPiosIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VyUmVmQ291bnRl
ZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KiwgQ29kZUZlYXR1cmVzIGZl
YXR1cmVzLCBpbnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMpOwogCkluZGV4OiBwYXJzZXIv
U291cmNlQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhcnNlci9Tb3VyY2VDb2RlLmgJKHJldmlzaW9u
IDM4NTgyKQorKysgcGFyc2VyL1NvdXJjZUNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlci5nZXQoKTsgfQogICAgICAgICBpbnQgZmlyc3RM
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmU7IH0KICAgICAgICAgaW50IHN0YXJ0T2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENoYXI7IH0KKyAgICAgICAgaW50IGVuZE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ2hhcjsgfQogICAgICAgICBjb25zdCBVQ2hhciogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXItPmRhdGEoKSArIG1fc3RhcnRDaGFyOyB9CiAg
ICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2VuZENoYXIgLSBtX3N0YXJ0Q2hh
cjsgfQogCkluZGV4OiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM4NTgyKQorKysg
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNzUg
KzY2LDU3IEBAIENhbGxUeXBlIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmdldENhbGxEYXQKICAgICBy
ZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCitzdGF0aWMgRnVuY3Rpb25Cb2R5Tm9kZSogZ2V0RnVu
Y3Rpb25Cb2R5KFByb2dyYW1Ob2RlKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBTdGF0ZW1lbnRWZWN0b3ImIGNoaWxkcmVuID0gcHJvZ3Jh
bS0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDEpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRXhwclN0YXRlbWVudE5vZGUqIGV4cHJTdGF0ZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFeHByU3RhdGVtZW50Tm9kZSo+KGNoaWxkcmVuWzBdLmdldCgpKTsgCisgICAgQVNTRVJU
KGV4cHJTdGF0ZW1lbnQtPmlzRXhwclN0YXRlbWVudE5vZGUoKSk7CisgICAgaWYgKCFleHByU3Rh
dGVtZW50IHx8ICFleHByU3RhdGVtZW50LT5pc0V4cHJTdGF0ZW1lbnROb2RlKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgRnVuY0V4cHJOb2RlKiBmdW5jRXhwciA9IHN0YXRpY19jYXN0PEZ1
bmNFeHByTm9kZSo+KGV4cHJTdGF0ZW1lbnQtPmV4cHIoKSk7CisgICAgQVNTRVJUKGZ1bmNFeHBy
LT5pc0Z1bmNFeHByTm9kZSgpKTsKKyAgICBpZiAoIWZ1bmNFeHByIHx8ICFmdW5jRXhwci0+aXNG
dW5jRXhwck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgRnVuY3Rpb25Cb2R5
Tm9kZSogZnVuY3Rpb25Cb2R5ID0gZnVuY0V4cHItPmJvZHkoKTsKKyAgICBBU1NFUlQoZnVuY3Rp
b25Cb2R5KTsKKyAgICByZXR1cm4gZnVuY3Rpb25Cb2R5OworfQorCiAvLyBFQ01BIDE1LjMuMiBU
aGUgRnVuY3Rpb24gQ29uc3RydWN0b3IKIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IElkZW50aWZpZXImIGZ1bmN0
aW9uTmFtZSwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcikKIHsKLSAg
ICBVU3RyaW5nIHAoIiIpOwotICAgIFVTdHJpbmcgYm9keTsKLSAgICBpbnQgYXJnc1NpemUgPSBh
cmdzLnNpemUoKTsKLSAgICBpZiAoYXJnc1NpemUgPT0gMCkKLSAgICAgICAgYm9keSA9ICIiOwot
ICAgIGVsc2UgaWYgKGFyZ3NTaXplID09IDEpCi0gICAgICAgIGJvZHkgPSBhcmdzLmF0KGV4ZWMs
IDApLT50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHByb2dyYW07CisgICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpKQorICAgICAgICBwcm9ncmFtID0gIihmdW5jdGlvbigpe30pIjsKKyAgICBlbHNl
IGlmIChhcmdzLnNpemUoKSA9PSAxKQorICAgICAgICBwcm9ncmFtID0gIihmdW5jdGlvbigpeyIg
KyBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSArICJ9KSI7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIHAgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKLSAgICAgICAgZm9y
IChpbnQgayA9IDE7IGsgPCBhcmdzU2l6ZSAtIDE7IGsrKykKLSAgICAgICAgICAgIHAgKz0gIiwi
ICsgYXJncy5hdChleGVjLCBrKS0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIGJvZHkgPSBhcmdz
LmF0KGV4ZWMsIGFyZ3NTaXplIC0gMSktPnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBwcm9ncmFt
ID0gIihmdW5jdGlvbigiICsgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgYXJncy5zaXplKCkgLSAxOyBpKyspCisgICAgICAg
ICAgICBwcm9ncmFtICs9ICIsIiArIGFyZ3MuYXQoZXhlYywgaSktPnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICBwcm9ncmFtICs9ICIpeyIgKyBhcmdzLmF0KGV4ZWMsIGFyZ3Muc2l6ZSgpIC0gMSkt
PnRvU3RyaW5nKGV4ZWMpICsgIn0pIjsKICAgICB9CiAKLSAgICAvLyBwYXJzZSB0aGUgc291cmNl
IGNvZGUKICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5nIGVyck1zZzsKLSAgICBTb3VyY2VD
b2RlIHNvdXJjZSA9IG1ha2VTb3VyY2UoYm9keSwgc291cmNlVVJMLCBsaW5lTnVtYmVyKTsKLSAg
ICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5ID0gZXhlYy0+Z2xvYmFsRGF0
YSgpLnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYywgZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKKyAg
ICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2UocHJvZ3JhbSwgc291cmNlVVJMLCBsaW5l
TnVtYmVyKTsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gZXhlYy0+Z2xv
YmFsRGF0YSgpLnBhcnNlci0+cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIGV4ZWMtPmR5bmFtaWNH
bG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSwgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CiAK
LSAgICAvLyBObyBwcm9ncmFtIG5vZGUgPT0gc3ludGF4IGVycm9yIC0gdGhyb3cgYSBzeW50YXgg
ZXJyb3IKKyAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHkgPSBnZXRGdW5jdGlvbkJv
ZHkocHJvZ3JhbU5vZGUuZ2V0KCkpOwogICAgIGlmICghZnVuY3Rpb25Cb2R5KQotICAgICAgICAv
LyBXZSBjYW4ndCByZXR1cm4gYSBDb21wbGV0aW9uKFRocm93KSBoZXJlLCBzbyBqdXN0IHNldCB0
aGUgZXhjZXB0aW9uCi0gICAgICAgIC8vIGFuZCByZXR1cm4gaXQKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlLnByb3Zp
ZGVyKCktPmFzSUQoKSwgc291cmNlLnByb3ZpZGVyKCktPnVybCgpKTsKIAotICAgIC8vIHBhcnNl
IHBhcmFtZXRlciBsaXN0LiB0aHJvdyBzeW50YXggZXJyb3Igb24gaWxsZWdhbCBpZGVudGlmaWVy
cwotICAgIGludCBsZW4gPSBwLnNpemUoKTsKLSAgICBjb25zdCBVQ2hhciogYyA9IHAuZGF0YSgp
OwotICAgIGludCBpID0gMDsKLSAgICBVU3RyaW5nIHBhcmFtOwotICAgIFZlY3RvcjxJZGVudGlm
aWVyPiBwYXJhbWV0ZXJzOwotICAgIHdoaWxlIChpIDwgbGVuKSB7Ci0gICAgICAgIHdoaWxlICgq
YyA9PSAnICcgJiYgaSA8IGxlbikKLSAgICAgICAgICAgIGMrKywgaSsrOwotICAgICAgICBpZiAo
TGV4ZXI6OmlzSWRlbnRTdGFydChjWzBdKSkgeyAgLy8gZWxzZSBlcnJvcgotICAgICAgICAgICAg
cGFyYW0gPSBVU3RyaW5nKGMsIDEpOwotICAgICAgICAgICAgYysrLCBpKys7Ci0gICAgICAgICAg
ICB3aGlsZSAoaSA8IGxlbiAmJiAoTGV4ZXI6OmlzSWRlbnRQYXJ0KGNbMF0pKSkgewotICAgICAg
ICAgICAgICAgIHBhcmFtLmFwcGVuZCgqYyk7Ci0gICAgICAgICAgICAgICAgYysrLCBpKys7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiAqYyA9PSAnICcpCi0g
ICAgICAgICAgICAgICAgYysrLCBpKys7Ci0gICAgICAgICAgICBpZiAoaSA9PSBsZW4pIHsKLSAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChJZGVudGlmaWVyKGV4ZWMsIHBhcmFtKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCpjID09ICcs
JykgewotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKElkZW50aWZpZXIoZXhlYywg
cGFyYW0pKTsKLSAgICAgICAgICAgICAgICBjKyssIGkrKzsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0gLy8gZWxzZSBlcnJvcgotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiU3ludGF4IGVycm9yIGluIHBhcmFt
ZXRlciBsaXN0Iik7Ci0gICAgfQotICAgIHNpemVfdCBjb3VudCA9IHBhcmFtZXRlcnMuc2l6ZSgp
OwotICAgIGZ1bmN0aW9uQm9keS0+ZmluaXNoUGFyc2luZyhwYXJhbWV0ZXJzLnJlbGVhc2VCdWZm
ZXIoKSwgY291bnQpOwotCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVl
KCkpOwotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4
ZWMsIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25Cb2R5LmdldCgpLCBzY29wZUNoYWluLm5vZGUoKSk7
Ci0KLSAgICBKU09iamVjdCogcHJvdG90eXBlID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
Ci0gICAgcHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBmdW5jdGlvbiwgRG9udEVudW0pOwotICAgIGZ1bmN0aW9uLT5wdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RGVsZXRlKTsKLSAgICBy
ZXR1cm4gZnVuY3Rpb247CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBm
dW5jdGlvbk5hbWUsIGZ1bmN0aW9uQm9keSwgc2NvcGVDaGFpbi5ub2RlKCkpOwogfQogCiAvLyBF
Q01BIDE1LjMuMiBUaGUgRnVuY3Rpb24gQ29uc3RydWN0b3IKSW5kZXg6IHJ1bnRpbWUvSWRlbnRp
Zmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJ1bnRpbWUvSWRlbnRpZmllci5oCShyZXZpc2lvbiAzODU4
MikKKysrIHJ1bnRpbWUvSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAgICAgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgY2hhciopOworICAgICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBjaGFyKik7CiAgICAg
CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlbW92ZShVU3RyaW5nOjpSZXAqKTsKIApAQCAtMTMyLDYg
KzEzMywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVx
dWFsKGEsIGIpOwogICAgIH0KIAorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRl
bnRpZmllciYgYSwgY29uc3QgY2hhciogYikKKyAgICB7CisgICAgICAgIHJldHVybiAhSWRlbnRp
Zmllcjo6ZXF1YWwoYSwgYik7CisgICAgfQorCiAgICAgSWRlbnRpZmllclRhYmxlKiBjcmVhdGVJ
ZGVudGlmaWVyVGFibGUoKTsKICAgICB2b2lkIGRlbGV0ZUlkZW50aWZpZXJUYWJsZShJZGVudGlm
aWVyVGFibGUqKTsKIAo=
</data>
<flag name="review"
          id="11719"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>