<?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>72835</bug_id>
          
          <creation_ts>2011-11-20 13:10:05 -0800</creation_ts>
          <short_desc>Web Inspector: [protocol] generate C++ classes for protocol JSON named types</short_desc>
          <delta_ts>2011-12-12 07:29:40 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>73205</dependson>
    
    <dependson>73835</dependson>
          <blocked>72861</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Rybin">peter.rybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>paroga</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>506572</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-20 13:10:05 -0800</bug_when>
    <thetext>Extend CodeGeneratorInspector.py functionality in a wake of preparing internal typed C++ API for WebKit Remote Debugging protocol.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506576</commentid>
    <comment_count>1</comment_count>
      <attachid>115996</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-20 13:23:20 -0800</bug_when>
    <thetext>Created attachment 115996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506587</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-11-20 14:19:07 -0800</bug_when>
    <thetext>What is the C/C++ API going to be used for? (Just curious.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506603</commentid>
    <comment_count>3</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-20 15:29:41 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; What is the C/C++ API going to be used for? (Just curious.)

While our remote debugging protocol is well-defined and published nowdays, we don&apos;t have even runtime asserts that actual outgoing messages conform. This API will provide compile-time guarantee that C++ code builds outgoing messages strictly as as declared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506696</commentid>
    <comment_count>4</comment_count>
      <attachid>115996</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-11-20 21:47:41 -0800</bug_when>
    <thetext>Comment on attachment 115996
Patch

could you please also provide a sample file and InspectorBackendDispatcher.cpp/h files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506760</commentid>
    <comment_count>5</comment_count>
      <attachid>116041</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-21 00:23:24 -0800</bug_when>
    <thetext>Created attachment 116041
Sample generated file (condensed form with C preprocessor defines)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506762</commentid>
    <comment_count>6</comment_count>
      <attachid>116042</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-21 00:24:06 -0800</bug_when>
    <thetext>Created attachment 116042
Sample generated file (long form)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506774</commentid>
    <comment_count>7</comment_count>
      <attachid>116046</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-21 00:42:24 -0800</bug_when>
    <thetext>Created attachment 116046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506776</commentid>
    <comment_count>8</comment_count>
      <attachid>116047</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-21 00:45:27 -0800</bug_when>
    <thetext>Created attachment 116047
Sample generated file (condensed form with C preprocessor defines)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507970</commentid>
    <comment_count>9</comment_count>
      <attachid>116046</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-11-23 00:17:43 -0800</bug_when>
    <thetext>Comment on attachment 116046
Patch

After the next round of review I decided that I&apos;m against this implementation of native data classes for Inspector protocol. The plain version looks too long and complex. The variant with macros just masks this complexity. The generator code with support for both versions looks weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507974</commentid>
    <comment_count>10</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-11-23 00:22:19 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 116046 [details])
&gt; After the next round of review I decided that I&apos;m against this implementation of native data classes for Inspector protocol. The plain version looks too long and complex. The variant with macros just masks this complexity. The generator code with support for both versions looks weird.


the sample template based version for discussion.

#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;map&gt;

typedef std::map&lt;std::string, std::string&gt; map_type; // sample data container

class ProtocolObjectFoo {
public:
  enum {
    NO_FIELDS_SET = 0,
    FOO_SET = 1,
    BAR_SET = 2,
    BAZZ_SET = 4,
    ALL_FIELDS_SET = (FOO_SET | BAR_SET | BAZZ_SET)
  };

  template&lt;int n&gt; class Builder {
   private:
    friend class ProtocolObjectFoo;
    Builder&lt;n&gt;() {
      static_assert(n == 0, &quot;Builder&lt;n&gt; with n not equal to 0 was called&quot;);
      m_result = new map_type();
    }
    template&lt;int m&gt; operator Builder&lt;m&gt;&amp; () {
      return *reinterpret_cast&lt;Builder&lt;m&gt;*&gt;(this);
    }
    map_type *m_result;
    
   public:
    Builder&lt;n | FOO_SET&gt;&amp; setFoo(std::string value) {
      static_assert((n &amp; FOO_SET) == 0, &quot;ProtocolObjectFoo::setFoo was called second time&quot;);
      (*m_result)[&quot;foo&quot;] = value;
      return *this;
    }
    Builder&lt;n | BAR_SET&gt;&amp; setBar(std::string value) {
      static_assert((n &amp; BAR_SET) == 0, &quot;ProtocolObjectFoo::setBar was called second time&quot;);
      (*m_result)[&quot;bar&quot;] = value;
      return *this;
    }
    Builder&lt;n | BAZZ_SET&gt;&amp; setBazz(std::string value) {
      static_assert((n &amp; BAZZ_SET) == 0, &quot;ProtocolObjectFoo::setBazz was called second time&quot;);
      (*m_result)[&quot;buzz&quot;] = value;
        return *this;
    }
    operator map_type*() {
      static_assert(n == ALL_FIELDS_SET, &quot;ProtocolObjectFoo not all the properties were set&quot;);
      return m_result;
    }
  };

  static Builder&lt;NO_FIELDS_SET&gt; create() {
    return Builder&lt;NO_FIELDS_SET&gt;();
  }

};

int main() {
  map_type* result1 = ProtocolObjectFoo::create()
    .setBazz(&quot;bbb&quot;)
    .setFoo(&quot;fff&quot;)
    .setBazz(&quot;bbb&quot;) // compile time for second 
    .setBar(&quot;rrr&quot;);
  
  map_type* result2 = ProtocolObjectFoo::create()
    .setBazz(&quot;bbb&quot;)
    //        .setFoo(&quot;fff&quot;) // compile time error when not all the properties were set
    .setBar(&quot;rrr&quot;);
  
  for (map_type::const_iterator it = result1-&gt;begin(); it != result1-&gt;end(); ++it)
    std::cout &lt;&lt; it-&gt;first &lt;&lt; &quot;: &quot; &lt;&lt; it-&gt;second &lt;&lt; std::endl;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508751</commentid>
    <comment_count>11</comment_count>
      <attachid>116046</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-24 06:33:32 -0800</bug_when>
    <thetext>Comment on attachment 116046
Patch

r- as we decided to use template based approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508869</commentid>
    <comment_count>12</comment_count>
      <attachid>116532</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-24 12:46:24 -0800</bug_when>
    <thetext>Created attachment 116532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508871</commentid>
    <comment_count>13</comment_count>
      <attachid>116533</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-24 12:48:29 -0800</bug_when>
    <thetext>Created attachment 116533
Sample generated file (caseq template technique)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509007</commentid>
    <comment_count>14</comment_count>
      <attachid>116532</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-11-25 00:13:54 -0800</bug_when>
    <thetext>Comment on attachment 116532
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:534
&gt; +        template&lt;int STEP&gt; inline Builder&lt;STATE | STEP&gt;&amp; castState()

Do we really need all these methods to be inline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509021</commentid>
    <comment_count>15</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-11-25 00:42:23 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Sample generated file (caseq template technique)

I generally like the result, but still got a few notes:

- reinterpret_cast from InspectorObject to a specific object type looks quite unfortunate. Why not use a concrete type for m_result?

- why do we need explicit inlines on every method?

- let&apos;s pass string parameters by a const reference;

- Builder constructor should by private, with outer class a friend;

- it&apos;s probably worth implementing cast operator for PassRefPtr via cast operator for RefPtr;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509168</commentid>
    <comment_count>16</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-25 07:57:46 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:534
&gt; &gt; +        template&lt;int STEP&gt; inline Builder&lt;STATE | STEP&gt;&amp; castState()
&gt; 
&gt; Do we really need all these methods to be inline?

Fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509181</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-25 08:22:24 -0800</bug_when>
    <thetext>&gt; I generally like the result, but still got a few notes:
&gt; - reinterpret_cast from InspectorObject to a specific object type looks quite unfortunate. Why not use a concrete type for m_result?
done

&gt; - why do we need explicit inlines on every method?
done
 
&gt; - let&apos;s pass string parameters by a const reference;
done
 
&gt; - Builder constructor should by private, with outer class a friend;
done
 
&gt; - it&apos;s probably worth implementing cast operator for PassRefPtr via cast operator for RefPtr;
done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509182</commentid>
    <comment_count>18</comment_count>
      <attachid>116625</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-11-25 08:23:32 -0800</bug_when>
    <thetext>Created attachment 116625
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509223</commentid>
    <comment_count>19</comment_count>
      <attachid>116625</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-11-25 11:15:18 -0800</bug_when>
    <thetext>Comment on attachment 116625
Patch

lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509736</commentid>
    <comment_count>20</comment_count>
      <attachid>116625</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-11-28 04:31:06 -0800</bug_when>
    <thetext>Comment on attachment 116625
Patch

Clearing flags on attachment: 116625

Committed r101249: &lt;http://trac.webkit.org/changeset/101249&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509737</commentid>
    <comment_count>21</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-11-28 04:31:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514725</commentid>
    <comment_count>22</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-04 11:35:40 -0800</bug_when>
    <thetext>Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514733</commentid>
    <comment_count>23</comment_count>
      <attachid>117803</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-04 11:51:05 -0800</bug_when>
    <thetext>Created attachment 117803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515110</commentid>
    <comment_count>24</comment_count>
      <attachid>117803</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 08:56:17 -0800</bug_when>
    <thetext>Comment on attachment 117803
Patch

Clearing flags on attachment: 117803

Committed r102004: &lt;http://trac.webkit.org/changeset/102004&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515111</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 08:56:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515120</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-05 09:07:39 -0800</bug_when>
    <thetext>It broke the --minimal build: http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/38215/steps/compile-webkit/logs/stdio

Could you fix it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515433</commentid>
    <comment_count>27</comment_count>
      <attachid>117803</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-12-05 15:06:10 -0800</bug_when>
    <thetext>Comment on attachment 117803
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:110
&gt; +    def lower_camel_case_to_upper(str):
&gt; +        if len(str) &gt; 0 and str[0].islower():
&gt; +            str = str[0].upper() + str[1:]
&gt; +        return str

String.capitalize()?

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:138
&gt; +        pos = 0
&gt; +        while pos &lt; len(output):
&gt; +            output[pos] = output[pos].upper()
&gt; +            pos += 1
&gt; +        return &quot;_&quot;.join(output)

Why not just &quot;_&quot;.join(output).upper()?

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:152
&gt; +    def split_camel_case_(str):
&gt; +        output = []
&gt; +        pos_being = 0
&gt; +        pos = 1
&gt; +        has_oneletter = False
&gt; +        while pos &lt; len(str):
&gt; +            if str[pos].isupper():
&gt; +                output.append(str[pos_being:pos].upper())
&gt; +                if pos - pos_being == 1:
&gt; +                    has_oneletter = True
&gt; +                pos_being = pos
&gt; +            pos += 1

This looks as it were ported from COBOL. Can this be rewritten into python -- e.g., use regexps?

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:459
&gt; +                        output.append(&quot;namespace &quot;)
&gt; +                        output.append(json_type[&quot;id&quot;])
&gt; +                        output.append(&quot; {\n&quot;)

Consider using interpolation for better readability.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:466
&gt; +                            item_c_name = enum_item.replace(&apos;-&apos;, &apos;_&apos;)
&gt; +                            output.append(&quot;const char* const &quot;)
&gt; +                            output.append(Capitalizer.upper_camel_case_to_lower(item_c_name))
&gt; +                            output.append(&quot; = \&quot;&quot;)
&gt; +                            output.append(enum_item)
&gt; +                            output.append(&quot;\&quot;;\n&quot;)

ditto

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:732
&gt; +        def fill_recursive(path_part, depth):
&gt; +            if depth &lt;= 0 or path_part == &apos;/&apos;:
&gt; +                return
&gt; +            fill_recursive(os.path.dirname(path_part), depth - 1)
&gt; +            components.append(os.path.basename(path_part))

Does this have to be recursive? Also, consider os.path.split(). Or, given that you join them back with &quot;/&quot;.join() below, you could as well have used a regexp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515488</commentid>
    <comment_count>28</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-05 16:21:53 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:110
&gt; &gt; +    def lower_camel_case_to_upper(str):
&gt; &gt; +        if len(str) &gt; 0 and str[0].islower():
&gt; &gt; +            str = str[0].upper() + str[1:]
&gt; &gt; +        return str
&gt; String.capitalize()?

No. According to documentation it makes all letters but first lowercase.

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:138
&gt; &gt; +        pos = 0
&gt; &gt; +        while pos &lt; len(output):
&gt; &gt; +            output[pos] = output[pos].upper()
&gt; &gt; +            pos += 1
&gt; &gt; +        return &quot;_&quot;.join(output)
&gt; Why not just &quot;_&quot;.join(output).upper()?

Done

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:152
&gt; &gt; +    def split_camel_case_(str):
&gt; &gt; +        output = []
&gt; &gt; +        pos_being = 0
&gt; &gt; +        pos = 1
&gt; &gt; +        has_oneletter = False
&gt; &gt; +        while pos &lt; len(str):
&gt; &gt; +            if str[pos].isupper():
&gt; &gt; +                output.append(str[pos_being:pos].upper())
&gt; &gt; +                if pos - pos_being == 1:
&gt; &gt; +                    has_oneletter = True
&gt; &gt; +                pos_being = pos
&gt; &gt; +            pos += 1
&gt; This looks as it were ported from COBOL. Can this be rewritten into python -- e.g., use regexps?

I don&apos;t really see how it can be re-written nicer. At least in 15 minutes.
 
&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:459
&gt; &gt; +                        output.append(&quot;namespace &quot;)
&gt; &gt; +                        output.append(json_type[&quot;id&quot;])
&gt; &gt; +                        output.append(&quot; {\n&quot;)
&gt; Consider using interpolation for better readability.

I do use a lot of interpolation throughout the script. I&apos;m not convinced it always gives better readability.

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:732
&gt; &gt; +        def fill_recursive(path_part, depth):
&gt; &gt; +            if depth &lt;= 0 or path_part == &apos;/&apos;:
&gt; &gt; +                return
&gt; &gt; +            fill_recursive(os.path.dirname(path_part), depth - 1)
&gt; &gt; +            components.append(os.path.basename(path_part))
&gt; Does this have to be recursive? Also, consider os.path.split(). Or, given that you join them back with &quot;/&quot;.join() below, you could as well have used a regexp.

I don&apos;t know. I have to split path into components. Given I only can get the last component per time, recursion looked pretty nice solution. I don&apos;t like to use regexp, because I&apos;m not sure about Windows stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515490</commentid>
    <comment_count>29</comment_count>
      <attachid>117952</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-05 16:27:13 -0800</bug_when>
    <thetext>Created attachment 117952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515495</commentid>
    <comment_count>30</comment_count>
      <attachid>117952</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-05 16:35:40 -0800</bug_when>
    <thetext>Comment on attachment 117952
Patch

This is only a response for caseq&apos;s codereivew. The patch is still not ready -- it break qt-minimal.
http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/38215/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517646</commentid>
    <comment_count>31</comment_count>
      <attachid>118440</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-08 12:02:36 -0800</bug_when>
    <thetext>Created attachment 118440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518157</commentid>
    <comment_count>32</comment_count>
      <attachid>118440</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-09 00:33:15 -0800</bug_when>
    <thetext>Comment on attachment 118440
Patch

Clearing flags on attachment: 118440

Committed r102440: &lt;http://trac.webkit.org/changeset/102440&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518159</commentid>
    <comment_count>33</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-09 00:33:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518161</commentid>
    <comment_count>34</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-09 00:38:24 -0800</bug_when>
    <thetext>Peter, please don&apos;t remove (OOPS!) from generated ChangeLog entries, otherwise our scripts won&apos;t be able to substitute reviewer&apos;s name and we will get changelog with Reviwed by NOBODY. line like here: http://trac.webkit.org/changeset/102440/trunk/Source/WebCore/ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518794</commentid>
    <comment_count>35</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-12-10 07:50:30 -0800</bug_when>
    <thetext>This patch breaks Windows CE. After this patch you generate a class with the RGBA. RGBA is a macro on windows and will cause sooner or later problems on the other windows platforms too (depending on the include order).
What about giving the classes a prefix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518826</commentid>
    <comment_count>36</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-10 13:50:53 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; This patch breaks Windows CE. After this patch you generate a class with the RGBA. RGBA is a macro on windows and will cause sooner or later problems on the other windows platforms too (depending on the include order).
&gt; What about giving the classes a prefix?

Probably prefix would be too heavyweight solution. I think it&apos;s worth keeping a manually-filled map of exceptions for typenames. I&apos;m going to prepare a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518951</commentid>
    <comment_count>37</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-11 17:21:49 -0800</bug_when>
    <thetext>I filed the bug and it has been closed by now.

https://bugs.webkit.org/show_bug.cgi?id=74247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519157</commentid>
    <comment_count>38</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-12 06:09:46 -0800</bug_when>
    <thetext>Today when trying to use the new typed API for building memory report in http://trac.webkit.org/changeset/102569/trunk/Source/WebCore/inspector/InspectorMemoryAgent.cpp I encountered several problems which I think we need to address:

1. Sometimes result construction may be spread over a method or even several methods. In this case we have to either first calculate all properties and then set all of them in one statement:
RefPtr&lt;DOMGroup&gt; result = DOMGroup::create()
    .setSize(size_var)
    .setTitle(title_var)
    .setNodeCount(node_count_var);
would be more convenient to have some result object which we could incrementally fill with the properties but with current approach we would have to declare variables types like Memory::DOMGroup::Builder&lt;TITLE_SET | NODE_COUNT_SET&gt; which is too cumbersome.

2. In case result is populated in several methods we need to pass one builder as a parameter and return another builder as a result. Type declaration is still quite long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519185</commentid>
    <comment_count>39</comment_count>
      <attachid>118785</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-12 07:29:40 -0800</bug_when>
    <thetext>Created attachment 118785
Builder usage example</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115996</attachid>
            <date>2011-11-20 13:23:20 -0800</date>
            <delta_ts>2011-11-21 00:42:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72835-20111121012318.patch</filename>
            <type>text/plain</type>
            <size>23252</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyNTM4MzM0YjUyNTU3
NmVlNGM2MWRmY2Q0ZDI5NjY0NmQ1NWNhMS4uZmMyN2NlZTk4MDY1OWUzYWM0ZTQxNGE5Mzc4NGU3
ZjY1ODgzZTVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTExLTIwICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbcHJvdG9jb2xdIGdlbmVyYXRlIEMgY2xhc3NlcyBmb3IgcHJvdG9jb2wgSlNPTiBuYW1lZCB0
eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRl
bmRzIHB5dGhvbiBnZW5lcmF0b3IgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGluc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OgorCiAyMDExLTExLTE5ICBLZXZpbiBPbGxpdmll
ciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQysrIGJpbmRpbmdz
IGJ1aWxkIGZpeCBmb3IgbW92ZSBvZiBhcnJheSBjbGFzc2VzIHRvIFdURi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggOGNi
YWFkNzI1MWEwMTFjOGJmNTY4YTg4YjY3ZDA2OWUzY2ViYTlhYS4uZjI2NjdmYWMyMDdjNDUyNWI0
MGJiNTE2Yjc5ZDIyZWQ1MDMxZmQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTEwMyw2ICsxMDMsMTIgQEAgZGVmaW5l
c19tYXAgPSBwYXJzZV9kZWZpbmVzKGFyZ19vcHRpb25zLmRlZmluZXMpCiAKIGNsYXNzIENhcGl0
YWxpemVyOgogICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG93ZXJfY2FtZWxfY2FzZV90b191
cHBlcihzdHIpOgorICAgICAgICBpZiBsZW4oc3RyKSA+IDAgYW5kIHN0clswXS5pc2xvd2VyKCk6
CisgICAgICAgICAgICBzdHIgPSBzdHJbMF0udXBwZXIoKSArIHN0clsxOl0KKyAgICAgICAgcmV0
dXJuIHN0cgorCisgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiB1cHBlcl9jYW1lbF9jYXNlX3Rv
X2xvd2VyKHN0cik6CiAgICAgICAgIHBvcyA9IDAKICAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHN0
cikgYW5kIHN0cltwb3NdLmlzdXBwZXIoKToKQEAgLTE4Nyw2ICsxOTMsOCBAQCBjbGFzcyBSYXdU
eXBlcyhvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAogICAgICAgICBl
bGlmIGpzb25fdHlwZSA9PSAibnVtYmVyIjoKICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5O
dW1iZXIKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gImFueSI6CisgICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuQW55CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIlVua25vd24gdHlwZTogJXMiICUganNvbl90eXBlKQogCkBAIC0zMjMsNiArMzMxLDM1IEBA
IGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1U
eXBlKCJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1Bh
cmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IikKIAorICAgIGNsYXNzIEFueShC
YXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1f
dHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5
cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9j
X3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxh
aW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2dldHRl
cl9uYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIlZhbHVlIgorCisgICAgICAgIGdldF9zZXR0
ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rv
clZhbHVlOjpjcmVhdGUoKSIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBn
ZXRfanNfYmluZF90eXBlKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9y
dGVkIikKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc19ldmVudF9wYXJh
bV9jaGVja19vcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBf
cGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvclZhbHVlPiIpCisgICAg
ICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4i
KQorCiAgICAgY2xhc3MgQXJyYXkoQmFzZVR5cGUpOgogICAgICAgICBAY2xhc3NtZXRob2QKICAg
ICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CkBA
IC0zNjAsMzcgKzM5NywzMTYgQEAgY2xhc3MgUGFyYW1UeXBlKG9iamVjdCk6CiAgICAgT1VUUFVU
ID0gIm91dHB1dCIKICAgICBFVkVOVCA9ICJldmVudCIKIAorIyBDb2xsZWN0aW9uIG9mIEluc3Bl
Y3Rvck9iamVjdCBjbGFzcyBtZXRob2RzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBvdmVybG9hZGVk
IGluIGdlbmVyYXRlZCBjbGFzcy4KKyMgV2UgbXVzdCBleHBsaWNpdGx5IGltcG9ydCBhbGwgb3Zl
cmxvYWRlZCBtZXRob2RzIG9yIHRoZXkgd29uJ3QgYmUgYXZhaWxhYmxlIHRvIHVzZXIuCitJTlNQ
RUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUyA9IGZyb3plbnNldChbInNldFZhbHVlIiwgInNldEJv
b2xlYW4iLCAic2V0TnVtYmVyIiwgInNldFN0cmluZyIsICJzZXRWYWx1ZSIsICJzZXRPYmplY3Qi
LCAic2V0QXJyYXkiXSkKKworCitjbGFzcyBUeXBlQnVpbGRlclRlbXBsYXRlczoKKyAgICAjIFNw
ZWNpZmllcyB3aGV0aGVyIGdlbmVyYXRvciBlbXBsb3lzIEMgcHJlcHJvY2Vzc29yIGRlZmluZXMg
b3Igbm90LiBCb3RoIG9wdGlvbnMgc2hvdWxkIGJlIHdvcmtpbmcuCisgICAgQ09MTEFQU0VfREVG
SU5FUyA9IFRydWUKKworICAgIEFMTF9ERUZJTkVTID0gW10KKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgZ2VuZXJhdGVfZGVmaW5lcyhvdXRwdXQpOgorICAgICAgICBpZiBub3QgVHlwZUJ1
aWxkZXJUZW1wbGF0ZXMuQ09MTEFQU0VfREVGSU5FUzoKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICBvdXRwdXQuYXBwZW5kKCIvLyBTZXZlcmFsIHByZXByb2Nlc3NvciBkZWZpbmVzIHRoYXQg
bWFrZSB0eXBlIGJ1aWxkZXIgY29kZSBtb3JlIGNvbXBhY3QuXG4iKQorICAgICAgICBvdXRwdXQu
YXBwZW5kKCIvLyBIYWNrIG1lIGlmIHlvdSB3YW50IGdlbmVyYXRlZCBjb2RlIHdpdGhvdXQgcHJl
cHJvY2Vzc29yIGRlZmluZXMuXG4iKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCIvLyAgICAgLS0g
Z2VuZXJhdG9yXG4iKQorICAgICAgICBmb3IgZGVmaW5lIGluIFR5cGVCdWlsZGVyVGVtcGxhdGVz
LkFMTF9ERUZJTkVTOgorICAgICAgICAgICAgZGVmaW5lLmdlbmVyYXRlX2RlZmluZShvdXRwdXQp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX3VuZGVmaW5lcyhvdXRwdXQp
OgorICAgICAgICBmb3IgZGVmaW5lIGluIHJldmVyc2VkKFR5cGVCdWlsZGVyVGVtcGxhdGVzLkFM
TF9ERUZJTkVTKToKKyAgICAgICAgICAgIGRlZmluZS5nZW5lcmF0ZV91bmRlZmluZShvdXRwdXQp
CisKKyAgICBjbGFzcyBEZWZpbmU6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZpbmVf
bmFtZSwgdGV4dCwgY29sbGFwc2VkX3dyYXBwZXIsIHBhcmFtX25hbWVzLCBhbGxfZGVmaW5lcyk6
CisgICAgICAgICAgICBzZWxmLmRlZmluZV9uYW1lXyA9IGRlZmluZV9uYW1lCisgICAgICAgICAg
ICBzZWxmLnRlbXBsYXRlXyA9IHN0cmluZy5UZW1wbGF0ZSh0ZXh0KQorICAgICAgICAgICAgc2Vs
Zi5jb2xsYXBzZWRfd3JhcHBlcl8gPSBjb2xsYXBzZWRfd3JhcHBlcgorICAgICAgICAgICAgc2Vs
Zi5wYXJhbV9uYW1lc18gPSBwYXJhbV9uYW1lcworCisgICAgICAgICAgICBhbGxfZGVmaW5lcy5h
cHBlbmQoc2VsZikKKworICAgICAgICBkZWYgZ2VuZXJhdGVfZGVmaW5lKHNlbGYsIG91dHB1dCk6
CisgICAgICAgICAgICBhcmd1bWVudHMgPSB7fQorICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtd
CisgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYucGFyYW1fbmFtZXNfOgorICAgICAgICAgICAg
ICAgIHByZXByb2Nlc3Nvcl9wYXJhbWV0ZXJfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVs
X2Nhc2VfdG9fdXBwZXIoa2V5KQorICAgICAgICAgICAgICAgIGFyZ3VtZW50c1trZXldID0gQ2Fw
aXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihrZXkpCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQocHJlcHJvY2Vzc29yX3BhcmFtZXRlcl9uYW1lKQorICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiI2RlZmluZSAiICsgc2VsZi5kZWZpbmVfbmFtZV8gKyAiKCIgKyAi
LCAiLmpvaW4ocGFyYW1ldGVycykgKyAiKSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi50ZW1wbGF0ZV8uc3Vic3RpdHV0ZSgqKmFyZ3VtZW50cykucmVwbGFjZSgiXG4iLCAiXFxc
biIpICsgIlxuIikKKworICAgICAgICBkZWYgZ2VuZXJhdGVfdW5kZWZpbmUoc2VsZiwgb3V0cHV0
KToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiN1bmRlZiAiICsgc2VsZi5kZWZpbmVfbmFt
ZV8gKyAiXG4iKQorCisgICAgICAgIGRlZiBmaWxsKHNlbGYsICoqa3dzKToKKyAgICAgICAgICAg
IGlmIFR5cGVCdWlsZGVyVGVtcGxhdGVzLkNPTExBUFNFX0RFRklORVM6CisgICAgICAgICAgICAg
ICAgYXJndW1lbnRzID0gW10KKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYucGFyYW1f
bmFtZXNfOgorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGt3c1trZXldKQor
ICAgICAgICAgICAgICAgIGRlZmluZV9jYWxsID0gc2VsZi5kZWZpbmVfbmFtZV8gKyAiKCIgKyAi
LCAiLmpvaW4oYXJndW1lbnRzKSArICIpIgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNv
bGxhcHNlZF93cmFwcGVyXyAlIGRlZmluZV9jYWxsCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlXy5zdWJzdGl0dXRlKCoqa3dzKQorCisgICAg
TEFTVF9TVEVQX1BST0xPRyA9IERlZmluZSgiTEFTVF9TVEVQX1BST0xPRyIsICIiIiAgICAgICAg
ICAgIGNsYXNzICRzdGVwTmFtZSB7CisgICAgICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICAg
ICAgaW5saW5lIFBhc3NSZWZQdHI8JHR5cGVOYW1lPiAiIiIsCisgICAgICAgICIgICAgICAlc1xu
ICAgICAgICAiLCBbInN0ZXBOYW1lIiwgInR5cGVOYW1lIl0sIEFMTF9ERUZJTkVTKQorCisgICAg
TEFTVF9TVEVQX01FVEhPRF9CRUdJTiA9IERlZmluZSgiTEFTVF9TVEVQX01FVEhPRF9CRUdJTiIs
ICIiIgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZiIi
IiwKKyAgICAgICAgIlxuICAgICAgICAgICVzIiwgW10sIEFMTF9ERUZJTkVTKQorCisgICAgTEFT
VF9TVEVQX1JFVFVSTiA9IERlZmluZSgiTEFTVF9TVEVQX1JFVFVSTiIsICIiIgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR0eXBlTmFtZT4qPigm
bV9qc29uX3JlZikpLT5yZWxlYXNlKCk7IiIiLAorICAgICAgICAiXG4gICAgICAgICAgJXMiLCBb
InR5cGVOYW1lIl0sIEFMTF9ERUZJTkVTKQorCisgICAgU1RFUF9CUklER0UgPSBEZWZpbmUoIlNU
RVBfQlJJREdFIiwgIiIiCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyAkcHJldlN0ZXBOYW1lOworICAgICAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOworICAgICAgICAgICAg
ICAgIGlubGluZSAkbmV4dFN0ZXBOYW1lKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25f
cmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQorICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgY2xhc3MgJHByZXZTdGVwTmFtZSB7CisgICAgICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICAgICAgaW5saW5lICRuZXh0U3RlcE5hbWUgIiIiLAorICAgICAgICAiXG4gICAgICAl
c1xuICAgICAgICAiLCBbInByZXZTdGVwTmFtZSIsICJuZXh0U3RlcE5hbWUiXSwgQUxMX0RFRklO
RVMpCisKKyAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTiA9IERlZmluZSgiTk9UX0xBU1Rf
U1RFUF9NRVRIT0RfQkVHSU4iLCAiIiIKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICRuZXh0U3RlcE5hbWUgcmVzdWx0KG1fanNvbl9yZWYpOworICAgICAgICAgICAgICAg
ICAgICBtX2pzb25fcmVmIiIiLAorICAgICAgICAiXG4gICAgICAgICAgJXMiLCBbIm5leHRTdGVw
TmFtZSJdLCBBTExfREVGSU5FUykKKworICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOID0gRGVmaW5l
KCJOT1RfTEFTVF9TVEVQX1JFVFVSTiIsICIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OyIiIiwKKyAgICAgICAgIlxuICAgICAgICAgICVzIiwgW10sIEFMTF9ERUZJTkVTKQor
CisgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURSA9IERlZmluZSgiRklSU1RfU1RFUF9FTkRf
QU5EX0NSRUFURSIsICIiIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzICR0eXBlTmFtZTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOworICAgICAgICAgICAgICAgIGlu
bGluZSAkc3RlcE5hbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6
IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICBpbmxpbmUgc3RhdGljICRzdGVwTmFtZSBjcmVhdGUoKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICRzdGVwTmFtZShJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIH0K
KyIiIiwKKyAgICAgICAgIlxuICAgICAgJXNcblxuIiwgWyJzdGVwTmFtZSIsICJ0eXBlTmFtZSJd
LCBBTExfREVGSU5FUykKKworCitjbGFzcyBUeXBlQmluZGluZ3M6CisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBjcmVhdGVfZm9yX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBlLCBj
b250ZXh0X2RvbWFpbl9uYW1lKToKKyAgICAgICAgaWYganNvbl90eXBlWyJ0eXBlIl0gPT0gInN0
cmluZyI6CisgICAgICAgICAgICBpZiAiZW51bSIgaW4ganNvbl90eXBlOgorCisgICAgICAgICAg
ICAgICAgY2xhc3MgRW51bUJpbmRpbmc6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQs
IGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9IGpzb25f
dHlwZVsiZW51bSJdCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGRvYworICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAgICBuYW1lc3BhY2UgIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoanNvbl90eXBlWyJpZCJdKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiIHtcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgZW51bV9pdGVtIGluIGVudW06CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV9jX25hbWUgPSBlbnVtX2l0ZW0ucmVwbGFjZSgnLScsICdfJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICAgICBjb25zdCBjaGFy
KiBjb25zdCAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoQ2Fw
aXRhbGl6ZXIudXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihpdGVtX2NfbmFtZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiID0gXCIiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoZW51bV9pdGVtKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlwiO1xuIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgfVxuXG4iKQorCisgICAgICAgICAgICAgICAgcmV0
dXJuIEVudW1CaW5kaW5nCisgICAgICAgICAgICBlbHNlOgorCisgICAgICAgICAgICAgICAgY2xh
c3MgUGxhaW5TdHJpbmc6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndhcmRf
bGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgImRlc2NyaXB0aW9uIiBpbiBq
c29uX3R5cGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAg
IC8qICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChqc29uX3R5
cGVbImRlc2NyaXB0aW9uIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZCgiICovXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAg
ICAgICB0eXBlZGVmIFN0cmluZyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZChqc29uX3R5cGVbImlkIl0pCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCI7XG5cbiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWluU3RyaW5nCisKKyAgICAg
ICAgZWxpZiBqc29uX3R5cGVbInR5cGUiXSA9PSAib2JqZWN0IjoKKyAgICAgICAgICAgIGlmICJw
cm9wZXJ0aWVzIiBpbiBqc29uX3R5cGU6CisKKyAgICAgICAgICAgICAgICBjbGFzcyBDbGFzc0Jp
bmRpbmc6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAg
ICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndhcmRfbGlzdGVuZXIp
OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IGpzb25fdHlwZVsicHJvcGVy
dGllcyJdCisgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3Byb3BlcnRpZXMgPSBbXQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJvcGVydGllcyA9IFtdCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcCBpbiBwcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICJvcHRpb25hbCIgaW4gcCBhbmQgcFsib3B0aW9uYWwiXToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJvcGVydGllcy5hcHBlbmQocCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWluX3Byb3BlcnRpZXMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgICAgICAj
IFRPRE86IGRvYworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAg
ICBjbGFzcyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGpzb25fdHlw
ZVsiaWQiXQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChjbGFzc19uYW1l
KQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiIDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgi
ICAgICAgICBwdWJsaWM6XG4iKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIgICAgICAgICAgICAvKlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5h
cHBlbmQoIiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjpcbiIpCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICAgICAgKiBSZWZQdHI8JXM+
IHJlc3VsdCA9ICVzOjpjcmVhdGUoKSIgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBtYWluX3Byb3BlcnRpZXM6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiXG4gICAgICAgICAgICAgKiAgICAg
LnNldCVzKC4uLikiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9w
WyJuYW1lIl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiO1xuICAg
ICAgICAgICAgICovXG4iKQorCisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4o
bWFpbl9wcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoID09IDA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAgICAgICAg
aW5saW5lIHN0YXRpYyBQYXNzUmVmUHRyPCVzPiBjcmVhdGUoKVxuIiAlIGNsYXNzX25hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAgICAgICAge1xu
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVmID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAg
ICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JXM+Kj4oJnJlZikp
LT5yZWxlYXNlKCk7XG4iICUgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICAgICB9XG4iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwX25hbWVzID0gW10KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuZ3RoKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcF9uYW1lcy5hcHBlbmQoIlN0ZXBTZXQl
cyIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKG1haW5fcHJvcGVydGll
c1tpXVsibmFtZSJdKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdGVwX25h
bWUgaW4gc3RlcF9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZCgiICAgICAgICAgICAgY2xhc3MgJXM7XG4iICUgc3RlcF9uYW1lKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlxuIikKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRNZXRob2REZWNsYXJhdGlvbihvdXRwdXQsIGpzb25fcHJvcCk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoInNldCIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoQ2FwaXRhbGl6ZXIu
bG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihqc29uX3Byb3BbIm5hbWUiXSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2ZV9wYXJhbV9yYXdf
dHlwZShqc29uX3Byb3AsIGNvbnRleHRfZG9tYWluX25hbWUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiglcyB2YWx1ZSkiICUgcGFyYW1fcmF3X3R5cGUu
Z2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSkKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRNZXRob2RTdGF0ZW1lbnQob3V0cHV0
LCBqc29uX3Byb3ApOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdf
dHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wcm9wLCBjb250ZXh0X2RvbWFpbl9u
YW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCItPnNl
dCVzKFwiJXNcIiwgdmFsdWUpOyIgJSAocGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCks
IGpzb25fcHJvcFsibmFtZSJdKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoVHlwZUJ1aWxkZXJUZW1wbGF0ZXMuTEFTVF9TVEVQX1BST0xPRy5maWxsKHN0ZXBO
YW1lPXN0ZXBfbmFtZXNbLTFdLCB0eXBlTmFtZT1jbGFzc19uYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRNZXRob2REZWNsYXJhdGlvbihvdXRwdXQsIG1haW5fcHJvcGVydGll
c1stMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChUeXBlQnVp
bGRlclRlbXBsYXRlcy5MQVNUX1NURVBfTUVUSE9EX0JFR0lOLmZpbGwoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRNZXRob2RTdGF0ZW1lbnQob3V0cHV0LCBtYWluX3Byb3BlcnRp
ZXNbLTFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoVHlwZUJ1
aWxkZXJUZW1wbGF0ZXMuTEFTVF9TVEVQX1JFVFVSTi5maWxsKHR5cGVOYW1lPWNsYXNzX25hbWUp
KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuKG1haW5fcHJvcGVydGll
cykgLSAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgcG9zID49IDA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoVHlwZUJ1aWxkZXJUZW1w
bGF0ZXMuU1RFUF9CUklER0UuZmlsbChwcmV2U3RlcE5hbWU9c3RlcF9uYW1lc1twb3NdLCBuZXh0
U3RlcE5hbWU9c3RlcF9uYW1lc1twb3MgKyAxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldE1ldGhvZERlY2xhcmF0aW9uKG91dHB1dCwgbWFpbl9wcm9wZXJ0aWVzW3Bvc10p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoVHlwZUJ1aWxk
ZXJUZW1wbGF0ZXMuTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4uZmlsbChuZXh0U3RlcE5hbWU9
c3RlcF9uYW1lc1twb3MgKyAxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dE1ldGhvZFN0YXRlbWVudChvdXRwdXQsIG1haW5fcHJvcGVydGllc1twb3NdKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKFR5cGVCdWlsZGVyVGVtcGxhdGVz
Lk5PVF9MQVNUX1NURVBfUkVUVVJOLmZpbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcG9zIC09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KFR5cGVCdWlsZGVyVGVtcGxhdGVzLkZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUuZmlsbChzdGVw
TmFtZT1zdGVwX25hbWVzWzBdLCB0eXBlTmFtZT1jbGFzc19uYW1lKSkKKworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIHByb3AgaW4gb3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUo
cHJvcCwgY29udGV4dF9kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXR0ZXJfbmFtZSA9ICJzZXQlcyIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3Vw
cGVyKHByb3BbIm5hbWUiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIgICAgICAgICAgICBpbmxpbmUgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgcGFyYW1f
cmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIEZhbHNlKS5nZXRfdGV4
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAg
ICAgIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAg
ICAgICAgICAgICAgIHRoaXMtPnNldCVzKFwiJXNcIiwgdmFsdWUpO1xuIiAlIChwYXJhbV9yYXdf
dHlwZS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcFsibmFtZSJdKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICAgICB9XG5cbiIpCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJfbmFtZSBpbiBJTlNQRUNUT1JfT0JKRUNUX1NF
VFRFUl9OQU1FUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgiICAgICAgICAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjolcztcblxuIiAlIHNldHRlcl9u
YW1lKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgIH07
XG5cbiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIENsYXNzQmluZGluZworICAgICAgICAgICAg
ZWxzZToKKworICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluT2JqZWN0QmluZGluZzoKKyAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAg
ICAgICAgICAgICAgICAjIE5vLW9wCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFBsYWluT2JqZWN0QmluZGluZworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlWyJ0eXBlIl0pCisKKyAg
ICAgICAgICAgIGNsYXNzIFJhd1R5cGVzQmluZGluZzoKKyAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQs
IGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAjIE5vLW9wCisgICAgICAg
ICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlc0JpbmRpbmcKKwog
CiBjbGFzcyBUeXBlRGF0YShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5
cGUsIGpzb25fZG9tYWluKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl90eXBlLCBqc29u
X2RvbWFpbiwgZG9tYWluX2RhdGEpOgogICAgICAgICBzZWxmLmpzb25fdHlwZV8gPSBqc29uX3R5
cGUKICAgICAgICAgc2VsZi5qc29uX2RvbWFpbl8gPSBqc29uX2RvbWFpbgorICAgICAgICBzZWxm
LmRvbWFpbl9kYXRhXyA9IGRvbWFpbl9kYXRhCiAKLSAgICAgICAgaWYgInR5cGUiIGluIGpzb25f
dHlwZToKLSAgICAgICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KLSAg
ICAgICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9uYW1lKQotICAgICAg
ICBlbHNlOgorICAgICAgICBpZiAidHlwZSIgbm90IGluIGpzb25fdHlwZToKICAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikKKworICAgICAgICBqc29uX3R5cGVfbmFt
ZSA9IGpzb25fdHlwZVsidHlwZSJdCisgICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpz
b25fdHlwZV9uYW1lKQogICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCisgICAgICAg
IHNlbGYuYmluZGluZ18gPSBUeXBlQmluZGluZ3MuY3JlYXRlX2Zvcl9uYW1lZF90eXBlX2RlY2xh
cmF0aW9uKGpzb25fdHlwZSwganNvbl9kb21haW5bImRvbWFpbiJdKQogCiAgICAgZGVmIGdldF9y
YXdfdHlwZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfCiAKKyAgICBkZWYg
Z2V0X2JpbmRpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJpbmRpbmdfCisKKworY2xh
c3MgRG9tYWluRGF0YToKKyAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl9kb21haW4pOgorICAg
ICAgICBzZWxmLmpzb25fZG9tYWluID0ganNvbl9kb21haW4KKyAgICAgICAgc2VsZi50eXBlc18g
PSBbXQorCisgICAgZGVmIGFkZF90eXBlKHNlbGYsIHR5cGVfZGF0YSk6CisgICAgICAgIHNlbGYu
dHlwZXNfLmFwcGVuZCh0eXBlX2RhdGEpCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuanNvbl9kb21haW5bImRvbWFpbiJdCisKKyAgICBkZWYgdHlwZXMoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLnR5cGVzXworCiAKIGNsYXNzIFR5cGVNYXA6CiAgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGFwaSk6CiAgICAgICAgIHNlbGYubWFwXyA9IHt9CisgICAgICAgIHNl
bGYuZG9tYWluc18gPSBbXQogICAgICAgICBmb3IganNvbl9kb21haW4gaW4gYXBpWyJkb21haW5z
Il06CiAgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQogCiAg
ICAgICAgICAgICBkb21haW5fbWFwID0ge30KICAgICAgICAgICAgIHNlbGYubWFwX1tkb21haW5f
bmFtZV0gPSBkb21haW5fbWFwCiAKKyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluRGF0
YShqc29uX2RvbWFpbikKKyAgICAgICAgICAgIHNlbGYuZG9tYWluc18uYXBwZW5kKGRvbWFpbl9k
YXRhKQorCiAgICAgICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgogICAgICAgICAg
ICAgICAgIGZvciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVzIl06CiAgICAgICAgICAg
ICAgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fdHlwZVsiaWQiXQotICAgICAgICAgICAgICAgICAg
ICB0eXBlX2RhdGEgPSBUeXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluKQorICAgICAgICAg
ICAgICAgICAgICB0eXBlX2RhdGEgPSBUeXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluLCBk
b21haW5fZGF0YSkKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0g
dHlwZV9kYXRhCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9kYXRhLmFkZF90eXBlKHR5cGVf
ZGF0YSkKKworICAgIGRlZiBkb21haW5zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kb21h
aW5zXwogCiAgICAgZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKICAgICAg
ICAgcmV0dXJuIHNlbGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQpAQCAtNDI2LDYgKzc0
MiwzMCBAQCBqc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCiAKIAogY2xhc3MgVGVt
cGxhdGVzOgorICAgIGRlZiBnZXRfdGhpc19zY3JpcHRfcGF0aF8oYWJzb2x1dGVfcGF0aCk6Cisg
ICAgICAgIGFic29sdXRlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoYWJzb2x1dGVfcGF0aCkKKyAg
ICAgICAgY29tcG9uZW50cyA9IFtdCisKKyAgICAgICAgZGVmIGZpbGxfcmVjdXJzaXZlKHBhdGhf
cGFydCwgZGVwdGgpOgorICAgICAgICAgICAgaWYgZGVwdGggPD0gMCBvciBwYXRoX3BhcnQgPT0g
Jy8nOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZmlsbF9yZWN1cnNpdmUo
b3MucGF0aC5kaXJuYW1lKHBhdGhfcGFydCksIGRlcHRoIC0gMSkKKyAgICAgICAgICAgIGNvbXBv
bmVudHMuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUocGF0aF9wYXJ0KSkKKworICAgICAgICAjIFR5
cGljYWwgcGF0aCBpcyAvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKyAgICAgICAgIyBMZXQncyB0YWtlIDQgY29tcG9uZW50cyBmcm9tIHRoZSByZWFs
IHBhdGggdGhlbi4KKyAgICAgICAgZmlsbF9yZWN1cnNpdmUoYWJzb2x1dGVfcGF0aCwgNCkKKwor
ICAgICAgICByZXR1cm4gIi8iLmpvaW4oY29tcG9uZW50cykKKworICAgIGZpbGVfaGVhZGVyXyA9
ICgiLy8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgJXNcblxuIiAlIGdldF90aGlzX3NjcmlwdF9wYXRo
XyhzeXMuYXJndlswXSkgKworIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKyIiIikKKworCisKICAgICBmcm9udGVuZF9kb21haW5fY2xh
c3MgPSBzdHJpbmcuVGVtcGxhdGUoCiAiIiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFtZSB7CiAg
ICAgcHVibGljOiRkb21haW5DYXBhYmlsaXRpZXMKQEAgLTQ2NywyMyArODA3LDI0IEBAICRjb2Rl
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKIH0KICIiIikKIAotICAgIGZyb250
ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRfaAor
ICAgIGZyb250ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIiNpZm5k
ZWYgSW5zcGVjdG9yRnJvbnRlbmRfaAogI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZF9oCiAKICNp
bmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci1jbGFz
cyBJbnNwZWN0b3JPYmplY3Q7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCituYW1l
c3BhY2UgVHlwZUJ1aWxkZXIgeworJHt0eXBlQnVpbGRlcnN9Cit9CisKIGNsYXNzIEluc3BlY3Rv
ckZyb250ZW5kIHsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqKTsKQEAgLTQ5OCwxMCArODM5LDggQEAgJHtmaWVsZERlY2xhcmF0aW9uc319
OwogI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCiAiIiIpCiAKLSAgICBi
YWNrZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJfaAorICAgIGJhY2tlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8g
KworIiIiI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAjZGVmaW5lIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyX2gKIAogI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CkBA
IC01NzAsMTAgKzkwOSw4IEBAICRmaWVsZERlY2xhcmF0aW9ucwogCiAiIiIpCiAKLSAgICBiYWNr
ZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCisgICAgYmFja2VuZF9jcHAgPSBzdHJpbmcu
VGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIgogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKQEAgLTkwMSwxMCArMTIzOCw4IEBA
IGJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICIi
IikKIAotICAgIGZyb250ZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCisgICAgZnJvbnRl
bmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCkBAIC05MzMsMTAgKzEy
NjgsOCBAQCAkbWV0aG9kcwogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCiAiIiIpCiAKLSAg
ICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KKyAgICBiYWNrZW5kX2pzID0gc3Ry
aW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIKIAogSW5zcGVjdG9yQmFja2VuZFN0dWIg
PSBmdW5jdGlvbigpCiB7CkBAIC0xMjExLDkgKzE1NDQsMTIgQEAgY2xhc3MgR2VuZXJhdG9yOgog
ICAgIGJhY2tlbmRfaW5jbHVkZV9saXN0ID0gW10KICAgICBmcm9udGVuZF9jb25zdHJ1Y3Rvcl9p
bml0X2xpc3QgPSBbXQogICAgIGZyb250ZW5kX2NhcGFiaWxpdGllc19jb25zdGFudHNfbGlzdCA9
IFtdCisgICAgdHlwZV9idWlsZGVyX2ZyYWdtZW50cyA9IFtdCiAKICAgICBAc3RhdGljbWV0aG9k
CiAgICAgZGVmIGdvKCk6CisgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFw
KQorCiAgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBqc29uX2FwaVsiZG9tYWlucyJdOgogICAg
ICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KICAgICAgICAgICAg
IGRvbWFpbl9uYW1lX2xvd2VyID0gZG9tYWluX25hbWUubG93ZXIoKQpAQCAtMTQwOCw2ICsxNzQ0
LDI2IEBAIGNsYXNzIEdlbmVyYXRvcjoKIAogICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19p
bml0aWFsaXplcl9saXN0LmFwcGVuZCgiICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3tcIm1l
dGhvZFwiOiBcIiVzLiVzXCIlcywgXCJpZFwiOiAwfScpO1xuIiAlIChkb21haW5fbmFtZSwganNv
bl9jb21tYW5kX25hbWUsIGpzX3BhcmFtZXRlcnNfdGV4dCkpCiAKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIHByb2Nlc3NfdHlwZXModHlwZV9tYXApOgorICAgICAgICBvdXRwdXQgPSBHZW5l
cmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50cworCisgICAgICAgIGNsYXNzIEZvcndhcmRMaXN0
ZW5lcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBUeXBlQnVpbGRlclRlbXBsYXRlcy5n
ZW5lcmF0ZV9kZWZpbmVzKG91dHB1dCkKKworICAgICAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlw
ZV9tYXAuZG9tYWlucygpOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIG5hbWVzcGFj
ZSAiKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChkb21haW5fZGF0YS5uYW1lKCkpCisgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKCIge1xuIikKKyAgICAgICAgICAgIGZvciB0eXBlX2RhdGEg
aW4gZG9tYWluX2RhdGEudHlwZXMoKToKKyAgICAgICAgICAgICAgICB0eXBlX2RhdGEuZ2V0X2Jp
bmRpbmcoKS5nZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBGb3J3YXJkTGlzdGVuZXIpCisK
KyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICB9XG4iKQorCisgICAgICAgIFR5cGVCdWls
ZGVyVGVtcGxhdGVzLmdlbmVyYXRlX3VuZGVmaW5lcyhvdXRwdXQpCisKIEdlbmVyYXRvci5nbygp
CiAKIGJhY2tlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgiLCAidyIpCkBAIC0xNDIxLDcgKzE3NzcsOCBAQCBiYWNr
ZW5kX2pzX2ZpbGUgPSBvcGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2Vu
ZFN0dWIuanMiLCAidyIpCiAKIGZyb250ZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRl
bmRfaC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgICAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdl
bmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcywgIiIpLAotICAgICAgICAgZG9tYWlu
Q2xhc3NMaXN0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcywgIiIp
KSkKKyAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21h
aW5fY2xhc3NfbGluZXMsICIiKSwKKyAgICAgICAgIHR5cGVCdWlsZGVycz1qb2luKEdlbmVyYXRv
ci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzLCAiIikpKQogCiBiYWNrZW5kX2hfZmlsZS53cml0ZShU
ZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1dGUoTm9uZSwKICAgICBjb25zdHJ1Y3RvckluaXQ9
am9pbihHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>116041</attachid>
            <date>2011-11-21 00:23:24 -0800</date>
            <delta_ts>2011-11-21 00:44:52 -0800</delta_ts>
            <desc>Sample generated file (condensed form with C preprocessor defines)</desc>
            <filename>InspectorFrontend.h.sample.condensed_form</filename>
            <type>text/plain</type>
            <size>78977</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCnR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKLy8gU2V2ZXJhbCBwcmVwcm9j
ZXNzb3IgZGVmaW5lcyB0aGF0IG1ha2UgdHlwZSBidWlsZGVyIGNvZGUgbW9yZSBjb21wYWN0Lgov
LyBIYWNrIG1lIGlmIHlvdSB3YW50IGdlbmVyYXRlZCBjb2RlIHdpdGhvdXQgcHJlcHJvY2Vzc29y
IGRlZmluZXMuCi8vICAgICAtLSBnZW5lcmF0b3IKI2RlZmluZSBMQVNUX1NURVBfUFJPTE9HKFN0
ZXBOYW1lLCBUeXBlTmFtZSkgICAgICAgICAgICAgY2xhc3MgU3RlcE5hbWUge1wKICAgICAgICAg
ICAgcHVibGljOlwKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPFR5cGVOYW1lPiAK
I2RlZmluZSBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCkgXAogICAgICAgICAgICAgICAge1wKICAg
ICAgICAgICAgICAgICAgICBtX2pzb25fcmVmCiNkZWZpbmUgTEFTVF9TVEVQX1JFVFVSTihUeXBl
TmFtZSkgXAogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8VHlwZU5hbWU+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwojZGVmaW5lIFNURVBfQlJJ
REdFKFByZXZTdGVwTmFtZSwgTmV4dFN0ZXBOYW1lKSBcCiAgICAgICAgICAgICAgICB9XApcCiAg
ICAgICAgICAgIHByaXZhdGU6XAogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFByZXZTdGVw
TmFtZTtcCiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
ZjtcCiAgICAgICAgICAgICAgICBpbmxpbmUgTmV4dFN0ZXBOYW1lKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fVwKICAgICAg
ICAgICAgfTtcClwKICAgICAgICAgICAgY2xhc3MgUHJldlN0ZXBOYW1lIHtcCiAgICAgICAgICAg
IHB1YmxpYzpcCiAgICAgICAgICAgICAgICBpbmxpbmUgTmV4dFN0ZXBOYW1lIAojZGVmaW5lIE5P
VF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKE5leHRTdGVwTmFtZSkgXAogICAgICAgICAgICAgICAg
e1wKICAgICAgICAgICAgICAgICAgICBOZXh0U3RlcE5hbWUgcmVzdWx0KG1fanNvbl9yZWYpO1wK
ICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmCiNkZWZpbmUgTk9UX0xBU1RfU1RFUF9SRVRV
Uk4oKSBcCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKI2RlZmluZSBGSVJTVF9T
VEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBOYW1lLCBUeXBlTmFtZSkgXAogICAgICAgICAgICAgICAg
fVwKICAgICAgICAgICAgcHJpdmF0ZTpcCiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgVHlw
ZU5hbWU7XAogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3Jl
ZjtcCiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcE5hbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9XAogICAgICAg
ICAgICB9O1wKICAgICAgICAgICAgXAogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBOYW1l
IGNyZWF0ZSgpIHtcCiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcE5hbWUoSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7XAogICAgICAgICAgICB9XAoKICAgIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogICAgfQogICAgbmFtZXNwYWNlIFBhZ2UgewogICAgICAgIG5hbWVzcGFjZSBSZXNvdXJjZVR5
cGUgewogICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBkb2N1bWVudCA9ICJEb2N1bWVudCI7
CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0eWxlc2hlZXQgPSAiU3R5bGVzaGVldCI7
CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGltYWdlID0gIkltYWdlIjsKICAgICAgICAg
ICAgY29uc3QgY2hhciogY29uc3QgZm9udCA9ICJGb250IjsKICAgICAgICAgICAgY29uc3QgY2hh
ciogY29uc3Qgc2NyaXB0ID0gIlNjcmlwdCI7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHhociA9ICJYSFIiOwogICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCB3ZWJTb2NrZXQgPSAi
V2ViU29ja2V0IjsKICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgb3RoZXIgPSAiT3RoZXIi
OwogICAgICAgIH0KCiAgICAgICAgY2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPEZyYW1lPiByZXN1bHQgPSBGcmFt
ZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRJZCguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0TG9hZGVySWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAg
ICAgICAgICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAgICAgICAgICAgICovCiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExvYWRlcklk
OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
TWltZVR5cGU7CgogICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRNaW1lVHlwZSwgRnJhbWUp
CiAgICAgICAgc2V0TWltZVR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01F
VEhPRF9CRUdJTigpLT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgTEFT
VF9TVEVQX1JFVFVSTihGcmFtZSkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFVybCwgU3RlcFNl
dE1pbWVUeXBlKQogICAgICAgIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFT
VF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TWltZVR5cGUpLT5zZXRTdHJpbmcoInVybCIsIHZh
bHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklER0Uo
U3RlcFNldExvYWRlcklkLCBTdGVwU2V0VXJsKQogICAgICAgIHNldExvYWRlcklkKFN0cmluZyB2
YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRVcmwpLT5z
ZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRV
Uk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0SWQsIFN0ZXBTZXRMb2FkZXJJZCkKICAgICAg
ICBzZXRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJ
TihTdGVwU2V0TG9hZGVySWQpLT5zZXRTdHJpbmcoImlkIiwgdmFsdWUpOwogICAgICAgICAgTk9U
X0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBT
ZXRJZCwgRnJhbWUpCgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRQYXJlbnRJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJp
bmcoInBhcmVudElkIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUg
dm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIHRoaXMtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAg
ICAgICB9OwoKICAgICAgICBjbGFzcyBGcmFtZVJlc291cmNlVHJlZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8RnJhbWVSZXNvdXJj
ZVRyZWU+IHJlc3VsdCA9IEZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQogICAgICAgICAgICAg
KiAgICAgLnNldEZyYW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRSZXNvdXJjZXMoLi4u
KTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRGcmFtZTsKICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldFJlc291cmNlczsKCiAgICAgIExBU1RfU1RFUF9QUk9MT0coU3Rl
cFNldFJlc291cmNlcywgRnJhbWVSZXNvdXJjZVRyZWUpCiAgICAgICAgc2V0UmVzb3VyY2VzKFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JF
R0lOKCktPnNldEFycmF5KCJyZXNvdXJjZXMiLCB2YWx1ZSk7CiAgICAgICAgICBMQVNUX1NURVBf
UkVUVVJOKEZyYW1lUmVzb3VyY2VUcmVlKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0RnJhbWUs
IFN0ZXBTZXRSZXNvdXJjZXMpCiAgICAgICAgc2V0RnJhbWUoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0UmVz
b3VyY2VzKS0+c2V0T2JqZWN0KCJmcmFtZSIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfUkVUVVJOKCkKICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0RnJhbWUs
IEZyYW1lUmVzb3VyY2VUcmVlKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2hpbGRGcmFt
ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBTZWFyY2hNYXRjaCA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8U2VhcmNoTWF0
Y2g+IHJlc3VsdCA9IFNlYXJjaE1hdGNoOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNl
dExpbmVOdW1iZXIoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldExpbmVDb250ZW50KC4uLik7
CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TGluZU51bWJlcjsKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldExpbmVDb250ZW50OwoKICAgICAgTEFTVF9TVEVQX1BST0xP
RyhTdGVwU2V0TGluZUNvbnRlbnQsIFNlYXJjaE1hdGNoKQogICAgICAgIHNldExpbmVDb250ZW50
KFN0cmluZyB2YWx1ZSkKICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0U3Ry
aW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oU2Vh
cmNoTWF0Y2gpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRMaW5lTnVtYmVyLCBTdGVwU2V0TGlu
ZUNvbnRlbnQpCiAgICAgICAgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICAgICAgICBO
T1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TGluZUNvbnRlbnQpLT5zZXROdW1iZXIo
ImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAg
ICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldExpbmVOdW1iZXIsIFNlYXJjaE1h
dGNoKQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBTZWFyY2hSZXN1bHQgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFNlYXJjaFJl
c3VsdD4gcmVzdWx0ID0gU2VhcmNoUmVzdWx0OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAg
LnNldFVybCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0TWF0Y2hlc0NvdW50KC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RnJhbWVJZDsK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1hdGNoZXNDb3VudDsKCiAgICAgIExBU1RfU1RFUF9Q
Uk9MT0coU3RlcFNldE1hdGNoZXNDb3VudCwgU2VhcmNoUmVzdWx0KQogICAgICAgIHNldE1hdGNo
ZXNDb3VudChkb3VibGUgdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCkt
PnNldE51bWJlcigibWF0Y2hlc0NvdW50IiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9TVEVQX1JF
VFVSTihTZWFyY2hSZXN1bHQpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRGcmFtZUlkLCBTdGVw
U2V0TWF0Y2hlc0NvdW50KQogICAgICAgIHNldEZyYW1lSWQoU3RyaW5nIHZhbHVlKQogICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldE1hdGNoZXNDb3VudCktPnNldFN0
cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgU1RFUF9CUklER0UoU3RlcFNldFVybCwgU3RlcFNldEZyYW1lSWQpCiAgICAgICAgc2V0
VXJsKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0
ZXBTZXRGcmFtZUlkKS0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFT
VF9TVEVQX1JFVFVSTigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFVy
bCwgU2VhcmNoUmVzdWx0KQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDb29raWUgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAg
ICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENv
b2tpZT4gcmVzdWx0ID0gQ29va2llOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldE5h
bWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXREb21haW4oLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFBhdGgoLi4uKQogICAg
ICAgICAgICAgKiAgICAgLnNldEV4cGlyZXMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFNp
emUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEh0dHBPbmx5KC4uLikKICAgICAgICAgICAg
ICogICAgIC5zZXRTZWN1cmUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFNlc3Npb24oLi4u
KTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROYW1lOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0VmFsdWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXREb21haW47
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRQYXRoOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
RXhwaXJlczsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNpemU7CiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRIdHRwT25seTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNlY3VyZTsKICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldFNlc3Npb247CgogICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBT
ZXRTZXNzaW9uLCBDb29raWUpCiAgICAgICAgc2V0U2Vzc2lvbihib29sIHZhbHVlKQogICAgICAg
ICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRCb29sZWFuKCJzZXNzaW9uIiwgdmFsdWUp
OwogICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihDb29raWUpCiAgICAgIFNURVBfQlJJREdFKFN0
ZXBTZXRTZWN1cmUsIFN0ZXBTZXRTZXNzaW9uKQogICAgICAgIHNldFNlY3VyZShib29sIHZhbHVl
KQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFNlc3Npb24pLT5z
ZXRCb29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVS
TigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRIdHRwT25seSwgU3RlcFNldFNlY3VyZSkKICAg
ICAgICBzZXRIdHRwT25seShib29sIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oU3RlcFNldFNlY3VyZSktPnNldEJvb2xlYW4oImh0dHBPbmx5IiwgdmFsdWUpOwog
ICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0
U2l6ZSwgU3RlcFNldEh0dHBPbmx5KQogICAgICAgIHNldFNpemUoaW50IHZhbHVlKQogICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldEh0dHBPbmx5KS0+c2V0TnVtYmVy
KCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBT
VEVQX0JSSURHRShTdGVwU2V0RXhwaXJlcywgU3RlcFNldFNpemUpCiAgICAgICAgc2V0RXhwaXJl
cyhpbnQgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0
U2l6ZSktPnNldE51bWJlcigiZXhwaXJlcyIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFBhdGgsIFN0ZXBTZXRFeHBpcmVz
KQogICAgICAgIHNldFBhdGgoU3RyaW5nIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9N
RVRIT0RfQkVHSU4oU3RlcFNldEV4cGlyZXMpLT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7CiAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRE
b21haW4sIFN0ZXBTZXRQYXRoKQogICAgICAgIHNldERvbWFpbihTdHJpbmcgdmFsdWUpCiAgICAg
ICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0UGF0aCktPnNldFN0cmluZygi
ZG9tYWluIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBT
VEVQX0JSSURHRShTdGVwU2V0VmFsdWUsIFN0ZXBTZXREb21haW4pCiAgICAgICAgc2V0VmFsdWUo
U3RyaW5nIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNl
dERvbWFpbiktPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9T
VEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXROYW1lLCBTdGVwU2V0VmFsdWUp
CiAgICAgICAgc2V0TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01F
VEhPRF9CRUdJTihTdGVwU2V0VmFsdWUpLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAg
ICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVB
VEUoU3RlcFNldE5hbWUsIENvb2tpZSkKCiAgICAgICAgfTsKCiAgICAvKiBVbmlxdWUgc2NyaXB0
IGlkZW50aWZpZXIuICovCiAgICAgICAgdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsK
CiAgICB9CiAgICBuYW1lc3BhY2UgUnVudGltZSB7CiAgICAvKiBVbmlxdWUgb2JqZWN0IGlkZW50
aWZpZXIuICovCiAgICAgICAgdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7CgogICAgICAg
IGNsYXNzIFJlbW90ZU9iamVjdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICAgICAgICAgKiBSZWZQdHI8UmVtb3RlT2JqZWN0PiByZXN1bHQgPSBSZW1vdGVPYmpl
Y3Q6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICAgICAg
ICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFR5cGU7CgogICAgICBMQVNUX1NURVBfUFJP
TE9HKFN0ZXBTZXRUeXBlLCBSZW1vdGVPYmplY3QpCiAgICAgICAgc2V0VHlwZShTdHJpbmcgdmFs
dWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldFN0cmluZygidHlwZSIs
IHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oUmVtb3RlT2JqZWN0KQogICAgICBG
SVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRUeXBlLCBSZW1vdGVPYmplY3QpCgogICAg
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRTdWJ0eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2xhc3NOYW1lKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dFN0cmluZygiY2xhc3NOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBp
bmxpbmUgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUp
OwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZh
bHVlOwoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJk
ZXNjcmlwdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZv
aWQgc2V0T2JqZWN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmplY3RJZCIsIHZhbHVlKTsKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0RnVuY3Rpb25Mb2NhdGlvbihQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRo
aXMtPnNldE9iamVjdCgiZnVuY3Rpb25Mb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgfQoK
ICAgICAgICB9OwoKICAgICAgICBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFByb3BlcnR5
RGVzY3JpcHRvcj4gcmVzdWx0ID0gUHJvcGVydHlEZXNjcmlwdG9yOjpjcmVhdGUoKQogICAgICAg
ICAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFdyaXRhYmxl
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRDb25maWd1cmFibGUoLi4uKQogICAgICAgICAg
ICAgKiAgICAgLnNldEVudW1lcmFibGUoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXROYW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0V3JpdGFibGU7CiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb25maWd1cmFibGU7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRFbnVtZXJhYmxlOwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0RW51bWVyYWJs
ZSwgUHJvcGVydHlEZXNjcmlwdG9yKQogICAgICAgIHNldEVudW1lcmFibGUoYm9vbCB2YWx1ZSkK
ICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0Qm9vbGVhbigiZW51bWVyYWJs
ZSIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oUHJvcGVydHlEZXNjcmlwdG9y
KQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0Q29uZmlndXJhYmxlLCBTdGVwU2V0RW51bWVyYWJs
ZSkKICAgICAgICBzZXRDb25maWd1cmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNU
X1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRFbnVtZXJhYmxlKS0+c2V0Qm9vbGVhbigiY29uZmln
dXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBT
VEVQX0JSSURHRShTdGVwU2V0V3JpdGFibGUsIFN0ZXBTZXRDb25maWd1cmFibGUpCiAgICAgICAg
c2V0V3JpdGFibGUoYm9vbCB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JF
R0lOKFN0ZXBTZXRDb25maWd1cmFibGUpLT5zZXRCb29sZWFuKCJ3cml0YWJsZSIsIHZhbHVlKTsK
ICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNl
dE5hbWUsIFN0ZXBTZXRXcml0YWJsZSkKICAgICAgICBzZXROYW1lKFN0cmluZyB2YWx1ZSkKICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRXcml0YWJsZSktPnNldFN0
cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAg
ICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRP
YmplY3QoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2luZyBJ
bnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0R2V0
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJnZXQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldFNldChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgic2V0
IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRXYXNU
aHJvd24oYm9vbCB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0
Qm9vbGVhbigid2FzVGhyb3duIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07Cgog
ICAgICAgIGNsYXNzIENhbGxBcmd1bWVudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q2FsbEFyZ3VtZW50PiByZXN1bHQgPSBDYWxs
QXJndW1lbnQ6OmNyZWF0ZSgpOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaW5saW5lIHN0
YXRpYyBQYXNzUmVmUHRyPENhbGxBcmd1bWVudD4gY3JlYXRlKCkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVmID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8Q2FsbEFyZ3VtZW50Pio+KCZyZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzaW5nIEluc3BlY3Rvck9iamVj
dDo6c2V0VmFsdWU7CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRPYmplY3RJZChQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IHRoaXMtPnNldE9iamVjdCgib2JqZWN0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgfTsKCiAgICB9CiAgICBuYW1lc3BhY2UgQ29uc29sZSB7CiAgICAgICAgY2xhc3MgQ29uc29s
ZU1lc3NhZ2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAg
ICAgICogUmVmUHRyPENvbnNvbGVNZXNzYWdlPiByZXN1bHQgPSBDb25zb2xlTWVzc2FnZTo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRTb3VyY2UoLi4uKQogICAgICAgICAgICAgKiAg
ICAgLnNldExldmVsKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRUZXh0KC4uLik7CiAgICAg
ICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U291cmNlOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0TGV2ZWw7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUZXh0OwoKICAgICAg
TEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0VGV4dCwgQ29uc29sZU1lc3NhZ2UpCiAgICAgICAgc2V0
VGV4dChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNl
dFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oQ29uc29s
ZU1lc3NhZ2UpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRMZXZlbCwgU3RlcFNldFRleHQpCiAg
ICAgICAgc2V0TGV2ZWwoU3RyaW5nIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oU3RlcFNldFRleHQpLT5zZXRTdHJpbmcoImxldmVsIiwgdmFsdWUpOwogICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0U291cmNl
LCBTdGVwU2V0TGV2ZWwpCiAgICAgICAgc2V0U291cmNlKFN0cmluZyB2YWx1ZSkKICAgICAgICAg
IE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRMZXZlbCktPnNldFN0cmluZygic291
cmNlIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJT
VF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRTb3VyY2UsIENvbnNvbGVNZXNzYWdlKQoKICAg
ICAgICAgICAgaW5saW5lIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFVybChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVy
bCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0TGlu
ZShpbnQgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE51bWJl
cigibGluZSIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQg
c2V0UmVwZWF0Q291bnQoaW50IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0
aGlzLT5zZXROdW1iZXIoInJlcGVhdENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRBcnJheSgi
cGFyYW1ldGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZv
aWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1
ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldE5ldHdvcmtSZXF1
ZXN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJuZXR3b3JrUmVxdWVzdElkIiwgdmFsdWUpOwogICAgICAgICAgICB9
CgogICAgICAgIH07CgogICAgICAgIGNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1
bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0RnVuY3Rpb25O
YW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICAgICAgICAgKiAg
ICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldENvbHVtbk51bWJl
ciguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldEZ1bmN0aW9u
TmFtZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVybDsKICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldExpbmVOdW1iZXI7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb2x1bW5OdW1iZXI7Cgog
ICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRDb2x1bW5OdW1iZXIsIENhbGxGcmFtZSkKICAg
ICAgICBzZXRDb2x1bW5OdW1iZXIoU3RyaW5nIHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01F
VEhPRF9CRUdJTigpLT5zZXRTdHJpbmcoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgICAgICAg
IExBU1RfU1RFUF9SRVRVUk4oQ2FsbEZyYW1lKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0TGlu
ZU51bWJlciwgU3RlcFNldENvbHVtbk51bWJlcikKICAgICAgICBzZXRMaW5lTnVtYmVyKFN0cmlu
ZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRDb2x1
bW5OdW1iZXIpLT5zZXRTdHJpbmcoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICBOT1Rf
TEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRVcmwsIFN0ZXBTZXRM
aW5lTnVtYmVyKQogICAgICAgIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFT
VF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TGluZU51bWJlciktPnNldFN0cmluZygidXJsIiwg
dmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURH
RShTdGVwU2V0RnVuY3Rpb25OYW1lLCBTdGVwU2V0VXJsKQogICAgICAgIHNldEZ1bmN0aW9uTmFt
ZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVw
U2V0VXJsKS0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1Rf
TEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNl
dEZ1bmN0aW9uTmFtZSwgQ2FsbEZyYW1lKQoKICAgICAgICB9OwoKICAgIH0KICAgIG5hbWVzcGFj
ZSBOZXR3b3JrIHsKICAgIC8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KICAgICAgICB0
eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsKCiAgICAvKiBVbmlxdWUgcmVxdWVzdCBpZGVudGlmaWVy
LiAqLwogICAgICAgIHR5cGVkZWYgU3RyaW5nIFJlcXVlc3RJZDsKCiAgICAgICAgY2xhc3MgUmVz
b3VyY2VUaW1pbmcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAg
ICAgICAgICogUmVmUHRyPFJlc291cmNlVGltaW5nPiByZXN1bHQgPSBSZXNvdXJjZVRpbWluZzo6
Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRSZXF1ZXN0VGltZSguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0UHJveHlTdGFydCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UHJv
eHlFbmQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldERuc1N0YXJ0KC4uLikKICAgICAgICAg
ICAgICogICAgIC5zZXREbnNFbmQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldENvbm5lY3RT
dGFydCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Q29ubmVjdEVuZCguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0U3NsU3RhcnQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFNzbEVu
ZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2VuZFN0YXJ0KC4uLikKICAgICAgICAgICAg
ICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRSZWNlaXZlSGVh
ZGVyc0VuZCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFJl
cXVlc3RUaW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UHJveHlTdGFydDsKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFByb3h5RW5kOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RG5zU3Rh
cnQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXREbnNFbmQ7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRDb25uZWN0U3RhcnQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb25uZWN0RW5kOwog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3NsU3RhcnQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRTc2xFbmQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTZW5kU3RhcnQ7CiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRTZW5kRW5kOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UmVjZWl2ZUhl
YWRlcnNFbmQ7CgogICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRSZWNlaXZlSGVhZGVyc0Vu
ZCwgUmVzb3VyY2VUaW1pbmcpCiAgICAgICAgc2V0UmVjZWl2ZUhlYWRlcnNFbmQoZG91YmxlIHZh
bHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXROdW1iZXIoInJlY2Vp
dmVIZWFkZXJzRW5kIiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihSZXNvdXJj
ZVRpbWluZykKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNlbmRFbmQsIFN0ZXBTZXRSZWNlaXZl
SGVhZGVyc0VuZCkKICAgICAgICBzZXRTZW5kRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgIE5P
VF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRSZWNlaXZlSGVhZGVyc0VuZCktPnNldE51
bWJlcigic2VuZEVuZCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNlbmRTdGFydCwgU3RlcFNldFNlbmRFbmQpCiAgICAg
ICAgc2V0U2VuZFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVU
SE9EX0JFR0lOKFN0ZXBTZXRTZW5kRW5kKS0+c2V0TnVtYmVyKCJzZW5kU3RhcnQiLCB2YWx1ZSk7
CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBT
ZXRTc2xFbmQsIFN0ZXBTZXRTZW5kU3RhcnQpCiAgICAgICAgc2V0U3NsRW5kKGRvdWJsZSB2YWx1
ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTZW5kU3RhcnQp
LT5zZXROdW1iZXIoInNzbEVuZCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVU
VVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNzbFN0YXJ0LCBTdGVwU2V0U3NsRW5kKQog
ICAgICAgIHNldFNzbFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBf
TUVUSE9EX0JFR0lOKFN0ZXBTZXRTc2xFbmQpLT5zZXROdW1iZXIoInNzbFN0YXJ0IiwgdmFsdWUp
OwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVw
U2V0Q29ubmVjdEVuZCwgU3RlcFNldFNzbFN0YXJ0KQogICAgICAgIHNldENvbm5lY3RFbmQoZG91
YmxlIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFNz
bFN0YXJ0KS0+c2V0TnVtYmVyKCJjb25uZWN0RW5kIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xB
U1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0Q29ubmVjdFN0YXJ0LCBT
dGVwU2V0Q29ubmVjdEVuZCkKICAgICAgICBzZXRDb25uZWN0U3RhcnQoZG91YmxlIHZhbHVlKQog
ICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldENvbm5lY3RFbmQpLT5z
ZXROdW1iZXIoImNvbm5lY3RTdGFydCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBf
UkVUVVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldERuc0VuZCwgU3RlcFNldENvbm5lY3RT
dGFydCkKICAgICAgICBzZXREbnNFbmQoZG91YmxlIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1Rf
U1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldENvbm5lY3RTdGFydCktPnNldE51bWJlcigiZG5zRW5k
IiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JS
SURHRShTdGVwU2V0RG5zU3RhcnQsIFN0ZXBTZXREbnNFbmQpCiAgICAgICAgc2V0RG5zU3RhcnQo
ZG91YmxlIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNl
dERuc0VuZCktPnNldE51bWJlcigiZG5zU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFT
VF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRQcm94eUVuZCwgU3RlcFNl
dERuc1N0YXJ0KQogICAgICAgIHNldFByb3h5RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgIE5P
VF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXREbnNTdGFydCktPnNldE51bWJlcigicHJv
eHlFbmQiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNU
RVBfQlJJREdFKFN0ZXBTZXRQcm94eVN0YXJ0LCBTdGVwU2V0UHJveHlFbmQpCiAgICAgICAgc2V0
UHJveHlTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9C
RUdJTihTdGVwU2V0UHJveHlFbmQpLT5zZXROdW1iZXIoInByb3h5U3RhcnQiLCB2YWx1ZSk7CiAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRS
ZXF1ZXN0VGltZSwgU3RlcFNldFByb3h5U3RhcnQpCiAgICAgICAgc2V0UmVxdWVzdFRpbWUoZG91
YmxlIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFBy
b3h5U3RhcnQpLT5zZXROdW1iZXIoInJlcXVlc3RUaW1lIiwgdmFsdWUpOwogICAgICAgICAgTk9U
X0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBT
ZXRSZXF1ZXN0VGltZSwgUmVzb3VyY2VUaW1pbmcpCgogICAgICAgIH07CgogICAgICAgIGNsYXNz
IFJlcXVlc3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAg
ICAgICogUmVmUHRyPFJlcXVlc3Q+IHJlc3VsdCA9IFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgICAg
ICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRNZXRob2QoLi4u
KQogICAgICAgICAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKTsKICAgICAgICAgICAgICovCiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRVcmw7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRNZXRo
b2Q7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRIZWFkZXJzOwoKICAgICAgTEFTVF9TVEVQX1BS
T0xPRyhTdGVwU2V0SGVhZGVycywgUmVxdWVzdCkKICAgICAgICBzZXRIZWFkZXJzKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigp
LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICBMQVNUX1NURVBfUkVUVVJO
KFJlcXVlc3QpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRNZXRob2QsIFN0ZXBTZXRIZWFkZXJz
KQogICAgICAgIHNldE1ldGhvZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X01FVEhPRF9CRUdJTihTdGVwU2V0SGVhZGVycyktPnNldFN0cmluZygibWV0aG9kIiwgdmFsdWUp
OwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVw
U2V0VXJsLCBTdGVwU2V0TWV0aG9kKQogICAgICAgIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAg
ICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TWV0aG9kKS0+c2V0U3RyaW5n
KCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIEZJ
UlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFVybCwgUmVxdWVzdCkKCiAgICAgICAgICAg
IGlubGluZSB2b2lkIHNldFBvc3REYXRhKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygicG9zdERhdGEiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgUmVzcG9uc2UgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAg
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFJlc3Bv
bnNlPiByZXN1bHQgPSBSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRV
cmwoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0U3RhdHVzVGV4dCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0SGVhZGVycygu
Li4pCiAgICAgICAgICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKQogICAgICAgICAgICAgKiAg
ICAgLnNldENvbm5lY3Rpb25SZXVzZWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldENvbm5l
Y3Rpb25JZCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVy
bDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFN0YXR1czsKICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldFN0YXR1c1RleHQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRIZWFkZXJzOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0TWltZVR5cGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb25u
ZWN0aW9uUmV1c2VkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Q29ubmVjdGlvbklkOwoKICAg
ICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0Q29ubmVjdGlvbklkLCBSZXNwb25zZSkKICAgICAg
ICBzZXRDb25uZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhP
RF9CRUdJTigpLT5zZXROdW1iZXIoImNvbm5lY3Rpb25JZCIsIHZhbHVlKTsKICAgICAgICAgIExB
U1RfU1RFUF9SRVRVUk4oUmVzcG9uc2UpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRDb25uZWN0
aW9uUmV1c2VkLCBTdGVwU2V0Q29ubmVjdGlvbklkKQogICAgICAgIHNldENvbm5lY3Rpb25SZXVz
ZWQoYm9vbCB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBT
ZXRDb25uZWN0aW9uSWQpLT5zZXRCb29sZWFuKCJjb25uZWN0aW9uUmV1c2VkIiwgdmFsdWUpOwog
ICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0
TWltZVR5cGUsIFN0ZXBTZXRDb25uZWN0aW9uUmV1c2VkKQogICAgICAgIHNldE1pbWVUeXBlKFN0
cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRD
b25uZWN0aW9uUmV1c2VkKS0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAg
IE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldEhlYWRlcnMs
IFN0ZXBTZXRNaW1lVHlwZSkKICAgICAgICBzZXRIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldE1p
bWVUeXBlKS0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1Rf
U1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0U3RhdHVzVGV4dCwgU3RlcFNl
dEhlYWRlcnMpCiAgICAgICAgc2V0U3RhdHVzVGV4dChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBO
T1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0SGVhZGVycyktPnNldFN0cmluZygic3Rh
dHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAg
U1RFUF9CUklER0UoU3RlcFNldFN0YXR1cywgU3RlcFNldFN0YXR1c1RleHQpCiAgICAgICAgc2V0
U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lO
KFN0ZXBTZXRTdGF0dXNUZXh0KS0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRVcmwsIFN0
ZXBTZXRTdGF0dXMpCiAgICAgICAgc2V0VXJsKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9M
QVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTdGF0dXMpLT5zZXRTdHJpbmcoInVybCIsIHZh
bHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgRklSU1RfU1RFUF9F
TkRfQU5EX0NSRUFURShTdGVwU2V0VXJsLCBSZXNwb25zZSkKCiAgICAgICAgICAgIGlubGluZSB2
b2lkIHNldEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVyc1RleHQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFJlcXVlc3RIZWFkZXJzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UmVxdWVzdEhlYWRlcnNUZXh0KGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmlu
ZygicmVxdWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAg
ICBpbmxpbmUgdm9pZCBzZXRGcm9tRGlza0NhY2hlKGJvb2wgdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21EaXNrQ2FjaGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFRpbWluZyhQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IHRoaXMtPnNldE9iamVjdCgidGltaW5nIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAg
IH07CgogICAgICAgIGNsYXNzIFdlYlNvY2tldFJlcXVlc3QgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+
IHJlc3VsdCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAu
c2V0UmVxdWVzdEtleTMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKTsK
ICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSZXF1ZXN0S2V5MzsKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldEhlYWRlcnM7CgogICAgICBMQVNUX1NURVBfUFJPTE9HKFN0
ZXBTZXRIZWFkZXJzLCBXZWJTb2NrZXRSZXF1ZXN0KQogICAgICAgIHNldEhlYWRlcnMoUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lO
KCktPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRV
Uk4oV2ViU29ja2V0UmVxdWVzdCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFJlcXVlc3RLZXkz
LCBTdGVwU2V0SGVhZGVycykKICAgICAgICBzZXRSZXF1ZXN0S2V5MyhTdHJpbmcgdmFsdWUpCiAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0SGVhZGVycyktPnNldFN0
cmluZygicmVxdWVzdEtleTMiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVS
TigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFJlcXVlc3RLZXkzLCBX
ZWJTb2NrZXRSZXF1ZXN0KQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBXZWJTb2NrZXRSZXNw
b25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAg
KiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHJlc3VsdCA9IFdlYlNvY2tldFJlc3BvbnNlOjpj
cmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0U3RhdHVzVGV4dCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0SGVhZGVycygu
Li4pCiAgICAgICAgICAgICAqICAgICAuc2V0Q2hhbGxlbmdlUmVzcG9uc2UoLi4uKTsKICAgICAg
ICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdGF0dXM7CiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRTdGF0dXNUZXh0OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0SGVhZGVyczsK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldENoYWxsZW5nZVJlc3BvbnNlOwoKICAgICAgTEFTVF9T
VEVQX1BST0xPRyhTdGVwU2V0Q2hhbGxlbmdlUmVzcG9uc2UsIFdlYlNvY2tldFJlc3BvbnNlKQog
ICAgICAgIHNldENoYWxsZW5nZVJlc3BvbnNlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIExBU1Rf
U1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNwb25zZSIsIHZhbHVl
KTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oV2ViU29ja2V0UmVzcG9uc2UpCiAgICAgIFNU
RVBfQlJJREdFKFN0ZXBTZXRIZWFkZXJzLCBTdGVwU2V0Q2hhbGxlbmdlUmVzcG9uc2UpCiAgICAg
ICAgc2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgIE5P
VF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRDaGFsbGVuZ2VSZXNwb25zZSktPnNldE9i
amVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgU1RFUF9CUklER0UoU3RlcFNldFN0YXR1c1RleHQsIFN0ZXBTZXRIZWFkZXJzKQogICAg
ICAgIHNldFN0YXR1c1RleHQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9N
RVRIT0RfQkVHSU4oU3RlcFNldEhlYWRlcnMpLT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1
ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0
ZXBTZXRTdGF0dXMsIFN0ZXBTZXRTdGF0dXNUZXh0KQogICAgICAgIHNldFN0YXR1cyhkb3VibGUg
dmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U3RhdHVz
VGV4dCktPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RF
UF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRTdGF0dXMs
IFdlYlNvY2tldFJlc3BvbnNlKQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDYWNoZWRSZXNv
dXJjZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAg
KiBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+IHJlc3VsdCA9IENhY2hlZFJlc291cmNlOjpjcmVhdGUo
KQogICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0
VHlwZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UmVzcG9uc2UoLi4uKQogICAgICAgICAg
ICAgKiAgICAgLnNldEJvZHlTaXplKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlwZTsKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFJlc3BvbnNlOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Qm9keVNp
emU7CgogICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRCb2R5U2l6ZSwgQ2FjaGVkUmVzb3Vy
Y2UpCiAgICAgICAgc2V0Qm9keVNpemUoZG91YmxlIHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQ
X01FVEhPRF9CRUdJTigpLT5zZXROdW1iZXIoImJvZHlTaXplIiwgdmFsdWUpOwogICAgICAgICAg
TEFTVF9TVEVQX1JFVFVSTihDYWNoZWRSZXNvdXJjZSkKICAgICAgU1RFUF9CUklER0UoU3RlcFNl
dFJlc3BvbnNlLCBTdGVwU2V0Qm9keVNpemUpCiAgICAgICAgc2V0UmVzcG9uc2UoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJ
TihTdGVwU2V0Qm9keVNpemUpLT5zZXRPYmplY3QoInJlc3BvbnNlIiwgdmFsdWUpOwogICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0VHlwZSwg
U3RlcFNldFJlc3BvbnNlKQogICAgICAgIHNldFR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFJlc3BvbnNlKS0+c2V0U3RyaW5nKCJ0
eXBlIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQ
X0JSSURHRShTdGVwU2V0VXJsLCBTdGVwU2V0VHlwZSkKICAgICAgICBzZXRVcmwoU3RyaW5nIHZh
bHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFR5cGUpLT5z
ZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0VXJsLCBDYWNoZWRSZXNvdXJj
ZSkKCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgSW5pdGlhdG9yIDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxJbml0aWF0b3I+IHJl
c3VsdCA9IEluaXRpYXRvcjo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRUeXBlKC4u
Lik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlwZTsKCiAgICAg
IExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFR5cGUsIEluaXRpYXRvcikKICAgICAgICBzZXRUeXBl
KFN0cmluZyB2YWx1ZSkKICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihJbml0aWF0b3Ip
CiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFR5cGUsIEluaXRpYXRvcikK
CiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFy
cmF5KCJzdGFja1RyYWNlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxp
bmUgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldExpbmVOdW1iZXIoZG91YmxlIHZhbHVlKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1
ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICB9CiAgICBuYW1lc3BhY2UgRGF0YWJh
c2UgewogICAgICAgIGNsYXNzIERhdGFiYXNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxEYXRhYmFzZT4gcmVzdWx0ID0gRGF0YWJh
c2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0SWQoLi4uKQogICAgICAgICAgICAg
KiAgICAgLnNldERvbWFpbiguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAg
ICAgICAgICAgICAqICAgICAuc2V0VmVyc2lvbiguLi4pOwogICAgICAgICAgICAgKi8KICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldElkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RG9tYWluOwog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0TmFtZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFZl
cnNpb247CgogICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRWZXJzaW9uLCBEYXRhYmFzZSkK
ICAgICAgICBzZXRWZXJzaW9uKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIExBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oKS0+c2V0U3RyaW5nKCJ2ZXJzaW9uIiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9T
VEVQX1JFVFVSTihEYXRhYmFzZSkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldE5hbWUsIFN0ZXBT
ZXRWZXJzaW9uKQogICAgICAgIHNldE5hbWUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgTk9UX0xB
U1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFZlcnNpb24pLT5zZXRTdHJpbmcoIm5hbWUiLCB2
YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdF
KFN0ZXBTZXREb21haW4sIFN0ZXBTZXROYW1lKQogICAgICAgIHNldERvbWFpbihTdHJpbmcgdmFs
dWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TmFtZSktPnNl
dFN0cmluZygiZG9tYWluIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4o
KQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0SWQsIFN0ZXBTZXREb21haW4pCiAgICAgICAgc2V0
SWQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3Rl
cFNldERvbWFpbiktPnNldFN0cmluZygiaWQiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9T
VEVQX1JFVFVSTigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldElkLCBE
YXRhYmFzZSkKCiAgICAgICAgfTsKCiAgICB9CiAgICBuYW1lc3BhY2UgRE9NU3RvcmFnZSB7CiAg
ICAgICAgY2xhc3MgRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAgICAgICAgICogUmVmUHRyPEVudHJ5PiByZXN1bHQgPSBFbnRyeTo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICogICAgIC5zZXRIb3N0KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRJc0xv
Y2FsU3RvcmFnZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0SWQoLi4uKTsKICAgICAgICAg
ICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRIb3N0OwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0SXNMb2NhbFN0b3JhZ2U7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRJZDsKCiAgICAg
IExBU1RfU1RFUF9QUk9MT0coU3RlcFNldElkLCBFbnRyeSkKICAgICAgICBzZXRJZChkb3VibGUg
dmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldE51bWJlcigiaWQi
LCB2YWx1ZSk7CiAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKEVudHJ5KQogICAgICBTVEVQX0JS
SURHRShTdGVwU2V0SXNMb2NhbFN0b3JhZ2UsIFN0ZXBTZXRJZCkKICAgICAgICBzZXRJc0xvY2Fs
U3RvcmFnZShib29sIHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4o
U3RlcFNldElkKS0+c2V0Qm9vbGVhbigiaXNMb2NhbFN0b3JhZ2UiLCB2YWx1ZSk7CiAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRIb3N0LCBT
dGVwU2V0SXNMb2NhbFN0b3JhZ2UpCiAgICAgICAgc2V0SG9zdChTdHJpbmcgdmFsdWUpCiAgICAg
ICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0SXNMb2NhbFN0b3JhZ2UpLT5z
ZXRTdHJpbmcoImhvc3QiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigp
CiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldEhvc3QsIEVudHJ5KQoKICAg
ICAgICB9OwoKICAgIH0KICAgIG5hbWVzcGFjZSBBcHBsaWNhdGlvbkNhY2hlIHsKICAgICAgICBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAg
ICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAg
ICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFVybDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNpemU7CiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRUeXBlOwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0
VHlwZSwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKQogICAgICAgIHNldFR5cGUoU3RyaW5nIHZh
bHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJpbmcoInR5cGUi
LCB2YWx1ZSk7CiAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNpemUsIFN0ZXBTZXRUeXBlKQogICAgICAg
IHNldFNpemUoaW50IHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4o
U3RlcFNldFR5cGUpLT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFT
VF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRVcmwsIFN0ZXBTZXRTaXpl
KQogICAgICAgIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01F
VEhPRF9CRUdJTihTdGVwU2V0U2l6ZSktPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRF
KFN0ZXBTZXRVcmwsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSkKCiAgICAgICAgfTsKCiAgICAg
ICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcmVzdWx0ID0g
QXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRNYW5pZmVz
dFVSTCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0Q3JlYXRpb25UaW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRVcGRhdGVU
aW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRSZXNvdXJjZXMoLi4uKTsKICAgICAgICAg
ICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRNYW5pZmVzdFVSTDsKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldFNpemU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDcmVhdGlvblRpbWU7
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRVcGRhdGVUaW1lOwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0UmVzb3VyY2VzOwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0UmVzb3VyY2Vz
LCBBcHBsaWNhdGlvbkNhY2hlKQogICAgICAgIHNldFJlc291cmNlcyhSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRBcnJh
eSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihBcHBsaWNh
dGlvbkNhY2hlKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0VXBkYXRlVGltZSwgU3RlcFNldFJl
c291cmNlcykKICAgICAgICBzZXRVcGRhdGVUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgIE5P
VF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRSZXNvdXJjZXMpLT5zZXROdW1iZXIoInVw
ZGF0ZVRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAg
IFNURVBfQlJJREdFKFN0ZXBTZXRDcmVhdGlvblRpbWUsIFN0ZXBTZXRVcGRhdGVUaW1lKQogICAg
ICAgIHNldENyZWF0aW9uVGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X01FVEhPRF9CRUdJTihTdGVwU2V0VXBkYXRlVGltZSktPnNldE51bWJlcigiY3JlYXRpb25UaW1l
IiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JS
SURHRShTdGVwU2V0U2l6ZSwgU3RlcFNldENyZWF0aW9uVGltZSkKICAgICAgICBzZXRTaXplKGRv
dWJsZSB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRD
cmVhdGlvblRpbWUpLT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFT
VF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRNYW5pZmVzdFVSTCwgU3Rl
cFNldFNpemUpCiAgICAgICAgc2V0TWFuaWZlc3RVUkwoU3RyaW5nIHZhbHVlKQogICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFNpemUpLT5zZXRTdHJpbmcoIm1hbmlm
ZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBG
SVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRNYW5pZmVzdFVSTCwgQXBwbGljYXRpb25D
YWNoZSkKCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgRnJhbWVXaXRoTWFuaWZlc3QgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAg
ICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPEZy
YW1lV2l0aE1hbmlmZXN0PiByZXN1bHQgPSBGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICogICAgIC5zZXRGcmFtZUlkKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRN
YW5pZmVzdFVSTCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U3RhdHVzKC4uLik7CiAgICAg
ICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RnJhbWVJZDsKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldE1hbmlmZXN0VVJMOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3RhdHVz
OwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0U3RhdHVzLCBGcmFtZVdpdGhNYW5pZmVz
dCkKICAgICAgICBzZXRTdGF0dXMoaW50IHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhP
RF9CRUdJTigpLT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RF
UF9SRVRVUk4oRnJhbWVXaXRoTWFuaWZlc3QpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRNYW5p
ZmVzdFVSTCwgU3RlcFNldFN0YXR1cykKICAgICAgICBzZXRNYW5pZmVzdFVSTChTdHJpbmcgdmFs
dWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U3RhdHVzKS0+
c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBf
UkVUVVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldEZyYW1lSWQsIFN0ZXBTZXRNYW5pZmVz
dFVSTCkKICAgICAgICBzZXRGcmFtZUlkKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNU
X1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRNYW5pZmVzdFVSTCktPnNldFN0cmluZygiZnJhbWVJ
ZCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgRklSU1Rf
U1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0RnJhbWVJZCwgRnJhbWVXaXRoTWFuaWZlc3QpCgog
ICAgICAgIH07CgogICAgfQogICAgbmFtZXNwYWNlIERPTSB7CiAgICAgICAgY2xhc3MgTm9kZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoK
ICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQ
dHI8Tm9kZT4gcmVzdWx0ID0gTm9kZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRO
b2RlSWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE5vZGVUeXBlKC4uLikKICAgICAgICAg
ICAgICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0TG9jYWxO
YW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXROb2RlVmFsdWUoLi4uKTsKICAgICAgICAg
ICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROb2RlSWQ7CiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXROb2RlVHlwZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5vZGVOYW1lOwogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0TG9jYWxOYW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
Tm9kZVZhbHVlOwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0Tm9kZVZhbHVlLCBOb2Rl
KQogICAgICAgIHNldE5vZGVWYWx1ZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBf
TUVUSE9EX0JFR0lOKCktPnNldFN0cmluZygibm9kZVZhbHVlIiwgdmFsdWUpOwogICAgICAgICAg
TEFTVF9TVEVQX1JFVFVSTihOb2RlKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0TG9jYWxOYW1l
LCBTdGVwU2V0Tm9kZVZhbHVlKQogICAgICAgIHNldExvY2FsTmFtZShTdHJpbmcgdmFsdWUpCiAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0Tm9kZVZhbHVlKS0+c2V0
U3RyaW5nKCJsb2NhbE5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVS
TigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXROb2RlTmFtZSwgU3RlcFNldExvY2FsTmFtZSkK
ICAgICAgICBzZXROb2RlTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X01FVEhPRF9CRUdJTihTdGVwU2V0TG9jYWxOYW1lKS0+c2V0U3RyaW5nKCJub2RlTmFtZSIsIHZh
bHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklER0Uo
U3RlcFNldE5vZGVUeXBlLCBTdGVwU2V0Tm9kZU5hbWUpCiAgICAgICAgc2V0Tm9kZVR5cGUoaW50
IHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldE5vZGVO
YW1lKS0+c2V0TnVtYmVyKCJub2RlVHlwZSIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldE5vZGVJZCwgU3RlcFNldE5vZGVU
eXBlKQogICAgICAgIHNldE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X01FVEhPRF9CRUdJTihTdGVwU2V0Tm9kZVR5cGUpLT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVl
KTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgRklSU1RfU1RFUF9FTkRf
QU5EX0NSRUFURShTdGVwU2V0Tm9kZUlkLCBOb2RlKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQg
c2V0Q2hpbGROb2RlQ291bnQoaW50IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXROdW1iZXIoImNoaWxkTm9kZUNvdW50IiwgdmFsdWUpOwogICAgICAgICAgICB9
CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0QXJy
YXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUg
dm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRBcnJheSgiYXR0cmlidXRlcyIsIHZh
bHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0RG9jdW1lbnRV
UkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgaW5saW5lIHZvaWQgc2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwdWJsaWNJZCIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0U3lzdGVtSWQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJzeXN0ZW1JZCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5s
aW5lIHZvaWQgc2V0SW50ZXJuYWxTdWJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJpbnRlcm5hbFN1YnNldCIsIHZh
bHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0WG1sVmVyc2lv
bihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInhtbFZlcnNpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIGlubGluZSB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInZhbHVl
IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBFdmVudExpc3RlbmVyIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgog
ICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0
cjxFdmVudExpc3RlbmVyPiByZXN1bHQgPSBFdmVudExpc3RlbmVyOjpjcmVhdGUoKQogICAgICAg
ICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFVzZUNhcHR1
cmUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldElzQXR0cmlidXRlKC4uLikKICAgICAgICAg
ICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEhhbmRsZXJC
b2R5KC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlwZTsK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVzZUNhcHR1cmU7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRJc0F0dHJpYnV0ZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5vZGVJZDsKICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldEhhbmRsZXJCb2R5OwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhT
dGVwU2V0SGFuZGxlckJvZHksIEV2ZW50TGlzdGVuZXIpCiAgICAgICAgc2V0SGFuZGxlckJvZHko
U3RyaW5nIHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJp
bmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihFdmVu
dExpc3RlbmVyKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0Tm9kZUlkLCBTdGVwU2V0SGFuZGxl
ckJvZHkpCiAgICAgICAgc2V0Tm9kZUlkKGludCB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRIYW5kbGVyQm9keSktPnNldE51bWJlcigibm9kZUlkIiwg
dmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURH
RShTdGVwU2V0SXNBdHRyaWJ1dGUsIFN0ZXBTZXROb2RlSWQpCiAgICAgICAgc2V0SXNBdHRyaWJ1
dGUoYm9vbCB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBT
ZXROb2RlSWQpLT5zZXRCb29sZWFuKCJpc0F0dHJpYnV0ZSIsIHZhbHVlKTsKICAgICAgICAgIE5P
VF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFVzZUNhcHR1cmUs
IFN0ZXBTZXRJc0F0dHJpYnV0ZSkKICAgICAgICBzZXRVc2VDYXB0dXJlKGJvb2wgdmFsdWUpCiAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0SXNBdHRyaWJ1dGUpLT5z
ZXRCb29sZWFuKCJ1c2VDYXB0dXJlIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0VHlwZSwgU3RlcFNldFVzZUNhcHR1cmUp
CiAgICAgICAgc2V0VHlwZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01F
VEhPRF9CRUdJTihTdGVwU2V0VXNlQ2FwdHVyZSktPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsK
ICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgRklSU1RfU1RFUF9FTkRfQU5E
X0NSRUFURShTdGVwU2V0VHlwZSwgRXZlbnRMaXN0ZW5lcikKCiAgICAgICAgICAgIGlubGluZSB2
b2lkIHNldExvY2F0aW9uKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBSR0JBIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAg
ICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxSR0JB
PiByZXN1bHQgPSBSR0JBOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFIoLi4uKQog
ICAgICAgICAgICAgKiAgICAgLnNldEcoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEIoLi4u
KTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSOwogICAgICAgICAg
ICBjbGFzcyBTdGVwU2V0RzsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEI7CgogICAgICBMQVNU
X1NURVBfUFJPTE9HKFN0ZXBTZXRCLCBSR0JBKQogICAgICAgIHNldEIoaW50IHZhbHVlKQogICAg
ICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXROdW1iZXIoImIiLCB2YWx1ZSk7CiAg
ICAgICAgICBMQVNUX1NURVBfUkVUVVJOKFJHQkEpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRH
LCBTdGVwU2V0QikKICAgICAgICBzZXRHKGludCB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRCKS0+c2V0TnVtYmVyKCJnIiwgdmFsdWUpOwogICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0UiwgU3Rl
cFNldEcpCiAgICAgICAgc2V0UihpbnQgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01F
VEhPRF9CRUdJTihTdGVwU2V0RyktPnNldE51bWJlcigiciIsIHZhbHVlKTsKICAgICAgICAgIE5P
VF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVw
U2V0UiwgUkdCQSkKCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldEEoZG91YmxlIHZhbHVlKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXROdW1iZXIoImEiLCB2YWx1ZSk7
CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgSGlnaGxpZ2h0Q29uZmln
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAv
KgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJl
ZlB0cjxIaWdobGlnaHRDb25maWc+IHJlc3VsdCA9IEhpZ2hsaWdodENvbmZpZzo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8SGln
aGxpZ2h0Q29uZmlnPiBjcmVhdGUoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZWYgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGlnaHRDb25m
aWc+Kj4oJnJlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5saW5l
IHZvaWQgc2V0U2hvd0luZm8oYm9vbCB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0Qm9vbGVhbigic2hvd0luZm8iLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldENvbnRlbnRDb2xvcihQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9i
amVjdCgiY29udGVudENvbG9yIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBp
bmxpbmUgdm9pZCBzZXRQYWRkaW5nQ29sb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoInBhZGRp
bmdDb2xvciIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQg
c2V0Qm9yZGVyQ29sb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoImJvcmRlckNvbG9yIiwgdmFs
dWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRNYXJnaW5Db2xv
cihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgibWFyZ2luQ29sb3IiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIH0KCiAgICAgICAgfTsKCiAgICB9CiAgICBuYW1lc3BhY2UgQ1NTIHsKICAgICAgICBjbGFz
cyBDU1NTdHlsZUlkIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
ICAgICAgICAqIFJlZlB0cjxDU1NTdHlsZUlkPiByZXN1bHQgPSBDU1NTdHlsZUlkOjpjcmVhdGUo
KQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3Mg
U3RlcFNldFN0eWxlU2hlZXRJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE9yZGluYWw7Cgog
ICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRPcmRpbmFsLCBDU1NTdHlsZUlkKQogICAgICAg
IHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigp
LT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICBMQVNUX1NURVBfUkVUVVJO
KENTU1N0eWxlSWQpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTdHlsZVNoZWV0SWQsIFN0ZXBT
ZXRPcmRpbmFsKQogICAgICAgIHNldFN0eWxlU2hlZXRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0T3JkaW5hbCktPnNldFN0cmluZygi
c3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQog
ICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRTdHlsZVNoZWV0SWQsIENTU1N0
eWxlSWQpCgogICAgICAgIH07CgogICAgICAgIGNsYXNzIENTU1J1bGVJZCA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTUnVsZUlk
PiByZXN1bHQgPSBDU1NSdWxlSWQ6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0U3R5
bGVTaGVldElkKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRPcmRpbmFsKC4uLik7CiAgICAg
ICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3R5bGVTaGVldElkOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0T3JkaW5hbDsKCiAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNl
dE9yZGluYWwsIENTU1J1bGVJZCkKICAgICAgICBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAg
ICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFsdWUp
OwogICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihDU1NSdWxlSWQpCiAgICAgIFNURVBfQlJJREdF
KFN0ZXBTZXRTdHlsZVNoZWV0SWQsIFN0ZXBTZXRPcmRpbmFsKQogICAgICAgIHNldFN0eWxlU2hl
ZXRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihT
dGVwU2V0T3JkaW5hbCktPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRF
KFN0ZXBTZXRTdHlsZVNoZWV0SWQsIENTU1J1bGVJZCkKCiAgICAgICAgfTsKCiAgICAgICAgY2xh
c3MgQ1NTTm9kZVN0eWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICAgICAgICAgKiBSZWZQdHI8Q1NTTm9kZVN0eWxlcz4gcmVzdWx0ID0gQ1NTTm9kZVN0eWxl
czo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRDb21wdXRlZFN0eWxlKC4uLikKICAg
ICAgICAgICAgICogICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoLi4uKQogICAgICAgICAgICAgKiAg
ICAgLnNldFN0eWxlQXR0cmlidXRlcyguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UHNldWRv
RWxlbWVudHMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEluaGVyaXRlZCguLi4pOwogICAg
ICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldENvbXB1dGVkU3R5bGU7CiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXM7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRTdHlsZUF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRQc2V1ZG9FbGVt
ZW50czsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEluaGVyaXRlZDsKCiAgICAgIExBU1RfU1RF
UF9QUk9MT0coU3RlcFNldEluaGVyaXRlZCwgQ1NTTm9kZVN0eWxlcykKICAgICAgICBzZXRJbmhl
cml0ZWQoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgIExBU1RfU1RFUF9N
RVRIT0RfQkVHSU4oKS0+c2V0QXJyYXkoImluaGVyaXRlZCIsIHZhbHVlKTsKICAgICAgICAgIExB
U1RfU1RFUF9SRVRVUk4oQ1NTTm9kZVN0eWxlcykKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFBz
ZXVkb0VsZW1lbnRzLCBTdGVwU2V0SW5oZXJpdGVkKQogICAgICAgIHNldFBzZXVkb0VsZW1lbnRz
KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01F
VEhPRF9CRUdJTihTdGVwU2V0SW5oZXJpdGVkKS0+c2V0QXJyYXkoInBzZXVkb0VsZW1lbnRzIiwg
dmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURH
RShTdGVwU2V0U3R5bGVBdHRyaWJ1dGVzLCBTdGVwU2V0UHNldWRvRWxlbWVudHMpCiAgICAgICAg
c2V0U3R5bGVBdHRyaWJ1dGVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0UHNldWRvRWxlbWVudHMpLT5zZXRB
cnJheSgic3R5bGVBdHRyaWJ1dGVzIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0TWF0Y2hlZENTU1J1bGVzLCBTdGVwU2V0
U3R5bGVBdHRyaWJ1dGVzKQogICAgICAgIHNldE1hdGNoZWRDU1NSdWxlcyhSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3Rl
cFNldFN0eWxlQXR0cmlidXRlcyktPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7
CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBT
ZXRDb21wdXRlZFN0eWxlLCBTdGVwU2V0TWF0Y2hlZENTU1J1bGVzKQogICAgICAgIHNldENvbXB1
dGVkU3R5bGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICBOT1RfTEFT
VF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TWF0Y2hlZENTU1J1bGVzKS0+c2V0T2JqZWN0KCJj
b21wdXRlZFN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQog
ICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRDb21wdXRlZFN0eWxlLCBDU1NO
b2RlU3R5bGVzKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0SW5saW5lU3R5bGUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICB9Cgog
ICAgICAgIH07CgogICAgICAgIGNsYXNzIFBzZXVkb0lkUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+
IHJlc3VsdCA9IFBzZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0
UHNldWRvSWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFJ1bGVzKC4uLik7CiAgICAgICAg
ICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UHNldWRvSWQ7CiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRSdWxlczsKCiAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFJ1bGVzLCBQ
c2V1ZG9JZFJ1bGVzKQogICAgICAgIHNldFJ1bGVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldEFycmF5KCJydWxlcyIs
IHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oUHNldWRvSWRSdWxlcykKICAgICAg
U1RFUF9CUklER0UoU3RlcFNldFBzZXVkb0lkLCBTdGVwU2V0UnVsZXMpCiAgICAgICAgc2V0UHNl
dWRvSWQoaW50IHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3Rl
cFNldFJ1bGVzKS0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9M
QVNUX1NURVBfUkVUVVJOKCkKICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0
UHNldWRvSWQsIFBzZXVkb0lkUnVsZXMpCgogICAgICAgIH07CgogICAgICAgIGNsYXNzIEluaGVy
aXRlZFN0eWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAgICAgICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9IEluaGVyaXRl
ZFN0eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0TWF0Y2hlZENTU1J1
bGVzKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWF0Y2hl
ZENTU1J1bGVzOwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0TWF0Y2hlZENTU1J1bGVz
LCBJbmhlcml0ZWRTdHlsZUVudHJ5KQogICAgICAgIHNldE1hdGNoZWRDU1NSdWxlcyhSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigp
LT5zZXRBcnJheSgibWF0Y2hlZENTU1J1bGVzIiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9TVEVQ
X1JFVFVSTihJbmhlcml0ZWRTdHlsZUVudHJ5KQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JF
QVRFKFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXMsIEluaGVyaXRlZFN0eWxlRW50cnkpCgogICAgICAg
ICAgICBpbmxpbmUgdm9pZCBzZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgi
aW5saW5lU3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAg
Y2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAg
ICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiByZXN1bHQgPSBD
U1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXROYW1lKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRTdHlsZSguLi4pOwogICAgICAgICAgICAgKi8KICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldE5hbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHls
ZTsKCiAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFN0eWxlLCBDU1NTdHlsZUF0dHJpYnV0
ZSkKICAgICAgICBzZXRTdHlsZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAg
ICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0T2JqZWN0KCJzdHlsZSIsIHZhbHVlKTsK
ICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oQ1NTU3R5bGVBdHRyaWJ1dGUpCiAgICAgIFNURVBf
QlJJREdFKFN0ZXBTZXROYW1lLCBTdGVwU2V0U3R5bGUpCiAgICAgICAgc2V0TmFtZShTdHJpbmcg
dmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U3R5bGUp
LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVS
TigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldE5hbWUsIENTU1N0eWxl
QXR0cmlidXRlKQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NTdHlsZVNoZWV0SGVhZGVy
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAv
KgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJl
ZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0SGVhZGVyOjpj
cmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0U291cmNlVVJMKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRUaXRs
ZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0RGlzYWJsZWQoLi4uKTsKICAgICAgICAgICAg
ICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZVNoZWV0SWQ7CiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRTb3VyY2VVUkw7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUaXRsZTsKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldERpc2FibGVkOwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhT
dGVwU2V0RGlzYWJsZWQsIENTU1N0eWxlU2hlZXRIZWFkZXIpCiAgICAgICAgc2V0RGlzYWJsZWQo
Ym9vbCB2YWx1ZSkKICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0Qm9vbGVh
bigiZGlzYWJsZWQiLCB2YWx1ZSk7CiAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKENTU1N0eWxl
U2hlZXRIZWFkZXIpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRUaXRsZSwgU3RlcFNldERpc2Fi
bGVkKQogICAgICAgIHNldFRpdGxlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXREaXNhYmxlZCktPnNldFN0cmluZygidGl0bGUiLCB2YWx1
ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0
ZXBTZXRTb3VyY2VVUkwsIFN0ZXBTZXRUaXRsZSkKICAgICAgICBzZXRTb3VyY2VVUkwoU3RyaW5n
IHZhbHVlKQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFRpdGxl
KS0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTdHlsZVNoZWV0SWQsIFN0ZXBTZXRT
b3VyY2VVUkwpCiAgICAgICAgc2V0U3R5bGVTaGVldElkKFN0cmluZyB2YWx1ZSkKICAgICAgICAg
IE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTb3VyY2VVUkwpLT5zZXRTdHJpbmco
InN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0U3R5bGVTaGVldElkLCBDU1NT
dHlsZVNoZWV0SGVhZGVyKQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NTdHlsZVNoZWV0
Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAg
KiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5Ojpj
cmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRTdHlsZVNoZWV0SWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSdWxlczsK
CiAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFJ1bGVzLCBDU1NTdHlsZVNoZWV0Qm9keSkK
ICAgICAgICBzZXRSdWxlcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAg
TEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRBcnJheSgicnVsZXMiLCB2YWx1ZSk7CiAgICAg
ICAgICBMQVNUX1NURVBfUkVUVVJOKENTU1N0eWxlU2hlZXRCb2R5KQogICAgICBTVEVQX0JSSURH
RShTdGVwU2V0U3R5bGVTaGVldElkLCBTdGVwU2V0UnVsZXMpCiAgICAgICAgc2V0U3R5bGVTaGVl
dElkKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0
ZXBTZXRSdWxlcyktPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0
ZXBTZXRTdHlsZVNoZWV0SWQsIENTU1N0eWxlU2hlZXRCb2R5KQoKICAgICAgICAgICAgaW5saW5l
IHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgfTsKCiAgICAgICAgY2xhc3MgQ1NTUnVsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NT
UnVsZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRSdWxlSWQoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldFNlbGVjdG9yVGV4dCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0
U291cmNlTGluZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0T3JpZ2luKC4uLikKICAgICAg
ICAgICAgICogICAgIC5zZXRTdHlsZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldFJ1bGVJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNlbGVjdG9yVGV4
dDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNvdXJjZUxpbmU7CiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRPcmlnaW47CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZTsKCiAgICAgIExB
U1RfU1RFUF9QUk9MT0coU3RlcFNldFN0eWxlLCBDU1NSdWxlKQogICAgICAgIHNldFN0eWxlKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9C
RUdJTigpLT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgTEFTVF9TVEVQX1JF
VFVSTihDU1NSdWxlKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0T3JpZ2luLCBTdGVwU2V0U3R5
bGUpCiAgICAgICAgc2V0T3JpZ2luKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTdHlsZSktPnNldFN0cmluZygib3JpZ2luIiwgdmFsdWUp
OwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVw
U2V0U291cmNlTGluZSwgU3RlcFNldE9yaWdpbikKICAgICAgICBzZXRTb3VyY2VMaW5lKGludCB2
YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRPcmlnaW4p
LT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X1JFVFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTZWxlY3RvclRleHQsIFN0ZXBTZXRT
b3VyY2VMaW5lKQogICAgICAgIHNldFNlbGVjdG9yVGV4dChTdHJpbmcgdmFsdWUpCiAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U291cmNlTGluZSktPnNldFN0cmlu
Zygic2VsZWN0b3JUZXh0IiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4o
KQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0UnVsZUlkLCBTdGVwU2V0U2VsZWN0b3JUZXh0KQog
ICAgICAgIHNldFJ1bGVJZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAg
IE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTZWxlY3RvclRleHQpLT5zZXRPYmpl
Y3QoInJ1bGVJZCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAg
ICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0UnVsZUlkLCBDU1NSdWxlKQoKICAg
ICAgICAgICAgaW5saW5lIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlVVJMIiwg
dmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRTZWxlY3Rv
clJhbmdlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgdmFsdWUpOwog
ICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRNZWRpYShQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhp
cy0+c2V0QXJyYXkoIm1lZGlhIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07Cgog
ICAgICAgIGNsYXNzIFNvdXJjZVJhbmdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAg
ICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxTb3VyY2VSYW5nZT4gcmVzdWx0ID0gU291cmNl
UmFuZ2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0U3RhcnQoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldEVuZCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xh
c3MgU3RlcFNldFN0YXJ0OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RW5kOwoKICAgICAgTEFT
VF9TVEVQX1BST0xPRyhTdGVwU2V0RW5kLCBTb3VyY2VSYW5nZSkKICAgICAgICBzZXRFbmQoaW50
IHZhbHVlKQogICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXROdW1iZXIoImVu
ZCIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oU291cmNlUmFuZ2UpCiAgICAg
IFNURVBfQlJJREdFKFN0ZXBTZXRTdGFydCwgU3RlcFNldEVuZCkKICAgICAgICBzZXRTdGFydChp
bnQgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0RW5k
KS0+c2V0TnVtYmVyKCJzdGFydCIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVU
VVJOKCkKICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0U3RhcnQsIFNvdXJj
ZVJhbmdlKQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NTdHlsZSA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+
IHJlc3VsdCA9IENTU1N0eWxlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxl
SWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldENzc1Byb3BlcnRpZXMoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoLi4uKQogICAgICAgICAgICAgKiAgICAg
LnNldFdpZHRoKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRIZWlnaHQoLi4uKTsKICAgICAg
ICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZUlkOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0Q3NzUHJvcGVydGllczsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNob3J0
aGFuZEVudHJpZXM7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRXaWR0aDsKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldEhlaWdodDsKCiAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldEhlaWdo
dCwgQ1NTU3R5bGUpCiAgICAgICAgc2V0SGVpZ2h0KGludCB2YWx1ZSkKICAgICAgICAgIExBU1Rf
U1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0TnVtYmVyKCJoZWlnaHQiLCB2YWx1ZSk7CiAgICAgICAg
ICBMQVNUX1NURVBfUkVUVVJOKENTU1N0eWxlKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0V2lk
dGgsIFN0ZXBTZXRIZWlnaHQpCiAgICAgICAgc2V0V2lkdGgoaW50IHZhbHVlKQogICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldEhlaWdodCktPnNldE51bWJlcigid2lk
dGgiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIFNURVBf
QlJJREdFKFN0ZXBTZXRTaG9ydGhhbmRFbnRyaWVzLCBTdGVwU2V0V2lkdGgpCiAgICAgICAgc2V0
U2hvcnRoYW5kRW50cmllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFdpZHRoKS0+c2V0QXJyYXkoInNob3J0
aGFuZEVudHJpZXMiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAg
ICAgIFNURVBfQlJJREdFKFN0ZXBTZXRDc3NQcm9wZXJ0aWVzLCBTdGVwU2V0U2hvcnRoYW5kRW50
cmllcykKICAgICAgICBzZXRDc3NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U2hvcnRoYW5k
RW50cmllcyktPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgdmFsdWUpOwogICAgICAgICAgTk9U
X0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0U3R5bGVJZCwgU3Rl
cFNldENzc1Byb3BlcnRpZXMpCiAgICAgICAgc2V0U3R5bGVJZChSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRD
c3NQcm9wZXJ0aWVzKS0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFsdWUpOwogICAgICAgICAgTk9U
X0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBT
ZXRTdHlsZUlkLCBDU1NTdHlsZSkKCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldENzc1RleHQo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJjc3NUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBp
bmxpbmUgdm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1
ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgQ1NTUHJvcGVydHkg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8q
CiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVm
UHRyPENTU1Byb3BlcnR5PiByZXN1bHQgPSBDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRWYWx1ZSguLi4p
CiAgICAgICAgICAgICAqICAgICAuc2V0U2hvcnRoYW5kTmFtZSguLi4pOwogICAgICAgICAgICAg
Ki8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5hbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRWYWx1ZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNob3J0aGFuZE5hbWU7CgogICAgICBM
QVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRTaG9ydGhhbmROYW1lLCBDU1NQcm9wZXJ0eSkKICAgICAg
ICBzZXRTaG9ydGhhbmROYW1lKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIExBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oKS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgdmFsdWUpOwogICAgICAgICAg
TEFTVF9TVEVQX1JFVFVSTihDU1NQcm9wZXJ0eSkKICAgICAgU1RFUF9CUklER0UoU3RlcFNldFZh
bHVlLCBTdGVwU2V0U2hvcnRoYW5kTmFtZSkKICAgICAgICBzZXRWYWx1ZShTdHJpbmcgdmFsdWUp
CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U2hvcnRoYW5kTmFt
ZSktPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JF
VFVSTigpCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXROYW1lLCBTdGVwU2V0VmFsdWUpCiAgICAg
ICAgc2V0TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9C
RUdJTihTdGVwU2V0VmFsdWUpLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICBO
T1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3Rl
cFNldE5hbWUsIENTU1Byb3BlcnR5KQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UHJpb3Jp
dHkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0SW1wbGljaXQoYm9vbCB2YWx1ZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFBhcnNlZE9rKGJvb2wgdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInBhcnNlZE9rIiwg
dmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRTdGF0dXMo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlu
bGluZSB2b2lkIHNldFJhbmdlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NNZWRpYSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAg
ICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8
Q1NTTWVkaWE+IHJlc3VsdCA9IENTU01lZGlhOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAg
LnNldFRleHQoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRU
ZXh0OwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0VGV4dCwgQ1NTTWVkaWEpCiAgICAg
ICAgc2V0VGV4dChTdHJpbmcgdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lO
KCktPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4o
Q1NTTWVkaWEpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFRleHQsIENT
U01lZGlhKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0U291cmNlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygic291
cmNlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRT
b3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldFNvdXJjZUxpbmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VMaW5l
IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgfQogICAgbmFtZXNwYWNl
IFRpbWVsaW5lIHsKICAgICAgICBjbGFzcyBUaW1lbGluZUV2ZW50IDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxUaW1lbGluZUV2ZW50
PiByZXN1bHQgPSBUaW1lbGluZUV2ZW50OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNl
dFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAgICAgICAg
ICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUeXBlOwogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0RGF0YTsKCiAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldERhdGEsIFRpbWVsaW5lRXZl
bnQpCiAgICAgICAgc2V0RGF0YShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAg
ICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0T2JqZWN0KCJkYXRhIiwgdmFsdWUpOwog
ICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihUaW1lbGluZUV2ZW50KQogICAgICBTVEVQX0JSSURH
RShTdGVwU2V0VHlwZSwgU3RlcFNldERhdGEpCiAgICAgICAgc2V0VHlwZShTdHJpbmcgdmFsdWUp
CiAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0RGF0YSktPnNldFN0
cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAg
ICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0VHlwZSwgVGltZWxpbmVFdmVudCkK
CiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRBcnJh
eSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICB9CiAg
ICBuYW1lc3BhY2UgRGVidWdnZXIgewogICAgLyogQnJlYWtwb2ludCBpZGVudGlmaWVyLiAqLwog
ICAgICAgIHR5cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCiAgICAvKiBVbmlxdWUgc2NyaXB0
IGlkZW50aWZpZXIuICovCiAgICAgICAgdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgogICAgLyog
Q2FsbCBmcmFtZSBpZGVudGlmaWVyLiAqLwogICAgICAgIHR5cGVkZWYgU3RyaW5nIENhbGxGcmFt
ZUlkOwoKICAgICAgICBjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8TG9jYXRpb24+IHJlc3VsdCA9IExvY2F0
aW9uOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFNjcmlwdElkKC4uLikKICAgICAg
ICAgICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0U2NyaXB0SWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMaW5l
TnVtYmVyOwoKICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0TGluZU51bWJlciwgTG9jYXRp
b24pCiAgICAgICAgc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBf
TUVUSE9EX0JFR0lOKCktPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAg
IExBU1RfU1RFUF9SRVRVUk4oTG9jYXRpb24pCiAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTY3Jp
cHRJZCwgU3RlcFNldExpbmVOdW1iZXIpCiAgICAgICAgc2V0U2NyaXB0SWQoU3RyaW5nIHZhbHVl
KQogICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldExpbmVOdW1iZXIp
LT5zZXRTdHJpbmcoInNjcmlwdElkIiwgdmFsdWUpOwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRTY3JpcHRJZCwg
TG9jYXRpb24pCgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRDb2x1bW5OdW1iZXIoaW50IHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXROdW1iZXIoImNvbHVt
bk51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFz
cyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAg
ICAgICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUoKQog
ICAgICAgICAgICAgKiAgICAgLnNldENhbGxGcmFtZUlkKC4uLikKICAgICAgICAgICAgICogICAg
IC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldExvY2F0aW9uKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXRUaGlzKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0Q2FsbEZyYW1lSWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRGdW5jdGlvbk5hbWU7CiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMb2NhdGlvbjsKICAgICAgICAgICAgY2xhc3MgU3RlcFNl
dFNjb3BlQ2hhaW47CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUaGlzOwoKICAgICAgTEFTVF9T
VEVQX1BST0xPRyhTdGVwU2V0VGhpcywgQ2FsbEZyYW1lKQogICAgICAgIHNldFRoaXMoUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lO
KCktPnNldE9iamVjdCgidGhpcyIsIHZhbHVlKTsKICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4o
Q2FsbEZyYW1lKQogICAgICBTVEVQX0JSSURHRShTdGVwU2V0U2NvcGVDaGFpbiwgU3RlcFNldFRo
aXMpCiAgICAgICAgc2V0U2NvcGVDaGFpbihSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFRoaXMpLT5zZXRBcnJh
eSgic2NvcGVDaGFpbiIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgU1RFUF9CUklER0UoU3RlcFNldExvY2F0aW9uLCBTdGVwU2V0U2NvcGVDaGFpbikKICAg
ICAgICBzZXRMb2NhdGlvbihSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAg
IE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTY29wZUNoYWluKS0+c2V0T2JqZWN0
KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAg
ICAgU1RFUF9CUklER0UoU3RlcFNldEZ1bmN0aW9uTmFtZSwgU3RlcFNldExvY2F0aW9uKQogICAg
ICAgIHNldEZ1bmN0aW9uTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X01FVEhPRF9CRUdJTihTdGVwU2V0TG9jYXRpb24pLT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgU1RFUF9CUklE
R0UoU3RlcFNldENhbGxGcmFtZUlkLCBTdGVwU2V0RnVuY3Rpb25OYW1lKQogICAgICAgIHNldENh
bGxGcmFtZUlkKFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JF
R0lOKFN0ZXBTZXRGdW5jdGlvbk5hbWUpLT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwgdmFsdWUp
OwogICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICBGSVJTVF9TVEVQX0VORF9B
TkRfQ1JFQVRFKFN0ZXBTZXRDYWxsRnJhbWVJZCwgQ2FsbEZyYW1lKQoKICAgICAgICB9OwoKICAg
ICAgICBjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICAgICAgICAgKiBSZWZQdHI8U2NvcGU+IHJlc3VsdCA9IFNjb3BlOjpjcmVhdGUoKQogICAg
ICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE9iamVj
dCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFR5cGU7CiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRPYmplY3Q7CgogICAgICBMQVNUX1NURVBfUFJPTE9HKFN0
ZXBTZXRPYmplY3QsIFNjb3BlKQogICAgICAgIHNldE9iamVjdChSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0T2JqZWN0
KCJvYmplY3QiLCB2YWx1ZSk7CiAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKFNjb3BlKQogICAg
ICBTVEVQX0JSSURHRShTdGVwU2V0VHlwZSwgU3RlcFNldE9iamVjdCkKICAgICAgICBzZXRUeXBl
KFN0cmluZyB2YWx1ZSkKICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBT
ZXRPYmplY3QpLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICBOT1RfTEFTVF9T
VEVQX1JFVFVSTigpCiAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFR5cGUs
IFNjb3BlKQoKICAgICAgICB9OwoKICAgIH0KICAgIG5hbWVzcGFjZSBET01EZWJ1Z2dlciB7CiAg
ICAgICAgbmFtZXNwYWNlIERPTUJyZWFrcG9pbnRUeXBlIHsKICAgICAgICAgICAgY29uc3QgY2hh
ciogY29uc3Qgc3VidHJlZV9tb2RpZmllZCA9ICJzdWJ0cmVlLW1vZGlmaWVkIjsKICAgICAgICAg
ICAgY29uc3QgY2hhciogY29uc3QgYXR0cmlidXRlX21vZGlmaWVkID0gImF0dHJpYnV0ZS1tb2Rp
ZmllZCI7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5vZGVfcmVtb3ZlZCA9ICJub2Rl
LXJlbW92ZWQiOwogICAgICAgIH0KCiAgICB9CiAgICBuYW1lc3BhY2UgUHJvZmlsZXIgewogICAg
fQogICAgbmFtZXNwYWNlIFdvcmtlciB7CiAgICB9CiN1bmRlZiBGSVJTVF9TVEVQX0VORF9BTkRf
Q1JFQVRFCiN1bmRlZiBOT1RfTEFTVF9TVEVQX1JFVFVSTgojdW5kZWYgTk9UX0xBU1RfU1RFUF9N
RVRIT0RfQkVHSU4KI3VuZGVmIFNURVBfQlJJREdFCiN1bmRlZiBMQVNUX1NURVBfUkVUVVJOCiN1
bmRlZiBMQVNUX1NURVBfTUVUSE9EX0JFR0lOCiN1bmRlZiBMQVNUX1NURVBfUFJPTE9HCgp9Cgpj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CnB1YmxpYzoKICAgIEluc3BlY3RvckZyb250ZW5kKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOwoKCiAgICBjbGFzcyBJbnNwZWN0b3IgewogICAgcHVi
bGljOgogICAgICAgIEluc3BlY3RvcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZnJvbnRlbmRSZXVzZWQoKTsKICAgICAg
ICB2b2lkIGJyaW5nVG9Gcm9udCgpOwogICAgICAgIHZvaWQgZGlzY29ubmVjdEZyb21CYWNrZW5k
KCk7CiAgICAgICAgdm9pZCByZXNldCgpOwogICAgICAgIHZvaWQgc2hvd1BhbmVsKGNvbnN0IFN0
cmluZyYgcGFuZWwpOwogICAgICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkRGVidWdnaW5nKCk7
CiAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0ZXN0Q2FsbElkLCBj
b25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7
CiAgICAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcmIHVybCwg
Ym9vbCBpc1NoYXJlZCk7CiAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBpZCk7CiAg
ICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIElu
c3BlY3RvciogaW5zcGVjdG9yKCkgeyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAgY2xhc3Mg
UGFnZSB7CiAgICBwdWJsaWM6CiAgICAgICAgUGFnZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9tQ29udGVudEV2ZW50
RmlyZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkRXZlbnRGaXJlZChkb3Vi
bGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBmcmFtZSwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCk7CiAgICAgICAgdm9p
ZCBmcmFtZURldGFjaGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7CiAgICAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFBhZ2UqIHBhZ2UoKSB7IHJl
dHVybiAmbV9wYWdlOyB9CgogICAgY2xhc3MgUnVudGltZSB7CiAgICBwdWJsaWM6CiAgICAgICAg
UnVudGltZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsK
CiAgICBSdW50aW1lKiBydW50aW1lKCkgeyByZXR1cm4gJm1fcnVudGltZTsgfQoKICAgIGNsYXNz
IENvbnNvbGUgewogICAgcHVibGljOgogICAgICAgIENvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1lc3NhZ2VB
ZGRlZChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBt
ZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKGludCBjb3VudCk7CiAgICAgICAgdm9pZCBtZXNzYWdl
c0NsZWFyZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIH07CgogICAgQ29uc29sZSogY29uc29sZSgpIHsgcmV0dXJuICZtX2NvbnNvbGU7IH0KCiAg
ICBjbGFzcyBOZXR3b3JrIHsKICAgIHB1YmxpYzoKICAgICAgICBOZXR3b3JrKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBy
ZXF1ZXN0V2lsbEJlU2VudChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJM
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCwgZG91YmxlIHRpbWVzdGFtcCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gc3RhY2tUcmFjZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGlyZWN0
UmVzcG9uc2UpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCk7CiAgICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCBkYXRhUmVjZWl2
ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVu
Z3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgICAgIHZvaWQgbG9hZGluZ0ZpbmlzaGVk
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lk
IGxvYWRpbmdGYWlsZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAs
IGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCk7CiAg
ICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNv
dXJjZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXF1ZXN0KTsKICAgICAgICB2b2lkIHdlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCB3ZWJTb2Nr
ZXRDcmVhdGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHVybCk7CiAg
ICAgICAgdm9pZCB3ZWJTb2NrZXRDbG9zZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJs
ZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBOZXR3b3JrKiBuZXR3b3JrKCkgeyByZXR1cm4gJm1fbmV0d29yazsgfQoK
ICAgIGNsYXNzIERhdGFiYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBEYXRhYmFzZShJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZv
aWQgYWRkRGF0YWJhc2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKTsKICAg
ICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBjb2x1bW5OYW1lcywgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWVzKTsKICAgICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFu
c2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpOwogICAgICAg
IHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
ID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEYXRhYmFz
ZSogZGF0YWJhc2UoKSB7IHJldHVybiAmbV9kYXRhYmFzZTsgfQoKICAgIGNsYXNzIERPTVN0b3Jh
Z2UgewogICAgcHVibGljOgogICAgICAgIERPTVN0b3JhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERPTVN0b3Jh
Z2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpOwogICAgICAgIHZvaWQgdXBk
YXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NU3RvcmFnZSogZG9tc3RvcmFnZSgpIHsg
cmV0dXJuICZtX2RvbXN0b3JhZ2U7IH0KCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIHsKICAg
IHB1YmxpYzoKICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhcHBsaWNhdGlvbkNh
Y2hlU3RhdHVzVXBkYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbWFu
aWZlc3RVUkwsIGludCBzdGF0dXMpOwogICAgICAgIHZvaWQgbmV0d29ya1N0YXRlVXBkYXRlZChi
b29sIGlzTm93T25saW5lKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25jYWNoZSgpIHsg
cmV0dXJuICZtX2FwcGxpY2F0aW9uY2FjaGU7IH0KCiAgICBjbGFzcyBET00gewogICAgcHVibGlj
OgogICAgICAgIERPTShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9jdW1lbnRVcGRhdGVkKCk7CiAgICAgICAgdm9pZCBz
ZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9k
ZXMpOwogICAgICAgIHZvaWQgYXR0cmlidXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZVJl
bW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAgICB2b2lkIGlubGlu
ZVN0eWxlSW52YWxpZGF0ZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZUlkcyk7CiAg
ICAgICAgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiBjaGFyYWN0ZXJEYXRhKTsKICAgICAgICB2b2lkIGNoaWxkTm9kZUNvdW50VXBkYXRlZChpbnQg
bm9kZUlkLCBpbnQgY2hpbGROb2RlQ291bnQpOwogICAgICAgIHZvaWQgY2hpbGROb2RlSW5zZXJ0
ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZpb3VzTm9kZUlkLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbm9kZSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJl
bnROb2RlSWQsIGludCBub2RlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJp
dmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOwogICAgfTsKCiAgICBET00qIGRvbSgpIHsgcmV0dXJuICZtX2RvbTsgfQoKICAg
IGNsYXNzIENTUyB7CiAgICBwdWJsaWM6CiAgICAgICAgQ1NTKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIENTUyogY3NzKCkgeyByZXR1cm4gJm1f
Y3NzOyB9CgogICAgY2xhc3MgVGltZWxpbmUgewogICAgcHVibGljOgogICAgICAgIFRpbWVsaW5l
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAg
ICAgICAgdm9pZCBzdGFydGVkKCk7CiAgICAgICAgdm9pZCBzdG9wcGVkKCk7CiAgICAgICAgdm9p
ZCBldmVudFJlY29yZGVkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQpOwogICAg
ICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBUaW1l
bGluZSogdGltZWxpbmUoKSB7IHJldHVybiAmbV90aW1lbGluZTsgfQoKICAgIGNsYXNzIERlYnVn
Z2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY2FwYWJpbGl0eVNl
dFNjcmlwdFNvdXJjZTsKICAgICAgICBEZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZGVidWdnZXJXYXNFbmFi
bGVkKCk7CiAgICAgICAgdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAgICAgICAgdm9pZCBz
Y3JpcHRQYXJzZWQoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGlu
dCBzdGFydExpbmUsIGludCBzdGFydENvbHVtbiwgaW50IGVuZExpbmUsIGludCBlbmRDb2x1bW4s
IGNvbnN0IGJvb2wqIGNvbnN0IGlzQ29udGVudFNjcmlwdCk7CiAgICAgICAgdm9pZCBzY3JpcHRG
YWlsZWRUb1BhcnNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJj
ZSwgaW50IHN0YXJ0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpOwogICAgICAgIHZvaWQgYnJlYWtwb2ludFJlc29sdmVkKGNvbnN0IFN0cmluZyYgYnJlYWtw
b2ludElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24pOwogICAgICAgIHZv
aWQgcGF1c2VkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxGcmFtZXMsIGNvbnN0IFN0
cmluZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAgICAg
dm9pZCByZXN1bWVkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICB9OwoKICAgIERlYnVnZ2VyKiBkZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2RlYnVnZ2Vy
OyB9CgogICAgY2xhc3MgRE9NRGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIERPTURlYnVn
Z2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IERPTURlYnVnZ2VyKiBkb21kZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2RvbWRlYnVnZ2VyOyB9Cgog
ICAgY2xhc3MgUHJvZmlsZXIgewogICAgcHVibGljOgogICAgICAgIFByb2ZpbGVyKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9p
ZCBwcm9maWxlcldhc0VuYWJsZWQoKTsKICAgICAgICB2b2lkIHByb2ZpbGVyV2FzRGlzYWJsZWQo
KTsKICAgICAgICB2b2lkIGFkZFByb2ZpbGVIZWFkZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGhlYWRlcik7CiAgICAgICAgdm9pZCBhZGRIZWFwU25hcHNob3RDaHVuayhpbnQgdWlkLCBj
b25zdCBTdHJpbmcmIGNodW5rKTsKICAgICAgICB2b2lkIGZpbmlzaEhlYXBTbmFwc2hvdChpbnQg
dWlkKTsKICAgICAgICB2b2lkIHNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBpc1Byb2ZpbGluZyk7
CiAgICAgICAgdm9pZCByZXNldFByb2ZpbGVzKCk7CiAgICAgICAgdm9pZCByZXBvcnRIZWFwU25h
cHNob3RQcm9ncmVzcyhpbnQgZG9uZSwgaW50IHRvdGFsKTsKICAgICAgICB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUHJvZmlsZXIqIHByb2ZpbGVyKCkg
eyByZXR1cm4gJm1fcHJvZmlsZXI7IH0KCiAgICBjbGFzcyBXb3JrZXIgewogICAgcHVibGljOgog
ICAgICAgIFdvcmtlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQogICAgICAgIHZvaWQgd29ya2VyQ3JlYXRlZChpbnQgd29ya2VySWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBib29sIGluc3BlY3RvckNvbm5lY3RlZCk7CiAgICAgICAgdm9pZCB3b3Jr
ZXJUZXJtaW5hdGVkKGludCB3b3JrZXJJZCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VG
cm9tV29ya2VyKGludCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsK
CiAgICBXb3JrZXIqIHdvcmtlcigpIHsgcmV0dXJuICZtX3dvcmtlcjsgfQoKCnByaXZhdGU6CiAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwog
ICAgSW5zcGVjdG9yIG1faW5zcGVjdG9yOwogICAgUGFnZSBtX3BhZ2U7CiAgICBSdW50aW1lIG1f
cnVudGltZTsKICAgIENvbnNvbGUgbV9jb25zb2xlOwogICAgTmV0d29yayBtX25ldHdvcms7CiAg
ICBEYXRhYmFzZSBtX2RhdGFiYXNlOwogICAgRE9NU3RvcmFnZSBtX2RvbXN0b3JhZ2U7CiAgICBB
cHBsaWNhdGlvbkNhY2hlIG1fYXBwbGljYXRpb25jYWNoZTsKICAgIERPTSBtX2RvbTsKICAgIENT
UyBtX2NzczsKICAgIFRpbWVsaW5lIG1fdGltZWxpbmU7CiAgICBEZWJ1Z2dlciBtX2RlYnVnZ2Vy
OwogICAgRE9NRGVidWdnZXIgbV9kb21kZWJ1Z2dlcjsKICAgIFByb2ZpbGVyIG1fcHJvZmlsZXI7
CiAgICBXb3JrZXIgbV93b3JrZXI7Cn07Cgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>116042</attachid>
            <date>2011-11-21 00:24:06 -0800</date>
            <delta_ts>2011-11-21 00:24:06 -0800</delta_ts>
            <desc>Sample generated file (long form)</desc>
            <filename>InspectorFrontend.h.sample.long_form</filename>
            <type>text/plain</type>
            <size>130795</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCnR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKICAgIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogICAgfQogICAgbmFtZXNwYWNlIFBhZ2UgewogICAgICAgIG5hbWVzcGFjZSBSZXNv
dXJjZVR5cGUgewogICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBkb2N1bWVudCA9ICJEb2N1
bWVudCI7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0eWxlc2hlZXQgPSAiU3R5bGVz
aGVldCI7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGltYWdlID0gIkltYWdlIjsKICAg
ICAgICAgICAgY29uc3QgY2hhciogY29uc3QgZm9udCA9ICJGb250IjsKICAgICAgICAgICAgY29u
c3QgY2hhciogY29uc3Qgc2NyaXB0ID0gIlNjcmlwdCI7CiAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGNvbnN0IHhociA9ICJYSFIiOwogICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCB3ZWJTb2Nr
ZXQgPSAiV2ViU29ja2V0IjsKICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgb3RoZXIgPSAi
T3RoZXIiOwogICAgICAgIH0KCiAgICAgICAgY2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPEZyYW1lPiByZXN1bHQg
PSBGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRJZCguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0TG9hZGVySWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCgu
Li4pCiAgICAgICAgICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAgICAgICAgICAgICov
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExv
YWRlcklkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0TWltZVR5cGU7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWltZVR5cGUgewogICAg
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxGcmFtZT4g
c2V0TWltZVR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZT4qPigmbV9q
c29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2
YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRVcmw7CiAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAg
IGlubGluZSBTdGVwU2V0TWltZVR5cGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9y
ZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0VXJsIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAg
ICAgaW5saW5lIFN0ZXBTZXRNaW1lVHlwZSBzZXRVcmwoU3RyaW5nIHZhbHVlKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRNaW1lVHlwZSByZXN1bHQobV9qc29u
X3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJ1cmwiLCB2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3Rl
cFNldExvYWRlcklkOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1f
anNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFVybChSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMb2FkZXJJZCB7CiAgICAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0VXJsIHNldExvYWRlcklk
KFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVw
U2V0VXJsIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVm
LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAg
ICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRJZDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBT
ZXRMb2FkZXJJZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29u
X3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRJZCB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVw
U2V0TG9hZGVySWQgc2V0SWQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIFN0ZXBTZXRMb2FkZXJJZCByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAg
ICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwogICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlu
bGluZSBTdGVwU2V0SWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6
IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBp
bmxpbmUgc3RhdGljIFN0ZXBTZXRJZCBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
U3RlcFNldElkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygicGFyZW50SWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3Ry
aW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgICAgIGNs
YXNzIEZyYW1lUmVzb3VyY2VUcmVlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAg
cHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gRnJh
bWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0RnJhbWUoLi4u
KQogICAgICAgICAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICAgICAgICAgKi8K
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldEZyYW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
UmVzb3VyY2VzOwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFJlc291cmNlcyB7CiAgICAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPEZyYW1lUmVzb3Vy
Y2VUcmVlPiBzZXRSZXNvdXJjZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRBcnJheSgicmVz
b3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
IGZyaWVuZCBjbGFzcyBTdGVwU2V0RnJhbWU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0UmVz
b3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVm
KG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNl
dEZyYW1lIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBT
ZXRSZXNvdXJjZXMgc2V0RnJhbWUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFJlc291cmNlcyByZXN1bHQo
bV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0T2JqZWN0KCJm
cmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNs
YXNzIEZyYW1lUmVzb3VyY2VUcmVlOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0RnJhbWUoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29u
X3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBT
ZXRGcmFtZSBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcFNldEZyYW1lKElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlubGlu
ZSB2b2lkIHNldENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRGcmFtZXMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgU2VhcmNo
TWF0Y2ggOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAg
ICogUmVmUHRyPFNlYXJjaE1hdGNoPiByZXN1bHQgPSBTZWFyY2hNYXRjaDo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikKICAgICAgICAgICAgICogICAgIC5z
ZXRMaW5lQ29udGVudCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldExpbmVOdW1iZXI7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMaW5lQ29udGVudDsKCiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMaW5lQ29udGVudCB7CiAgICAgICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiBzZXRMaW5lQ29u
dGVudChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
bV9qc29uX3JlZi0+c2V0U3RyaW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZt
X2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldExpbmVOdW1iZXI7CiAg
ICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAg
ICAgICAgICAgIGlubGluZSBTdGVwU2V0TGluZUNvbnRlbnQoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAg
IH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TGluZU51bWJlciB7CiAgICAgICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0TGluZUNvbnRlbnQgc2V0TGluZU51
bWJlcihkb3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
U3RlcFNldExpbmVDb250ZW50IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAg
ICBtX2pzb25fcmVmLT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTZWFyY2hNYXRjaDsKICAgICAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldExpbmVOdW1iZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
anNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07Cgog
ICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRMaW5lTnVtYmVyIGNyZWF0ZSgpIHsKICAg
ICAgICAgICAgICAgIHJldHVybiBTdGVwU2V0TGluZU51bWJlcihJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGNsYXNzIFNlYXJjaFJl
c3VsdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAg
KiBSZWZQdHI8U2VhcmNoUmVzdWx0PiByZXN1bHQgPSBTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRGcmFt
ZUlkKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRNYXRjaGVzQ291bnQoLi4uKTsKICAgICAg
ICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRVcmw7CiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRGcmFtZUlkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWF0Y2hlc0NvdW50OwoK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1hdGNoZXNDb3VudCB7CiAgICAgICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gc2V0TWF0
Y2hlc0NvdW50KGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoIm1hdGNoZXNDb3VudCIsIHZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaFJlc3Vs
dD4qPigmbV9qc29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRGcmFtZUlk
OwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAg
ICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE1hdGNoZXNDb3VudChSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRGcmFtZUlkIHsKICAgICAgICAgICAg
cHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRNYXRjaGVzQ291bnQgc2V0RnJh
bWVJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
U3RlcFNldE1hdGNoZXNDb3VudCByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAg
ICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2
YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRVcmw7CiAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAg
IGlubGluZSBTdGVwU2V0RnJhbWVJZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
Zl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRVcmwgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldEZyYW1lSWQgc2V0VXJsKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0RnJhbWVJZCByZXN1bHQobV9qc29uX3Jl
Zik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTZWFyY2hS
ZXN1bHQ7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVm
OwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRVcmwoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAg
ICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRVcmwgY3JlYXRlKCkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBTZXRVcmwoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDb29raWUgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAg
ICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENv
b2tpZT4gcmVzdWx0ID0gQ29va2llOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldE5h
bWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXREb21haW4oLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFBhdGgoLi4uKQogICAg
ICAgICAgICAgKiAgICAgLnNldEV4cGlyZXMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFNp
emUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEh0dHBPbmx5KC4uLikKICAgICAgICAgICAg
ICogICAgIC5zZXRTZWN1cmUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFNlc3Npb24oLi4u
KTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROYW1lOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0VmFsdWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXREb21haW47
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRQYXRoOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
RXhwaXJlczsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNpemU7CiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRIdHRwT25seTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNlY3VyZTsKICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldFNlc3Npb247CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U2Vz
c2lvbiB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVm
UHRyPENvb2tpZT4gc2V0U2Vzc2lvbihib29sIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldEJvb2xlYW4oInNlc3Npb24iLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxDb29r
aWU+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0U2VjdXJl
OwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAg
ICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFNlc3Npb24oUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAg
IH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U2VjdXJlIHsKICAgICAgICAgICAgcHVibGlj
OgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTZXNzaW9uIHNldFNlY3VyZShib29sIHZh
bHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRTZXNzaW9u
IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRC
b29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICBmcmllbmQgY2xhc3MgU3RlcFNldEh0dHBPbmx5OwogICAgICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNl
dFNlY3VyZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3Jl
ZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRIdHRwT25seSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBT
dGVwU2V0U2VjdXJlIHNldEh0dHBPbmx5KGJvb2wgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgU3RlcFNldFNlY3VyZSByZXN1bHQobV9qc29uX3JlZik7CiAgICAg
ICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0Qm9vbGVhbigiaHR0cE9ubHkiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFNp
emU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0SHR0cE9ubHkoUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAg
ICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U2l6ZSB7CiAgICAgICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0SHR0cE9ubHkgc2V0U2l6ZShpbnQgdmFs
dWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldEh0dHBPbmx5
IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRO
dW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBm
cmllbmQgY2xhc3MgU3RlcFNldEV4cGlyZXM7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U2l6
ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pz
b25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRFeHBp
cmVzIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRT
aXplIHNldEV4cGlyZXMoaW50IHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIFN0ZXBTZXRTaXplIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAg
ICBtX2pzb25fcmVmLT5zZXROdW1iZXIoImV4cGlyZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFBhdGg7CiAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAg
IGlubGluZSBTdGVwU2V0RXhwaXJlcyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
Zl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRQYXRoIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAg
ICAgaW5saW5lIFN0ZXBTZXRFeHBpcmVzIHNldFBhdGgoU3RyaW5nIHZhbHVlKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRFeHBpcmVzIHJlc3VsdChtX2pzb25f
cmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoInBhdGgiLCB2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3Rl
cFNldERvbWFpbjsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pz
b25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRQYXRoKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldERvbWFpbiB7CiAgICAgICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0UGF0aCBzZXREb21haW4oU3Ry
aW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRQ
YXRoIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5z
ZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0VmFsdWU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0
RG9tYWluKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVm
KG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNl
dFZhbHVlIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBT
ZXREb21haW4gc2V0VmFsdWUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIFN0ZXBTZXREb21haW4gcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAg
ICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldE5hbWU7CiAgICAg
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAg
ICAgICAgIGlubGluZSBTdGVwU2V0VmFsdWUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNv
bl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0TmFtZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgICAgIGlubGluZSBTdGVwU2V0VmFsdWUgc2V0TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFZhbHVlIHJlc3VsdChtX2pzb25f
cmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoIm5hbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBDb29r
aWU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwog
ICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXROYW1lKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAg
ICB9OwoKICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVwU2V0TmFtZSBjcmVhdGUoKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gU3RlcFNldE5hbWUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgIC8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRp
Zmllci4gKi8KICAgICAgICB0eXBlZGVmIFN0cmluZyBTY3JpcHRJZGVudGlmaWVyOwoKICAgIH0K
ICAgIG5hbWVzcGFjZSBSdW50aW1lIHsKICAgIC8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4g
Ki8KICAgICAgICB0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKCiAgICAgICAgY2xhc3Mg
UmVtb3RlT2JqZWN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
ICAgICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3VsdCA9IFJlbW90ZU9iamVjdDo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgICAgICAgICAqLwog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlwZTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRU
eXBlIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQ
dHI8UmVtb3RlT2JqZWN0PiBzZXRUeXBlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZW1v
dGVPYmplY3Q+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFJlbW90ZU9i
amVjdDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7
CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFR5cGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAg
ICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRUeXBlIGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBTdGVwU2V0VHlwZShJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRTdWJ0eXBlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dFN0cmluZygic3VidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5s
aW5lIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygiY2xhc3NOYW1lIiwgdmFsdWUpOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+
c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2lu
ZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0
RGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0T2JqZWN0SWQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmplY3RJ
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0RnVu
Y3Rpb25Mb2NhdGlvbihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgiZnVuY3Rpb25Mb2NhdGlvbiIs
IHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBQcm9wZXJ0
eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAg
ICAgICAgICogUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gcmVzdWx0ID0gUHJvcGVydHlEZXNj
cmlwdG9yOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldFdyaXRhYmxlKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRDb25m
aWd1cmFibGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEVudW1lcmFibGUoLi4uKTsKICAg
ICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROYW1lOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0V3JpdGFibGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb25maWd1cmFi
bGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRFbnVtZXJhYmxlOwoKICAgICAgICAgICAgY2xh
c3MgU3RlcFNldEVudW1lcmFibGUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAg
ICBpbmxpbmUgUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHNldEVudW1lcmFibGUoYm9v
bCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVm
LT5zZXRCb29sZWFuKCJlbnVtZXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJl
dHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPio+KCZtX2pz
b25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldENvbmZpZ3VyYWJsZTsKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRFbnVtZXJhYmxlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9
OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldENvbmZpZ3VyYWJsZSB7CiAgICAgICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0RW51bWVyYWJsZSBzZXRDb25maWd1
cmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBT
dGVwU2V0RW51bWVyYWJsZSByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAg
bV9qc29uX3JlZi0+c2V0Qm9vbGVhbigiY29uZmlndXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRXcml0YWJsZTsKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRDb25maWd1cmFibGUoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAg
IH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0V3JpdGFibGUgewogICAgICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldENvbmZpZ3VyYWJsZSBzZXRXcml0YWJs
ZShib29sIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBT
ZXRDb25maWd1cmFibGUgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1f
anNvbl9yZWYtPnNldEJvb2xlYW4oIndyaXRhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXROYW1lOwogICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBp
bmxpbmUgU3RlcFNldFdyaXRhYmxlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVm
XykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldE5hbWUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldFdyaXRhYmxlIHNldE5hbWUoU3RyaW5nIHZhbHVlKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRXcml0YWJsZSByZXN1bHQobV9qc29u
X3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJuYW1lIiwg
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgUHJv
cGVydHlEZXNjcmlwdG9yOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0TmFtZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykg
e30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldE5hbWUg
Y3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBTZXROYW1lKEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlubGluZSB2b2lkIHNl
dFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldEdldChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgiZ2V0Iiwg
dmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRTZXQoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRPYmplY3QoInNldCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgaW5saW5lIHZvaWQgc2V0V2FzVGhyb3duKGJvb2wgdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIHZhbHVlKTsKICAg
ICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAg
ICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENh
bGxBcmd1bWVudD4gcmVzdWx0ID0gQ2FsbEFyZ3VtZW50OjpjcmVhdGUoKTsKICAgICAgICAgICAg
ICovCiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+IGNy
ZWF0ZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlZiA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICByZXR1
cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxBcmd1bWVudD4qPigmcmVmKSktPnJlbGVh
c2UoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAg
ICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKICAgICAgICAgICAgaW5saW5l
IHZvaWQgc2V0T2JqZWN0SWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm9iamVjdElkIiwgdmFs
dWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgfQogICAgbmFtZXNwYWNlIENvbnNv
bGUgewogICAgICAgIGNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4gcmVz
dWx0ID0gQ29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0U291
cmNlKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRMZXZlbCguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0VGV4dCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldFNvdXJjZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExldmVsOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0VGV4dDsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUZXh0IHsKICAgICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQdHI8Q29uc29sZU1l
c3NhZ2U+IHNldFRleHQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENvbnNvbGVNZXNzYWdl
Pio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldExldmVsOwog
ICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAg
ICAgICAgICAgICBpbmxpbmUgU3RlcFNldFRleHQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1f
anNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07Cgog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0TGV2ZWwgewogICAgICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgICAgICBpbmxpbmUgU3RlcFNldFRleHQgc2V0TGV2ZWwoU3RyaW5nIHZhbHVlKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRUZXh0IHJlc3VsdChtX2pz
b25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoImxldmVs
IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNz
IFN0ZXBTZXRTb3VyY2U7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
bV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0TGV2ZWwoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9
CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U291cmNlIHsKICAgICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRMZXZlbCBzZXRTb3Vy
Y2UoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0
ZXBTZXRMZXZlbCByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29u
X3JlZi0+c2V0U3RyaW5nKCJzb3VyY2UiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgIGZyaWVuZCBjbGFzcyBDb25zb2xlTWVzc2FnZTsKICAgICAgICAgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUg
U3RlcFNldFNvdXJjZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8pIDog
bV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlu
bGluZSBzdGF0aWMgU3RlcFNldFNvdXJjZSBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gU3RlcFNldFNvdXJjZShJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygidHlwZSIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0VXJsKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmlu
ZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRMaW5lKGludCB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0
TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUg
dm9pZCBzZXRSZXBlYXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldE51bWJlcigicmVwZWF0Q291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0K
CiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFy
cmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxp
bmUgdm9pZCBzZXRTdGFja1RyYWNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRBcnJheSgic3RhY2tUcmFjZSIs
IHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0TmV0d29y
a1JlcXVlc3RJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoIm5ldHdvcmtSZXF1ZXN0SWQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+
IHJlc3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRGdW5j
dGlvbk5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICAg
ICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Q29sdW1u
TnVtYmVyKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RnVu
Y3Rpb25OYW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFz
cyBTdGVwU2V0TGluZU51bWJlcjsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldENvbHVtbk51bWJl
cjsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb2x1bW5OdW1iZXIgewogICAgICAgICAgICBw
dWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHNldENv
bHVtbk51bWJlcihTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJjb2x1bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+
Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0TGluZU51bWJl
cjsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwog
ICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRDb2x1bW5OdW1iZXIoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAg
ICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TGluZU51bWJlciB7CiAgICAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0Q29sdW1uTnVtYmVyIHNl
dExpbmVOdW1iZXIoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIFN0ZXBTZXRDb2x1bW5OdW1iZXIgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAg
ICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygibGluZU51bWJlciIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0VXJsOwog
ICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAg
ICAgICAgICAgICBpbmxpbmUgU3RlcFNldExpbmVOdW1iZXIoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAg
IH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VXJsIHsKICAgICAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRMaW5lTnVtYmVyIHNldFVybChTdHJpbmcgdmFs
dWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldExpbmVOdW1i
ZXIgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNl
dFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg
ZnJpZW5kIGNsYXNzIFN0ZXBTZXRGdW5jdGlvbk5hbWU7CiAgICAgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVw
U2V0VXJsKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVm
KG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNl
dEZ1bmN0aW9uTmFtZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGlu
ZSBTdGVwU2V0VXJsIHNldEZ1bmN0aW9uTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFVybCByZXN1bHQobV9qc29uX3JlZik7CiAg
ICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBDYWxs
RnJhbWU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVm
OwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRGdW5jdGlvbk5hbWUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9
CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRGdW5jdGlv
bk5hbWUgY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBTZXRGdW5jdGlvbk5h
bWUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoK
ICAgIH0KICAgIG5hbWVzcGFjZSBOZXR3b3JrIHsKICAgIC8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRp
Zmllci4gKi8KICAgICAgICB0eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsKCiAgICAvKiBVbmlxdWUg
cmVxdWVzdCBpZGVudGlmaWVyLiAqLwogICAgICAgIHR5cGVkZWYgU3RyaW5nIFJlcXVlc3RJZDsK
CiAgICAgICAgY2xhc3MgUmVzb3VyY2VUaW1pbmcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFJlc291cmNlVGltaW5nPiByZXN1bHQg
PSBSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRSZXF1ZXN0
VGltZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UHJveHlTdGFydCguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0UHJveHlFbmQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldERuc1N0
YXJ0KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXREbnNFbmQoLi4uKQogICAgICAgICAgICAg
KiAgICAgLnNldENvbm5lY3RTdGFydCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Q29ubmVj
dEVuZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U3NsU3RhcnQoLi4uKQogICAgICAgICAg
ICAgKiAgICAgLnNldFNzbEVuZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2VuZFN0YXJ0
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXRSZWNlaXZlSGVhZGVyc0VuZCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFJlcXVlc3RUaW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UHJv
eHlTdGFydDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFByb3h5RW5kOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0RG5zU3RhcnQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXREbnNFbmQ7CiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb25uZWN0U3RhcnQ7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRDb25uZWN0RW5kOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3NsU3RhcnQ7CiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRTc2xFbmQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTZW5k
U3RhcnQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTZW5kRW5kOwogICAgICAgICAgICBjbGFz
cyBTdGVwU2V0UmVjZWl2ZUhlYWRlcnNFbmQ7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UmVj
ZWl2ZUhlYWRlcnNFbmQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxp
bmUgUGFzc1JlZlB0cjxSZXNvdXJjZVRpbWluZz4gc2V0UmVjZWl2ZUhlYWRlcnNFbmQoZG91Ymxl
IHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYt
PnNldE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNvdXJjZVRpbWluZz4qPigmbV9q
c29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2
YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRTZW5kRW5kOwogICAgICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAg
ICAgICBpbmxpbmUgU3RlcFNldFJlY2VpdmVIZWFkZXJzRW5kKFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAg
ICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNlbmRFbmQgewogICAgICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFJlY2VpdmVIZWFkZXJzRW5kIHNldFNl
bmRFbmQoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IFN0ZXBTZXRSZWNlaXZlSGVhZGVyc0VuZCByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAg
ICAgICAgICAgbV9qc29uX3JlZi0+c2V0TnVtYmVyKCJzZW5kRW5kIiwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRTZW5kU3RhcnQ7
CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAg
ICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U2VuZEVuZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAg
fTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTZW5kU3RhcnQgewogICAgICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFNlbmRFbmQgc2V0U2VuZFN0YXJ0KGRv
dWJsZSB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0
U2VuZEVuZCByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3Jl
Zi0+c2V0TnVtYmVyKCJzZW5kU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFNzbEVuZDsKICAgICAgICAgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5l
IFN0ZXBTZXRTZW5kU3RhcnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6
IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0U3NsRW5kIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAg
aW5saW5lIFN0ZXBTZXRTZW5kU3RhcnQgc2V0U3NsRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0U2VuZFN0YXJ0IHJlc3VsdChtX2pz
b25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoInNzbEVu
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFz
cyBTdGVwU2V0U3NsU3RhcnQ7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U3NsRW5kKFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZf
KSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNzbFN0YXJ0IHsK
ICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTc2xFbmQg
c2V0U3NsU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIFN0ZXBTZXRTc2xFbmQgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAg
ICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldENvbm5lY3RFbmQ7CiAg
ICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAg
ICAgICAgICAgIGlubGluZSBTdGVwU2V0U3NsU3RhcnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07
CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Q29ubmVjdEVuZCB7CiAgICAgICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U3NsU3RhcnQgc2V0Q29ubmVjdEVuZChk
b3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNl
dFNzbFN0YXJ0IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25f
cmVmLT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldENvbm5lY3RTdGFydDsKICAgICAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAg
ICAgaW5saW5lIFN0ZXBTZXRDb25uZWN0RW5kKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pz
b25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldENvbm5lY3RTdGFydCB7CiAgICAgICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0Q29ubmVjdEVuZCBzZXRDb25uZWN0U3RhcnQo
ZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBT
ZXRDb25uZWN0RW5kIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pz
b25fcmVmLT5zZXROdW1iZXIoImNvbm5lY3RTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0RG5zRW5kOwogICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldENvbm5lY3RTdGFydChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9q
c29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXREbnNFbmQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgICAgICBpbmxpbmUgU3RlcFNldENvbm5lY3RTdGFydCBzZXREbnNFbmQoZG91YmxlIHZh
bHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRDb25uZWN0
U3RhcnQgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYt
PnNldE51bWJlcigiZG5zRW5kIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAg
ICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXREbnNTdGFydDsKICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0
ZXBTZXREbnNFbmQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNv
bl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0RG5zU3RhcnQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxp
bmUgU3RlcFNldERuc0VuZCBzZXREbnNTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldERuc0VuZCByZXN1bHQobV9qc29uX3JlZik7
CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0TnVtYmVyKCJkbnNTdGFydCIsIHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVw
U2V0UHJveHlFbmQ7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9q
c29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0RG5zU3RhcnQoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9
CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UHJveHlFbmQgewogICAg
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldERuc1N0YXJ0IHNl
dFByb3h5RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICBTdGVwU2V0RG5zU3RhcnQgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAg
ICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigicHJveHlFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFByb3h5U3RhcnQ7CiAg
ICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAg
ICAgICAgICAgIGlubGluZSBTdGVwU2V0UHJveHlFbmQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07
CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UHJveHlTdGFydCB7CiAgICAgICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0UHJveHlFbmQgc2V0UHJveHlTdGFydChk
b3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNl
dFByb3h5RW5kIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25f
cmVmLT5zZXROdW1iZXIoInByb3h5U3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFJlcXVlc3RUaW1lOwogICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldFByb3h5U3RhcnQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNv
bl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0UmVxdWVzdFRpbWUgewogICAgICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFByb3h5U3RhcnQgc2V0UmVxdWVzdFRpbWUoZG91
YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRQ
cm94eVN0YXJ0IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25f
cmVmLT5zZXROdW1iZXIoInJlcXVlc3RUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VUaW1pbmc7CiAgICAgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5s
aW5lIFN0ZXBTZXRSZXF1ZXN0VGltZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29u
X3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldFJlcXVlc3RUaW1lIGNyZWF0ZSgpIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBTdGVwU2V0UmVxdWVzdFRpbWUoSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjbGFzcyBSZXF1ZXN0IDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgog
ICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0
cjxSZXF1ZXN0PiByZXN1bHQgPSBSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAg
LnNldFVybCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0TWV0aG9kKC4uLikKICAgICAgICAg
ICAgICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWV0aG9kOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0SGVhZGVyczsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRIZWFk
ZXJzIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQ
dHI8UmVxdWVzdD4gc2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRPYmplY3Qo
ImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxSZXF1ZXN0Pio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQg
Y2xhc3MgU3RlcFNldE1ldGhvZDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRIZWFkZXJzKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9y
ZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1ldGhvZCB7
CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0SGVhZGVy
cyBzZXRNZXRob2QoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIFN0ZXBTZXRIZWFkZXJzIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAg
ICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoIm1ldGhvZCIsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldE1ldGhvZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
Zl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRVcmwgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldE1ldGhvZCBzZXRVcmwoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRNZXRob2QgcmVzdWx0KG1fanNvbl9yZWYp
OwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygidXJsIiwgdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgUmVxdWVzdDsK
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAg
ICAgICAgICAgICBpbmxpbmUgU3RlcFNldFVybChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsK
CiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldFVybCBjcmVhdGUoKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gU3RlcFNldFVybChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRQb3N0RGF0YShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmco
InBvc3REYXRhIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgICAgIGNs
YXNzIFJlc3BvbnNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
ICAgICAgICAqIFJlZlB0cjxSZXNwb25zZT4gcmVzdWx0ID0gUmVzcG9uc2U6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTdGF0
dXMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFN0YXR1c1RleHQoLi4uKQogICAgICAgICAg
ICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE1pbWVUeXBl
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRDb25uZWN0aW9uUmV1c2VkKC4uLikKICAgICAg
ICAgICAgICogICAgIC5zZXRDb25uZWN0aW9uSWQoLi4uKTsKICAgICAgICAgICAgICovCiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRVcmw7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdGF0dXM7
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdGF0dXNUZXh0OwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0SGVhZGVyczsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1pbWVUeXBlOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0Q29ubmVjdGlvblJldXNlZDsKICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldENvbm5lY3Rpb25JZDsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb25uZWN0aW9uSWQg
ewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxS
ZXNwb25zZT4gc2V0Q29ubmVjdGlvbklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoImNvbm5lY3Rpb25JZCIs
IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPFJlc3BvbnNlPio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3Rl
cFNldENvbm5lY3Rpb25SZXVzZWQ7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0Q29ubmVjdGlv
bklkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1f
anNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldENv
bm5lY3Rpb25SZXVzZWQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxp
bmUgU3RlcFNldENvbm5lY3Rpb25JZCBzZXRDb25uZWN0aW9uUmV1c2VkKGJvb2wgdmFsdWUpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldENvbm5lY3Rpb25JZCBy
ZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0Qm9v
bGVhbigiY29ubmVjdGlvblJldXNlZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0TWltZVR5cGU7CiAgICAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGlu
ZSBTdGVwU2V0Q29ubmVjdGlvblJldXNlZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29u
X3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRNaW1lVHlwZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgICAgIGlubGluZSBTdGVwU2V0Q29ubmVjdGlvblJldXNlZCBzZXRNaW1lVHlwZShTdHJp
bmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldENv
bm5lY3Rpb25SZXVzZWQgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1f
anNvbl9yZWYtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6
CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldEhlYWRlcnM7CiAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAg
IGlubGluZSBTdGVwU2V0TWltZVR5cGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9y
ZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0SGVhZGVycyB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgICAgIGlubGluZSBTdGVwU2V0TWltZVR5cGUgc2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVw
U2V0TWltZVR5cGUgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNv
bl9yZWYtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0U3RhdHVzVGV4dDsKICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAg
aW5saW5lIFN0ZXBTZXRIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVm
XykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFN0YXR1c1RleHQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICAgICBpbmxpbmUgU3RlcFNldEhlYWRlcnMgc2V0U3RhdHVzVGV4dChTdHJpbmcgdmFsdWUp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldEhlYWRlcnMgcmVz
dWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmlu
Zygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
IGZyaWVuZCBjbGFzcyBTdGVwU2V0U3RhdHVzOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFN0
YXR1c1RleHQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9y
ZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0U3RhdHVzIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0
ZXBTZXRTdGF0dXNUZXh0IHNldFN0YXR1cyhkb3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFN0YXR1c1RleHQgcmVzdWx0KG1fanNvbl9yZWYp
OwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigic3RhdHVzIiwgdmFs
dWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBT
ZXRVcmw7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
ZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U3RhdHVzKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAg
ICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVybCB7CiAgICAgICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U3RhdHVzIHNldFVybChTdHJpbmcgdmFs
dWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFN0YXR1cyBy
ZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3Ry
aW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVu
ZCBjbGFzcyBSZXNwb25zZTsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFVybChQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykg
e30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldFVybCBj
cmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcFNldFVybChJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRI
ZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoImhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICB9
CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMt
PnNldE9iamVjdCgicmVxdWVzdEhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldFJlcXVlc3RIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInJlcXVl
c3RIZWFkZXJzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5l
IHZvaWQgc2V0RnJvbURpc2tDYWNoZShib29sIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJmcm9tRGlza0NhY2hlIiwgdmFsdWUpOwogICAgICAg
ICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRUaW1pbmcoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRPYmplY3QoInRpbWluZyIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAg
ICAgICBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiByZXN1bHQg
PSBXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFJlcXVl
c3RLZXkzKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAgICAg
ICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UmVxdWVzdEtleTM7CiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRIZWFkZXJzOwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhlYWRlcnMg
ewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxX
ZWJTb2NrZXRSZXF1ZXN0PiBzZXRIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE9i
amVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+Kj4oJm1fanNvbl9yZWYpKS0+cmVs
ZWFzZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0UmVxdWVzdEtleTM7CiAgICAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGlu
ZSBTdGVwU2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDog
bV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRSZXF1ZXN0S2V5MyB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAg
ICAgIGlubGluZSBTdGVwU2V0SGVhZGVycyBzZXRSZXF1ZXN0S2V5MyhTdHJpbmcgdmFsdWUpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldEhlYWRlcnMgcmVzdWx0
KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygi
cmVxdWVzdEtleTMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZy
aWVuZCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0OwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0UmVx
dWVzdEtleTMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNv
bl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpbmxpbmUg
c3RhdGljIFN0ZXBTZXRSZXF1ZXN0S2V5MyBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gU3RlcFNldFJlcXVlc3RLZXkzKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgICAg
ICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgV2ViU29ja2V0UmVzcG9uc2UgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAg
ICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFdl
YlNvY2tldFJlc3BvbnNlPiByZXN1bHQgPSBXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFN0
YXR1c1RleHQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldENoYWxsZW5nZVJlc3BvbnNlKC4uLik7CiAgICAgICAgICAgICAqLwog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3RhdHVzOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
U3RhdHVzVGV4dDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhlYWRlcnM7CiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRDaGFsbGVuZ2VSZXNwb25zZTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRDaGFsbGVuZ2VSZXNwb25zZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAg
IGlubGluZSBQYXNzUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiBzZXRDaGFsbGVuZ2VSZXNwb25z
ZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbV9q
c29uX3JlZi0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNwb25zZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlc3Bv
bnNlPio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldEhlYWRl
cnM7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0Q2hhbGxlbmdlUmVzcG9uc2UoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9
CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0SGVhZGVycyB7CiAgICAg
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0Q2hhbGxlbmdlUmVz
cG9uc2Ugc2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0Q2hhbGxlbmdlUmVzcG9uc2UgcmVz
dWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE9iamVj
dCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZy
aWVuZCBjbGFzcyBTdGVwU2V0U3RhdHVzVGV4dDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRI
ZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVm
KG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNl
dFN0YXR1c1RleHQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUg
U3RlcFNldEhlYWRlcnMgc2V0U3RhdHVzVGV4dChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldEhlYWRlcnMgcmVzdWx0KG1fanNvbl9yZWYp
OwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygic3RhdHVzVGV4dCIs
IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBT
dGVwU2V0U3RhdHVzOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1f
anNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFN0YXR1c1RleHQoUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8p
IHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3RhdHVzIHsKICAg
ICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTdGF0dXNUZXh0
IHNldFN0YXR1cyhkb3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgU3RlcFNldFN0YXR1c1RleHQgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAg
ICAgICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgV2ViU29ja2V0UmVzcG9uc2U7CiAg
ICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRTdGF0dXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07
CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRTdGF0dXMgY3JlYXRlKCkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIFN0ZXBTZXRTdGF0dXMoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDYWNoZWRSZXNvdXJj
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAg
LyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBS
ZWZQdHI8Q2FjaGVkUmVzb3VyY2U+IHJlc3VsdCA9IENhY2hlZFJlc291cmNlOjpjcmVhdGUoKQog
ICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0VHlw
ZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UmVzcG9uc2UoLi4uKQogICAgICAgICAgICAg
KiAgICAgLnNldEJvZHlTaXplKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFz
cyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlwZTsKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldFJlc3BvbnNlOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Qm9keVNpemU7
CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Qm9keVNpemUgewogICAgICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJjZT4gc2V0Qm9k
eVNpemUoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IG1fanNvbl9yZWYtPnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4qPigm
bV9qc29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRSZXNwb25zZTsKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRCb2R5U2l6ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
bV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsK
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSZXNwb25zZSB7CiAgICAgICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0Qm9keVNpemUgc2V0UmVzcG9uc2UoUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgU3RlcFNldEJvZHlTaXplIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAg
ICAgICBtX2pzb25fcmVmLT5zZXRPYmplY3QoInJlc3BvbnNlIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRUeXBlOwogICAgICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAg
ICAgICBpbmxpbmUgU3RlcFNldFJlc3BvbnNlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pz
b25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldFR5cGUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICAgICBpbmxpbmUgU3RlcFNldFJlc3BvbnNlIHNldFR5cGUoU3RyaW5nIHZhbHVlKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRSZXNwb25zZSByZXN1bHQo
bV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJ0
eXBlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNs
YXNzIFN0ZXBTZXRVcmw7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
bV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0VHlwZShSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30K
ICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRVcmwgewogICAgICAgICAg
ICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFR5cGUgc2V0VXJsKFN0cmlu
ZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0VHlw
ZSByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0
U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZy
aWVuZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFVybChQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pz
b25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3Rl
cFNldFVybCBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcFNldFVybChJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAg
IGNsYXNzIEluaXRpYXRvciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1Ymxp
YzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICAgICAgICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJbml0aWF0b3I6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICAgICAgICAgKi8KICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldFR5cGU7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlw
ZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRy
PEluaXRpYXRvcj4gc2V0VHlwZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5pdGlhdG9y
Pio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBJbml0aWF0b3I7CiAgICAg
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAg
ICAgICAgaW5saW5lIFN0ZXBTZXRUeXBlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pz
b25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAg
ICAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVwU2V0VHlwZSBjcmVhdGUoKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gU3RlcFNldFR5cGUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhp
cy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIGlubGluZSB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJl
ciIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgIH0KICAgIG5hbWVzcGFj
ZSBEYXRhYmFzZSB7CiAgICAgICAgY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPERhdGFiYXNlPiByZXN1bHQg
PSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRJZCguLi4pCiAgICAg
ICAgICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXROYW1l
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRWZXJzaW9uKC4uLik7CiAgICAgICAgICAgICAq
LwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0SWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRE
b21haW47CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROYW1lOwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0VmVyc2lvbjsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRWZXJzaW9uIHsKICAgICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IHNldFZlcnNpb24oU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygidmVyc2lvbiIsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNlPio+KCZt
X2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldE5hbWU7CiAgICAgICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAg
ICAgIGlubGluZSBTdGVwU2V0VmVyc2lvbihSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29u
X3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXROYW1lIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAg
ICAgICAgaW5saW5lIFN0ZXBTZXRWZXJzaW9uIHNldE5hbWUoU3RyaW5nIHZhbHVlKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRWZXJzaW9uIHJlc3VsdChtX2pz
b25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoIm5hbWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3Mg
U3RlcFNldERvbWFpbjsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBt
X2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXROYW1lKFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQog
ICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldERvbWFpbiB7CiAgICAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0TmFtZSBzZXREb21haW4o
U3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBT
ZXROYW1lIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVm
LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0SWQ7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0
RG9tYWluKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVm
KG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNl
dElkIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRE
b21haW4gc2V0SWQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIFN0ZXBTZXREb21haW4gcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAg
ICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKICAgICAgICAgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUg
U3RlcFNldElkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmXykgOiBtX2pz
b25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaW5saW5l
IHN0YXRpYyBTdGVwU2V0SWQgY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBT
ZXRJZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgIH07
CgogICAgfQogICAgbmFtZXNwYWNlIERPTVN0b3JhZ2UgewogICAgICAgIGNsYXNzIEVudHJ5IDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgog
ICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0
cjxFbnRyeT4gcmVzdWx0ID0gRW50cnk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0
SG9zdCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoLi4uKQogICAg
ICAgICAgICAgKiAgICAgLnNldElkKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0SG9zdDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldElzTG9jYWxTdG9yYWdl
OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0SWQ7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
SWQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0
cjxFbnRyeT4gc2V0SWQoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxFbnRyeT4qPigmbV9qc29u
X3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRJc0xvY2FsU3RvcmFnZTsKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRJZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29u
X3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRJc0xvY2FsU3RvcmFnZSB7CiAgICAgICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0SWQgc2V0SXNMb2NhbFN0b3JhZ2UoYm9vbCB2
YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0SWQgcmVz
dWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldEJvb2xl
YW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAg
ICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRIb3N0OwogICAgICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNl
dElzTG9jYWxTdG9yYWdlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBt
X2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xh
c3MgU3RlcFNldEhvc3QgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxp
bmUgU3RlcFNldElzTG9jYWxTdG9yYWdlIHNldEhvc3QoU3RyaW5nIHZhbHVlKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRJc0xvY2FsU3RvcmFnZSByZXN1bHQo
bV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJo
b3N0IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xh
c3MgRW50cnk7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25f
cmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRIb3N0KFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVwU2V0SG9zdCBjcmVhdGUo
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcFNldEhvc3QoSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgIH0KICAgIG5hbWVzcGFjZSBB
cHBsaWNhdGlvbkNhY2hlIHsKICAgICAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8q
CiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZVJl
c291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4p
OwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVybDsKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFNpemU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUeXBlOwoKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldFR5cGUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHNldFR5
cGUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1f
anNvbl9yZWYtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4q
PigmbV9qc29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRTaXplOwogICAg
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAg
ICAgICAgICBpbmxpbmUgU3RlcFNldFR5cGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNv
bl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0U2l6ZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgICAgIGlubGluZSBTdGVwU2V0VHlwZSBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0VHlwZSByZXN1bHQobV9qc29uX3JlZik7
CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRV
cmw7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U2l6ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAg
fTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRVcmwgewogICAgICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFNpemUgc2V0VXJsKFN0cmluZyB2YWx1ZSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0U2l6ZSByZXN1bHQobV9q
c29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJ1cmwi
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRVcmwoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29u
X3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBT
ZXRVcmwgY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBTZXRVcmwoSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAg
cHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiByZXN1bHQgPSBBcHBs
aWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJM
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAgICAgICAgICogICAg
IC5zZXRDcmVhdGlvblRpbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFVwZGF0ZVRpbWUo
Li4uKQogICAgICAgICAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICAgICAgICAg
Ki8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1hbmlmZXN0VVJMOwogICAgICAgICAgICBjbGFz
cyBTdGVwU2V0U2l6ZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldENyZWF0aW9uVGltZTsKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldFVwZGF0ZVRpbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRSZXNvdXJjZXM7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UmVzb3VyY2VzIHsKICAgICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4gc2V0UmVzb3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0QXJyYXkoInJl
c291cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
IGZyaWVuZCBjbGFzcyBTdGVwU2V0VXBkYXRlVGltZTsKICAgICAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBT
ZXRSZXNvdXJjZXMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNv
bl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0VXBkYXRlVGltZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlu
bGluZSBTdGVwU2V0UmVzb3VyY2VzIHNldFVwZGF0ZVRpbWUoZG91YmxlIHZhbHVlKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRSZXNvdXJjZXMgcmVzdWx0KG1f
anNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigidXBk
YXRlVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVu
ZCBjbGFzcyBTdGVwU2V0Q3JlYXRpb25UaW1lOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFVw
ZGF0ZVRpbWUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9y
ZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0Q3JlYXRpb25UaW1lIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5s
aW5lIFN0ZXBTZXRVcGRhdGVUaW1lIHNldENyZWF0aW9uVGltZShkb3VibGUgdmFsdWUpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFVwZGF0ZVRpbWUgcmVzdWx0
KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigi
Y3JlYXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg
ZnJpZW5kIGNsYXNzIFN0ZXBTZXRTaXplOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldENyZWF0
aW9uVGltZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3Jl
ZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRTaXplIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBT
ZXRDcmVhdGlvblRpbWUgc2V0U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgU3RlcFNldENyZWF0aW9uVGltZSByZXN1bHQobV9qc29uX3JlZik7
CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRN
YW5pZmVzdFVSTDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pz
b25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTaXplKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1hbmlmZXN0VVJMIHsKICAgICAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTaXplIHNldE1hbmlm
ZXN0VVJMKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICBTdGVwU2V0U2l6ZSByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9q
c29uX3JlZi0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7CiAgICAgICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAg
ICAgaW5saW5lIFN0ZXBTZXRNYW5pZmVzdFVSTChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsK
CiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldE1hbmlmZXN0VVJMIGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBTdGVwU2V0TWFuaWZlc3RVUkwoSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjbGFzcyBGcmFt
ZVdpdGhNYW5pZmVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICAgICAgICAgKiBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+IHJlc3VsdCA9IEZyYW1lV2l0aE1h
bmlmZXN0OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldEZyYW1lSWQoLi4uKQogICAg
ICAgICAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJMKC4uLikKICAgICAgICAgICAgICogICAgIC5z
ZXRTdGF0dXMoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRG
cmFtZUlkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWFuaWZlc3RVUkw7CiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRTdGF0dXM7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3RhdHVzIHsK
ICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQdHI8RnJh
bWVXaXRoTWFuaWZlc3Q+IHNldFN0YXR1cyhpbnQgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFt
ZVdpdGhNYW5pZmVzdD4qPigmbV9qc29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0
ZXBTZXRNYW5pZmVzdFVSTDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTdGF0dXMoUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8p
IHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWFuaWZlc3RVUkwg
ewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFN0YXR1
cyBzZXRNYW5pZmVzdFVSTChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgU3RlcFNldFN0YXR1cyByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAg
ICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0RnJhbWVJ
ZDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwog
ICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRNYW5pZmVzdFVSTChSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRGcmFtZUlkIHsKICAgICAgICAgICAg
cHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRNYW5pZmVzdFVSTCBzZXRGcmFt
ZUlkKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBT
dGVwU2V0TWFuaWZlc3RVUkwgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAg
IG1fanNvbl9yZWYtPnNldFN0cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lV2l0aE1hbmlmZXN0OwogICAgICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZjsKICAgICAgICAgICAg
ICAgIGlubGluZSBTdGVwU2V0RnJhbWVJZChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9q
c29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAg
ICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldEZyYW1lSWQgY3JlYXRlKCkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIFN0ZXBTZXRGcmFtZUlkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICB9CiAgICBuYW1lc3BhY2UgRE9NIHsKICAg
ICAgICBjbGFzcyBOb2RlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGlj
OgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgICAgICAgICAqIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBOb2RlOjpjcmVhdGUoKQogICAgICAg
ICAgICAgKiAgICAgLnNldE5vZGVJZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Tm9kZVR5
cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE5vZGVOYW1lKC4uLikKICAgICAgICAgICAg
ICogICAgIC5zZXRMb2NhbE5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE5vZGVWYWx1
ZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5vZGVJZDsK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5vZGVUeXBlOwogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0Tm9kZU5hbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMb2NhbE5hbWU7CiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXROb2RlVmFsdWU7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Tm9k
ZVZhbHVlIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NS
ZWZQdHI8Tm9kZT4gc2V0Tm9kZVZhbHVlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoIm5vZGVWYWx1ZSIsIHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PE5vZGU+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0TG9j
YWxOYW1lOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9y
ZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE5vZGVWYWx1ZShSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMb2NhbE5hbWUgewogICAgICAg
ICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE5vZGVWYWx1ZSBzZXRM
b2NhbE5hbWUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIFN0ZXBTZXROb2RlVmFsdWUgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAg
ICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygibG9jYWxOYW1lIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXROb2RlTmFtZTsKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRMb2NhbE5hbWUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07
CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Tm9kZU5hbWUgewogICAgICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldExvY2FsTmFtZSBzZXROb2RlTmFtZShTdHJp
bmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldExv
Y2FsTmFtZSByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3Jl
Zi0+c2V0U3RyaW5nKCJub2RlTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0Tm9kZVR5cGU7CiAgICAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGlu
ZSBTdGVwU2V0Tm9kZU5hbWUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6
IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0Tm9kZVR5cGUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldE5vZGVOYW1lIHNldE5vZGVUeXBlKGludCB2YWx1ZSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0Tm9kZU5hbWUgcmVzdWx0KG1fanNv
bl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigibm9kZVR5
cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xh
c3MgU3RlcFNldE5vZGVJZDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXROb2RlVHlwZShSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVm
Xykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROb2RlSWQgewog
ICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE5vZGVUeXBl
IHNldE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgU3RlcFNldE5vZGVUeXBlIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAg
ICBtX2pzb25fcmVmLT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGU7CiAgICAgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0
ZXBTZXROb2RlSWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6IG1f
anNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpbmxp
bmUgc3RhdGljIFN0ZXBTZXROb2RlSWQgY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJu
IFN0ZXBTZXROb2RlSWQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2hpbGROb2RlQ291bnQoaW50IHZhbHVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXROdW1iZXIoImNoaWxkTm9kZUNvdW50
IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRDaGls
ZHJlbihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRBcnJheSgiYXR0cmlidXRlcyIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg
aW5saW5lIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UHVibGljSWQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJwdWJsaWNJZCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5s
aW5lIHZvaWQgc2V0U3lzdGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzeXN0ZW1JZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0SW50ZXJuYWxTdWJzZXQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3Ry
aW5nKCJpbnRlcm5hbFN1YnNldCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg
aW5saW5lIHZvaWQgc2V0WG1sVmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInhtbFZlcnNpb24iLCB2YWx1ZSk7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldE5hbWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAg
ICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKICAgICAgICB9OwoKICAgICAg
ICBjbGFzcyBFdmVudExpc3RlbmVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAg
cHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxFdmVudExpc3RlbmVyPiByZXN1bHQgPSBFdmVudExp
c3RlbmVyOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldFVzZUNhcHR1cmUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldElz
QXR0cmlidXRlKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldEhhbmRsZXJCb2R5KC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0VHlwZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVzZUNhcHR1
cmU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRJc0F0dHJpYnV0ZTsKICAgICAgICAgICAgY2xh
c3MgU3RlcFNldE5vZGVJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhhbmRsZXJCb2R5OwoK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhhbmRsZXJCb2R5IHsKICAgICAgICAgICAgcHVibGlj
OgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gc2V0SGFu
ZGxlckJvZHkoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygiaGFuZGxlckJvZHkiLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxFdmVudExpc3RlbmVy
Pio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldE5vZGVJZDsK
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAg
ICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRIYW5kbGVyQm9keShSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAg
ICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROb2RlSWQgewogICAgICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldEhhbmRsZXJCb2R5IHNldE5vZGVJZChp
bnQgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldEhh
bmRsZXJCb2R5IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25f
cmVmLT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0SXNBdHRyaWJ1dGU7CiAgICAgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlu
bGluZSBTdGVwU2V0Tm9kZUlkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykg
OiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldElzQXR0cmlidXRlIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAg
ICAgICAgaW5saW5lIFN0ZXBTZXROb2RlSWQgc2V0SXNBdHRyaWJ1dGUoYm9vbCB2YWx1ZSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0Tm9kZUlkIHJlc3VsdCht
X2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRCb29sZWFuKCJp
c0F0dHJpYnV0ZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZy
aWVuZCBjbGFzcyBTdGVwU2V0VXNlQ2FwdHVyZTsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRJ
c0F0dHJpYnV0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29u
X3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRVc2VDYXB0dXJlIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5s
aW5lIFN0ZXBTZXRJc0F0dHJpYnV0ZSBzZXRVc2VDYXB0dXJlKGJvb2wgdmFsdWUpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldElzQXR0cmlidXRlIHJlc3VsdCht
X2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRCb29sZWFuKCJ1
c2VDYXB0dXJlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJp
ZW5kIGNsYXNzIFN0ZXBTZXRUeXBlOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFVzZUNhcHR1
cmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9q
c29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlw
ZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0VXNl
Q2FwdHVyZSBzZXRUeXBlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBTdGVwU2V0VXNlQ2FwdHVyZSByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAg
ICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAg
ICAgICAgICBpbmxpbmUgU3RlcFNldFR5cGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
anNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07Cgog
ICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRUeXBlIGNyZWF0ZSgpIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBTdGVwU2V0VHlwZShJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRMb2NhdGlvbihQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRo
aXMtPnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
fTsKCiAgICAgICAgY2xhc3MgUkdCQSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8UkdCQT4gcmVzdWx0ID0gUkdCQTo6Y3JlYXRlKCkK
ICAgICAgICAgICAgICogICAgIC5zZXRSKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRHKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRCKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0UjsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEc7CiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRCOwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEIgewogICAgICAg
ICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxSR0JBPiBzZXRC
KGludCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtX2pzb25f
cmVmLT5zZXROdW1iZXIoImIiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxSR0JBPio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBm
cmllbmQgY2xhc3MgU3RlcFNldEc7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0QihSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykg
e30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRHIHsKICAgICAgICAg
ICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRCIHNldEcoaW50IHZhbHVl
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRCIHJlc3VsdCht
X2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoImci
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3Mg
U3RlcFNldFI7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29u
X3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0RyhSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAg
ICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSIHsKICAgICAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRHIHNldFIoaW50IHZhbHVlKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRHIHJlc3VsdChtX2pzb25fcmVmKTsK
ICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBSR0JBOwogICAgICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZjsKICAgICAgICAgICAg
ICAgIGlubGluZSBTdGVwU2V0UihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3Jl
Zl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgIGlubGluZSBzdGF0aWMgU3RlcFNldFIgY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0
dXJuIFN0ZXBTZXRSKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldEEoZG91YmxlIHZhbHVlKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICB0aGlzLT5zZXROdW1iZXIoImEiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0K
CiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgSGlnaGxpZ2h0Q29uZmlnIDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxIaWdobGlnaHRD
b25maWc+IHJlc3VsdCA9IEhpZ2hsaWdodENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAq
LwogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiBj
cmVhdGUoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZWYgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgcmV0
dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGlnaHRDb25maWc+Kj4oJnJlZikpLT5y
ZWxlYXNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0U2hvd0lu
Zm8oYm9vbCB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0Qm9v
bGVhbigic2hvd0luZm8iLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGlu
ZSB2b2lkIHNldENvbnRlbnRDb2xvcihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgiY29udGVudENv
bG9yIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRQ
YWRkaW5nQ29sb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoInBhZGRpbmdDb2xvciIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Qm9yZGVyQ29sb3Io
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRPYmplY3QoImJvcmRlckNvbG9yIiwgdmFsdWUpOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRNYXJnaW5Db2xvcihQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMt
PnNldE9iamVjdCgibWFyZ2luQ29sb3IiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
fTsKCiAgICB9CiAgICBuYW1lc3BhY2UgQ1NTIHsKICAgICAgICBjbGFzcyBDU1NTdHlsZUlkIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgog
ICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0
cjxDU1NTdHlsZUlkPiByZXN1bHQgPSBDU1NTdHlsZUlkOjpjcmVhdGUoKQogICAgICAgICAgICAg
KiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0T3JkaW5h
bCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFN0eWxlU2hl
ZXRJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE9yZGluYWw7CgogICAgICAgICAgICBjbGFz
cyBTdGVwU2V0T3JkaW5hbCB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlu
bGluZSBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+IHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE51bWJlcigib3Jk
aW5hbCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPENTU1N0eWxlSWQ+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdGVwU2V0U3R5bGVTaGVldElkOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE9yZGlu
YWwoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9q
c29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3R5
bGVTaGVldElkIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0
ZXBTZXRPcmRpbmFsIHNldFN0eWxlU2hlZXRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldE9yZGluYWwgcmVzdWx0KG1fanNvbl9yZWYp
OwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygic3R5bGVTaGVldElk
IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3Mg
Q1NTU3R5bGVJZDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNv
bl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFN0eWxlU2hlZXRJZChQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVm
Xykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldFN0
eWxlU2hlZXRJZCBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcFNldFN0eWxl
U2hlZXRJZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAg
IH07CgogICAgICAgIGNsYXNzIENTU1J1bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTUnVsZUlkPiByZXN1bHQgPSBDU1NS
dWxlSWQ6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikK
ICAgICAgICAgICAgICogICAgIC5zZXRPcmRpbmFsKC4uLik7CiAgICAgICAgICAgICAqLwogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0U3R5bGVTaGVldElkOwogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0T3JkaW5hbDsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRPcmRpbmFsIHsKICAgICAgICAg
ICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiBz
ZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICBtX2pzb25fcmVmLT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlSWQ+Kj4oJm1fanNv
bl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0U3R5bGVTaGVldElkOwogICAg
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAg
ICAgICAgICBpbmxpbmUgU3RlcFNldE9yZGluYWwoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1f
anNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07Cgog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3R5bGVTaGVldElkIHsKICAgICAgICAgICAgcHVibGlj
OgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRPcmRpbmFsIHNldFN0eWxlU2hlZXRJZChT
dHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNl
dE9yZGluYWwgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9y
ZWYtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZUlkOwogICAgICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBT
dGVwU2V0U3R5bGVTaGVldElkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVm
XykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAg
ICAgaW5saW5lIHN0YXRpYyBTdGVwU2V0U3R5bGVTaGVldElkIGNyZWF0ZSgpIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBTdGVwU2V0U3R5bGVTaGVldElkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgQ1NTTm9kZVN0eWxl
cyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAg
LyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBS
ZWZQdHI8Q1NTTm9kZVN0eWxlcz4gcmVzdWx0ID0gQ1NTTm9kZVN0eWxlczo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICogICAgIC5zZXRDb21wdXRlZFN0eWxlKC4uLikKICAgICAgICAgICAgICogICAg
IC5zZXRNYXRjaGVkQ1NTUnVsZXMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlQXR0
cmlidXRlcyguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UHNldWRvRWxlbWVudHMoLi4uKQog
ICAgICAgICAgICAgKiAgICAgLnNldEluaGVyaXRlZCguLi4pOwogICAgICAgICAgICAgKi8KICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldENvbXB1dGVkU3R5bGU7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRNYXRjaGVkQ1NTUnVsZXM7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZUF0dHJp
YnV0ZXM7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRQc2V1ZG9FbGVtZW50czsKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldEluaGVyaXRlZDsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRJbmhl
cml0ZWQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxDU1NOb2RlU3R5bGVzPiBzZXRJbmhlcml0ZWQoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2
YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5z
ZXRBcnJheSgiaW5oZXJpdGVkIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAo
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTTm9kZVN0eWxlcz4qPigmbV9qc29uX3JlZikpLT5y
ZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAg
ICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRQc2V1ZG9FbGVtZW50czsKICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAg
aW5saW5lIFN0ZXBTZXRJbmhlcml0ZWQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9y
ZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0UHNldWRvRWxlbWVudHMgewogICAgICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldEluaGVyaXRlZCBzZXRQc2V1ZG9FbGVtZW50cyhS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIFN0ZXBTZXRJbmhlcml0ZWQgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAg
ICAgICAgICAgIG1fanNvbl9yZWYtPnNldEFycmF5KCJwc2V1ZG9FbGVtZW50cyIsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0U3R5
bGVBdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1f
anNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFBzZXVkb0VsZW1lbnRzKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9y
ZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFN0eWxlQXR0
cmlidXRlcyB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVw
U2V0UHNldWRvRWxlbWVudHMgc2V0U3R5bGVBdHRyaWJ1dGVzKFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFBz
ZXVkb0VsZW1lbnRzIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pz
b25fcmVmLT5zZXRBcnJheSgic3R5bGVBdHRyaWJ1dGVzIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2
YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXM7
CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAg
ICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U3R5bGVBdHRyaWJ1dGVzKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1hdGNoZWRDU1NSdWxlcyB7CiAg
ICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U3R5bGVBdHRy
aWJ1dGVzIHNldE1hdGNoZWRDU1NSdWxlcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRTdHlsZUF0dHJpYnV0
ZXMgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNl
dEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldENvbXB1dGVkU3R5bGU7CiAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAg
IGlubGluZSBTdGVwU2V0TWF0Y2hlZENTU1J1bGVzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBt
X2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldENvbXB1dGVkU3R5bGUgewogICAgICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE1hdGNoZWRDU1NSdWxlcyBzZXRDb21w
dXRlZFN0eWxlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXMgcmVzdWx0KG1fanNv
bl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldE9iamVjdCgiY29tcHV0
ZWRTdHlsZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5k
IGNsYXNzIENTU05vZGVTdHlsZXM7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRDb21wdXRlZFN0
eWxlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVm
KG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaW5saW5lIHN0YXRp
YyBTdGVwU2V0Q29tcHV0ZWRTdHlsZSBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
U3RlcFNldENvbXB1dGVkU3R5bGUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0SW5saW5lU3R5bGUoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAg
IH07CgogICAgICAgIGNsYXNzIFBzZXVkb0lkUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3Vs
dCA9IFBzZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0UHNldWRv
SWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFJ1bGVzKC4uLik7CiAgICAgICAgICAgICAq
LwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UHNldWRvSWQ7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRSdWxlczsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSdWxlcyB7CiAgICAgICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPFBzZXVkb0lkUnVsZXM+
IHNldFJ1bGVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0QXJyYXkoInJ1bGVzIiwgdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNl
dWRvSWRSdWxlcz4qPigmbV9qc29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBT
ZXRQc2V1ZG9JZDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pz
b25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRSdWxlcyhSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRQc2V1ZG9JZCB7CiAgICAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0UnVsZXMgc2V0UHNldWRv
SWQoaW50IHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBT
ZXRSdWxlcyByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3Jl
Zi0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBwcml2YXRlOgogICAgICAg
ICAgICAgICAgZnJpZW5kIGNsYXNzIFBzZXVkb0lkUnVsZXM7CiAgICAgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0
ZXBTZXRQc2V1ZG9JZChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8pIDog
bV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlu
bGluZSBzdGF0aWMgU3RlcFNldFBzZXVkb0lkIGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJl
dHVybiBTdGVwU2V0UHNldWRvSWQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAg
ICAgIH0KICAgICAgICB9OwoKICAgICAgICBjbGFzcyBJbmhlcml0ZWRTdHlsZUVudHJ5IDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAg
ICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxJ
bmhlcml0ZWRTdHlsZUVudHJ5PiByZXN1bHQgPSBJbmhlcml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUo
KQogICAgICAgICAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyguLi4pOwogICAgICAgICAg
ICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldE1hdGNoZWRDU1NSdWxlczsKCiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXMgewogICAgICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiBzZXRN
YXRjaGVkQ1NTUnVsZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRBcnJheSgibWF0Y2hlZENT
U1J1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4qPigmbV9qc29uX3JlZikpLT5yZWxlYXNl
KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICBmcmllbmQgY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRyeTsKICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3Rl
cFNldE1hdGNoZWRDU1NSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3Jl
Zl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgIGlubGluZSBzdGF0aWMgU3RlcFNldE1hdGNoZWRDU1NSdWxlcyBjcmVhdGUoKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gU3RlcFNldE1hdGNoZWRDU1NSdWxlcyhJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRJbmxp
bmVTdHlsZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGUg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8q
CiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVm
UHRyPENTU1N0eWxlQXR0cmlidXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRl
KCkKICAgICAgICAgICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5z
ZXRTdHlsZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5h
bWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZTsKCiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRTdHlsZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBQ
YXNzUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiBzZXRTdHlsZShSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtX2pzb25f
cmVmLT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVy
biAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+Kj4oJm1fanNvbl9y
ZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0TmFtZTsKICAgICAgICAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5s
aW5lIFN0ZXBTZXRTdHlsZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDog
bV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXROYW1lIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5s
aW5lIFN0ZXBTZXRTdHlsZSBzZXROYW1lKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBTdGVwU2V0U3R5bGUgcmVzdWx0KG1fanNvbl9yZWYpOwogICAg
ICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlQXR0cmli
dXRlOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZjsK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0TmFtZShQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAg
ICAgfTsKCiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldE5hbWUgY3JlYXRlKCkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBTZXROYW1lKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgQ1NTU3R5bGVTaGVl
dEhlYWRlciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAg
ICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhl
YWRlcjo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQog
ICAgICAgICAgICAgKiAgICAgLnNldFNvdXJjZVVSTCguLi4pCiAgICAgICAgICAgICAqICAgICAu
c2V0VGl0bGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldERpc2FibGVkKC4uLik7CiAgICAg
ICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3R5bGVTaGVldElkOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0U291cmNlVVJMOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VGl0
bGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXREaXNhYmxlZDsKCiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXREaXNhYmxlZCB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlu
bGluZSBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+IHNldERpc2FibGVkKGJvb2wgdmFs
dWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0
Qm9vbGVhbigiZGlzYWJsZWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPio+KCZtX2pzb25fcmVm
KSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFRpdGxlOwogICAgICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxp
bmUgU3RlcFNldERpc2FibGVkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykg
OiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldFRpdGxlIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAg
aW5saW5lIFN0ZXBTZXREaXNhYmxlZCBzZXRUaXRsZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldERpc2FibGVkIHJlc3VsdChtX2pzb25f
cmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoInRpdGxlIiwg
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0
ZXBTZXRTb3VyY2VVUkw7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
bV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0VGl0bGUoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9
CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U291cmNlVVJMIHsKICAg
ICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRUaXRsZSBzZXRT
b3VyY2VVUkwoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIFN0ZXBTZXRUaXRsZSByZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAg
bV9qc29uX3JlZi0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFN0eWxlU2hlZXRJZDsKICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRTb3VyY2VVUkwoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07
CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3R5bGVTaGVldElkIHsKICAgICAgICAgICAgcHVi
bGljOgogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTb3VyY2VVUkwgc2V0U3R5bGVTaGVl
dElkKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBT
dGVwU2V0U291cmNlVVJMIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBt
X2pzb25fcmVmLT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBwcml2
YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXI7CiAg
ICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRTdHlsZVNoZWV0SWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAg
ICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRTdHlsZVNoZWV0SWQgY3Jl
YXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFN0ZXBTZXRTdHlsZVNoZWV0SWQoSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBj
bGFzcyBDU1NTdHlsZVNoZWV0Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+IHJlc3VsdCA9IENT
U1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlU2hl
ZXRJZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAgICAgICAg
ICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZVNoZWV0SWQ7CiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRSdWxlczsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSdWxlcyB7CiAgICAg
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPENTU1N0eWxl
U2hlZXRCb2R5PiBzZXRSdWxlcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldEFycmF5KCJydWxl
cyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5Pio+KCZtX2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmll
bmQgY2xhc3MgU3RlcFNldFN0eWxlU2hlZXRJZDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRS
dWxlcyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZiht
X2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRT
dHlsZVNoZWV0SWQgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUg
U3RlcFNldFJ1bGVzIHNldFN0eWxlU2hlZXRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFJ1bGVzIHJlc3VsdChtX2pzb25fcmVmKTsK
ICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIs
IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIENT
U1N0eWxlU2hlZXRCb2R5OwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U3R5bGVTaGVldElkKFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNv
bl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVw
U2V0U3R5bGVTaGVldElkIGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBTdGVwU2V0
U3R5bGVTaGVldElkKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwog
ICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgICAgIGNsYXNzIENTU1J1bGUgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAg
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENTU1J1
bGU+IHJlc3VsdCA9IENTU1J1bGU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0UnVs
ZUlkKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTZWxlY3RvclRleHQoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldFNvdXJjZUxpbmUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE9y
aWdpbiguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U3R5bGUoLi4uKTsKICAgICAgICAgICAg
ICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSdWxlSWQ7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRTZWxlY3RvclRleHQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTb3VyY2VMaW5lOwog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0T3JpZ2luOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
U3R5bGU7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3R5bGUgewogICAgICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxDU1NSdWxlPiBzZXRTdHlsZShS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZT4qPigm
bV9qc29uX3JlZikpLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBw
cml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRPcmlnaW47CiAgICAg
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAg
ICAgICAgIGlubGluZSBTdGVwU2V0U3R5bGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNv
bl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0T3JpZ2luIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRTdHlsZSBzZXRPcmlnaW4oU3RyaW5nIHZhbHVlKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRTdHlsZSByZXN1bHQobV9q
c29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJvcmln
aW4iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xh
c3MgU3RlcFNldFNvdXJjZUxpbmU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0T3JpZ2luKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9y
ZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNvdXJjZUxp
bmUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE9y
aWdpbiBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBTdGVwU2V0T3JpZ2luIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAg
ICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFNlbGVjdG9y
VGV4dDsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVm
OwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBTZXRTb3VyY2VMaW5lKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNlbGVjdG9yVGV4dCB7CiAgICAg
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U291cmNlTGluZSBz
ZXRTZWxlY3RvclRleHQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIFN0ZXBTZXRTb3VyY2VMaW5lIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAg
ICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0UnVs
ZUlkOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7
CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFNlbGVjdG9yVGV4dChSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSdWxlSWQgewogICAgICAgICAg
ICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFNlbGVjdG9yVGV4dCBzZXRS
dWxlSWQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgU3RlcFNldFNlbGVjdG9yVGV4dCByZXN1bHQobV9qc29uX3JlZik7
CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0T2JqZWN0KCJydWxlSWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBDU1NSdWxl
OwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZjsKICAg
ICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0UnVsZUlkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAg
ICB9OwoKICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBTdGVwU2V0UnVsZUlkIGNyZWF0ZSgpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBTdGVwU2V0UnVsZUlkKEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFNvdXJjZVVS
TChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0U2VsZWN0b3JSYW5nZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgi
c2VsZWN0b3JSYW5nZSIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5l
IHZvaWQgc2V0TWVkaWEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRpYSIsIHZhbHVlKTsKICAg
ICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBTb3VyY2VSYW5nZSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAg
ICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8U291
cmNlUmFuZ2U+IHJlc3VsdCA9IFNvdXJjZVJhbmdlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAg
ICAgLnNldFN0YXJ0KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRFbmQoLi4uKTsKICAgICAg
ICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdGFydDsKICAgICAgICAgICAgY2xh
c3MgU3RlcFNldEVuZDsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRFbmQgewogICAgICAgICAg
ICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4g
c2V0RW5kKGludCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBt
X2pzb25fcmVmLT5zZXROdW1iZXIoImVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNvdXJjZVJhbmdlPio+KCZtX2pzb25fcmVm
KSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFN0YXJ0OwogICAgICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxp
bmUgU3RlcFNldEVuZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9q
c29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRTdGFydCB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGlu
ZSBTdGVwU2V0RW5kIHNldFN0YXJ0KGludCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICBTdGVwU2V0RW5kIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAg
ICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoInN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU291cmNlUmFuZ2U7CiAgICAgICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAg
ICAgaW5saW5lIFN0ZXBTZXRTdGFydChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29u
X3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldFN0YXJ0IGNyZWF0ZSgpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBTdGVwU2V0U3RhcnQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NTdHlsZSA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+
IHJlc3VsdCA9IENTU1N0eWxlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxl
SWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldENzc1Byb3BlcnRpZXMoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoLi4uKQogICAgICAgICAgICAgKiAgICAg
LnNldFdpZHRoKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRIZWlnaHQoLi4uKTsKICAgICAg
ICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZUlkOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0Q3NzUHJvcGVydGllczsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNob3J0
aGFuZEVudHJpZXM7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRXaWR0aDsKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldEhlaWdodDsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRIZWlnaHQgewog
ICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxDU1NT
dHlsZT4gc2V0SGVpZ2h0KGludCB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoImhlaWdodCIsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlPio+KCZt
X2pzb25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFdpZHRoOwogICAgICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAg
ICAgICBpbmxpbmUgU3RlcFNldEhlaWdodChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29u
X3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRXaWR0aCB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgICAgIGlubGluZSBTdGVwU2V0SGVpZ2h0IHNldFdpZHRoKGludCB2YWx1ZSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0SGVpZ2h0IHJlc3VsdChtX2pzb25f
cmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXROdW1iZXIoIndpZHRoIiwg
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFN0
ZXBTZXRTaG9ydGhhbmRFbnRyaWVzOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFdpZHRoKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9y
ZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNob3J0aGFu
ZEVudHJpZXMgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgU3Rl
cFNldFdpZHRoIHNldFNob3J0aGFuZEVudHJpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0V2lkdGggcmVz
dWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldEFycmF5
KCJzaG9ydGhhbmRFbnRyaWVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAg
ICAgICAgZnJpZW5kIGNsYXNzIFN0ZXBTZXRDc3NQcm9wZXJ0aWVzOwogICAgICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxp
bmUgU3RlcFNldFNob3J0aGFuZEVudHJpZXMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNv
bl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0Q3NzUHJvcGVydGllcyB7CiAgICAgICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U2hvcnRoYW5kRW50cmllcyBzZXRDc3NQcm9w
ZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgU3RlcFNldFNob3J0aGFuZEVudHJpZXMgcmVzdWx0KG1fanNvbl9y
ZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldEFycmF5KCJjc3NQcm9wZXJ0
aWVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNs
YXNzIFN0ZXBTZXRTdHlsZUlkOwogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldENzc1Byb3BlcnRp
ZXMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9q
c29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3R5
bGVJZCB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0
Q3NzUHJvcGVydGllcyBzZXRTdHlsZUlkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRDc3NQcm9wZXJ0aWVz
IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRP
YmplY3QoInN0eWxlSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
IGZyaWVuZCBjbGFzcyBDU1NTdHlsZTsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldFN0eWxlSWQo
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9q
c29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0
ZXBTZXRTdHlsZUlkIGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBTdGVwU2V0U3R5
bGVJZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAg
ICBpbmxpbmUgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygiY3NzVGV4dCIsIHZhbHVlKTsKICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRPYmplY3QoInJhbmdlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07Cgog
ICAgICAgIGNsYXNzIENTU1Byb3BlcnR5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAg
ICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxDU1NQcm9wZXJ0eT4gcmVzdWx0ID0gQ1NTUHJv
cGVydHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgICAg
ICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFNob3J0aGFu
ZE5hbWUoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROYW1l
OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VmFsdWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRTaG9ydGhhbmROYW1lOwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNob3J0aGFuZE5hbWUg
ewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxD
U1NQcm9wZXJ0eT4gc2V0U2hvcnRoYW5kTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0U3RyaW5nKCJzaG9ydGhhbmRO
YW1lIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q1NTUHJvcGVydHk+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdGVwU2V0VmFsdWU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U2hvcnRoYW5kTmFt
ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pz
b25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRWYWx1
ZSB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0U2hv
cnRoYW5kTmFtZSBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgU3RlcFNldFNob3J0aGFuZE5hbWUgcmVzdWx0KG1fanNvbl9yZWYpOwog
ICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldE5h
bWU7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0VmFsdWUoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAg
IH07CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TmFtZSB7CiAgICAgICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0VmFsdWUgc2V0TmFtZShTdHJpbmcgdmFsdWUp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFZhbHVlIHJlc3Vs
dChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmco
Im5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBj
bGFzcyBDU1NQcm9wZXJ0eTsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNldE5hbWUoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8p
IHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXROYW1l
IGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBTdGVwU2V0TmFtZShJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRQcmlvcml0eShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoInByaW9yaXR5IiwgdmFsdWUpOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIHZhbHVlKTsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UGFyc2VkT2soYm9vbCB2
YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFy
c2VkT2siLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNl
dFN0YXR1cyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgaW5saW5lIHZvaWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdl
IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgICAgIGNsYXNzIENTU01l
ZGlhIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAg
ICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAq
IFJlZlB0cjxDU1NNZWRpYT4gcmVzdWx0ID0gQ1NTTWVkaWE6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3Mg
U3RlcFNldFRleHQ7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VGV4dCB7CiAgICAgICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPENTU01lZGlhPiBzZXRU
ZXh0KFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBt
X2pzb25fcmVmLT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4qPigmbV9qc29uX3JlZikp
LT5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICBmcmllbmQgY2xhc3MgQ1NTTWVkaWE7CiAgICAgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0ZXBT
ZXRUZXh0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmXykgOiBtX2pzb25f
cmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaW5saW5lIHN0
YXRpYyBTdGVwU2V0VGV4dCBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcFNl
dFRleHQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0U291cmNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRTb3VyY2VVUkwoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2
b2lkIHNldFNvdXJjZUxpbmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgICAg
ICAgICB9CgogICAgICAgIH07CgogICAgfQogICAgbmFtZXNwYWNlIFRpbWVsaW5lIHsKICAgICAg
ICBjbGFzcyBUaW1lbGluZUV2ZW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAg
cHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxUaW1lbGluZUV2ZW50PiByZXN1bHQgPSBUaW1lbGlu
ZUV2ZW50OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRUeXBlOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RGF0YTsKCiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXREYXRhIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAg
ICAgaW5saW5lIFBhc3NSZWZQdHI8VGltZWxpbmVFdmVudD4gc2V0RGF0YShSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBt
X2pzb25fcmVmLT5zZXRPYmplY3QoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjxUaW1lbGluZUV2ZW50Pio+KCZtX2pzb25f
cmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6
CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFR5cGU7CiAgICAgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlu
bGluZSBTdGVwU2V0RGF0YShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDog
bV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRUeXBlIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW5s
aW5lIFN0ZXBTZXREYXRhIHNldFR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIFN0ZXBTZXREYXRhIHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAg
ICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBUaW1lbGluZUV2ZW50Owog
ICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZjsKICAgICAg
ICAgICAgICAgIGlubGluZSBTdGVwU2V0VHlwZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsK
CiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgU3RlcFNldFR5cGUgY3JlYXRlKCkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIFN0ZXBTZXRUeXBlKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0
aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
fTsKCiAgICB9CiAgICBuYW1lc3BhY2UgRGVidWdnZXIgewogICAgLyogQnJlYWtwb2ludCBpZGVu
dGlmaWVyLiAqLwogICAgICAgIHR5cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCiAgICAvKiBV
bmlxdWUgc2NyaXB0IGlkZW50aWZpZXIuICovCiAgICAgICAgdHlwZWRlZiBTdHJpbmcgU2NyaXB0
SWQ7CgogICAgLyogQ2FsbCBmcmFtZSBpZGVudGlmaWVyLiAqLwogICAgICAgIHR5cGVkZWYgU3Ry
aW5nIENhbGxGcmFtZUlkOwoKICAgICAgICBjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8TG9jYXRpb24+IHJl
c3VsdCA9IExvY2F0aW9uOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFNjcmlwdElk
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAgICAgICAg
ICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U2NyaXB0SWQ7CiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRMaW5lTnVtYmVyOwoKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExpbmVOdW1iZXIg
ewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxpbmUgUGFzc1JlZlB0cjxM
b2NhdGlvbj4gc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9j
YXRpb24+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0U2Ny
aXB0SWQ7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
ZjsKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0TGluZU51bWJlcihSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTY3JpcHRJZCB7CiAgICAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlubGluZSBTdGVwU2V0TGluZU51bWJlciBzZXRT
Y3JpcHRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgU3RlcFNldExpbmVOdW1iZXIgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAg
ICAgIG1fanNvbl9yZWYtPnNldFN0cmluZygic2NyaXB0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBMb2NhdGlvbjsKICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBp
bmxpbmUgU3RlcFNldFNjcmlwdElkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25f
cmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAg
ICAgICAgaW5saW5lIHN0YXRpYyBTdGVwU2V0U2NyaXB0SWQgY3JlYXRlKCkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIFN0ZXBTZXRTY3JpcHRJZChJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRDb2x1bW5OdW1iZXIoaW50
IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXROdW1iZXIoImNv
bHVtbk51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBj
bGFzcyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAgICAgICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUo
KQogICAgICAgICAgICAgKiAgICAgLnNldENhbGxGcmFtZUlkKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldExvY2F0aW9u
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAgICAgICAg
ICogICAgIC5zZXRUaGlzKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0Q2FsbEZyYW1lSWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRGdW5jdGlvbk5hbWU7
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMb2NhdGlvbjsKICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldFNjb3BlQ2hhaW47CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUaGlzOwoKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFRoaXMgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAg
ICBpbmxpbmUgUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHNldFRoaXMoUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbV9qc29u
X3JlZi0+c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVy
biAocmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+KCZtX2pzb25fcmVmKSktPnJl
bGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFNjb3BlQ2hhaW47CiAgICAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGlu
ZSBTdGVwU2V0VGhpcyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9q
c29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRTY29wZUNoYWluIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAg
aW5saW5lIFN0ZXBTZXRUaGlzIHNldFNjb3BlQ2hhaW4oUmVmUHRyPEluc3BlY3RvckFycmF5PiB2
YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0VGhpcyBy
ZXN1bHQobV9qc29uX3JlZik7CiAgICAgICAgICAgICAgICAgICAgbV9qc29uX3JlZi0+c2V0QXJy
YXkoInNjb3BlQ2hhaW4iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICBmcmllbmQgY2xhc3MgU3RlcFNldExvY2F0aW9uOwogICAgICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWY7CiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcFNl
dFNjb3BlQ2hhaW4oUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG1fanNvbl9yZWZfKSA6IG1fanNv
bl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0TG9jYXRpb24gewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbmxp
bmUgU3RlcFNldFNjb3BlQ2hhaW4gc2V0TG9jYXRpb24oUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldFNjb3Bl
Q2hhaW4gcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9yZWYt
PnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldEZ1bmN0aW9uTmFtZTsKICAgICAgICAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5s
aW5lIFN0ZXBTZXRMb2NhdGlvbihSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZl8p
IDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRGdW5jdGlvbk5hbWUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICAgICBpbmxpbmUgU3RlcFNldExvY2F0aW9uIHNldEZ1bmN0aW9uTmFtZShTdHJpbmcgdmFs
dWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3RlcFNldExvY2F0aW9u
IHJlc3VsdChtX2pzb25fcmVmKTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRT
dHJpbmcoImZ1bmN0aW9uTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgIGZyaWVuZCBjbGFzcyBTdGVwU2V0Q2FsbEZyYW1lSWQ7CiAgICAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAgIGlubGlu
ZSBTdGVwU2V0RnVuY3Rpb25OYW1lKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVm
XykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldENhbGxGcmFtZUlkIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAg
ICAgICAgICAgaW5saW5lIFN0ZXBTZXRGdW5jdGlvbk5hbWUgc2V0Q2FsbEZyYW1lSWQoU3RyaW5n
IHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFN0ZXBTZXRGdW5j
dGlvbk5hbWUgcmVzdWx0KG1fanNvbl9yZWYpOwogICAgICAgICAgICAgICAgICAgIG1fanNvbl9y
ZWYtPnNldFN0cmluZygiY2FsbEZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICAgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX2pzb25fcmVmOwogICAgICAgICAgICAgICAgaW5saW5lIFN0
ZXBTZXRDYWxsRnJhbWVJZChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8p
IDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KICAgICAgICAgICAgfTsKCiAgICAgICAgICAg
IGlubGluZSBzdGF0aWMgU3RlcFNldENhbGxGcmFtZUlkIGNyZWF0ZSgpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBTdGVwU2V0Q2FsbEZyYW1lSWQoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjbGFzcyBTY29wZSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8U2NvcGU+
IHJlc3VsdCA9IFNjb3BlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4u
KQogICAgICAgICAgICAgKiAgICAgLnNldE9iamVjdCguLi4pOwogICAgICAgICAgICAgKi8KICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldFR5cGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRPYmpl
Y3Q7CgogICAgICAgICAgICBjbGFzcyBTdGVwU2V0T2JqZWN0IHsKICAgICAgICAgICAgcHVibGlj
OgogICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQdHI8U2NvcGU+IHNldE9iamVjdChSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBtX2pzb25fcmVmLT5zZXRPYmplY3QoIm9iamVjdCIsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNjb3BlPio+KCZtX2pz
b25fcmVmKSktPnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgU3RlcFNldFR5cGU7CiAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3JlZjsKICAgICAgICAgICAgICAg
IGlubGluZSBTdGVwU2V0T2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBtX2pzb25fcmVm
XykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fQogICAgICAgICAgICB9OwoKICAgICAgICAg
ICAgY2xhc3MgU3RlcFNldFR5cGUgewogICAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAg
ICBpbmxpbmUgU3RlcFNldE9iamVjdCBzZXRUeXBlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBTdGVwU2V0T2JqZWN0IHJlc3VsdChtX2pzb25fcmVm
KTsKICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBTY29wZTsK
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CiAgICAg
ICAgICAgICAgICBpbmxpbmUgU3RlcFNldFR5cGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9CiAgICAgICAgICAgIH07
CgogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBTZXRUeXBlIGNyZWF0ZSgpIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBTdGVwU2V0VHlwZShJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsK
ICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgfQogICAgbmFtZXNwYWNlIERPTURlYnVnZ2Vy
IHsKICAgICAgICBuYW1lc3BhY2UgRE9NQnJlYWtwb2ludFR5cGUgewogICAgICAgICAgICBjb25z
dCBjaGFyKiBjb25zdCBzdWJ0cmVlX21vZGlmaWVkID0gInN1YnRyZWUtbW9kaWZpZWQiOwogICAg
ICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBhdHRyaWJ1dGVfbW9kaWZpZWQgPSAiYXR0cmlidXRl
LW1vZGlmaWVkIjsKICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgbm9kZV9yZW1vdmVkID0g
Im5vZGUtcmVtb3ZlZCI7CiAgICAgICAgfQoKICAgIH0KICAgIG5hbWVzcGFjZSBQcm9maWxlciB7
CiAgICB9CiAgICBuYW1lc3BhY2UgV29ya2VyIHsKICAgIH0KI3VuZGVmIEZJUlNUX1NURVBfRU5E
X0FORF9DUkVBVEUKI3VuZGVmIE5PVF9MQVNUX1NURVBfUkVUVVJOCiN1bmRlZiBOT1RfTEFTVF9T
VEVQX01FVEhPRF9CRUdJTgojdW5kZWYgU1RFUF9CUklER0UKI3VuZGVmIExBU1RfU1RFUF9SRVRV
Uk4KI3VuZGVmIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4KI3VuZGVmIExBU1RfU1RFUF9QUk9MT0cK
Cn0KCmNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKcHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRl
bmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAg
ICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9yKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBmcm9udGVuZFJldXNlZCgpOwog
ICAgICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJvbUJh
Y2tlbmQoKTsKICAgICAgICB2b2lkIHJlc2V0KCk7CiAgICAgICAgdm9pZCBzaG93UGFuZWwoY29u
c3QgU3RyaW5nJiBwYW5lbCk7CiAgICAgICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWREZWJ1Z2dp
bmcoKTsKICAgICAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoaW50IHRlc3RDYWxs
SWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAgICAgICB2b2lkIGluc3BlY3QoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhp
bnRzKTsKICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihpbnQgaWQsIGNvbnN0IFN0cmluZyYg
dXJsLCBib29sIGlzU2hhcmVkKTsKICAgICAgICB2b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW50IGlk
KTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4g
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07Cgog
ICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJldHVybiAmbV9pbnNwZWN0b3I7IH0KCiAgICBj
bGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb21Db250ZW50
RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRFdmVudEZpcmVk
KGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkKTsKICAgICAg
ICB2b2lkIGZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKICAgICAgICB2b2lk
IHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUGFnZSogcGFnZSgp
IHsgcmV0dXJuICZtX3BhZ2U7IH0KCiAgICBjbGFzcyBSdW50aW1lIHsKICAgIHB1YmxpYzoKICAg
ICAgICBSdW50aW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICB9OwoKICAgIFJ1bnRpbWUqIHJ1bnRpbWUoKSB7IHJldHVybiAmbV9ydW50aW1lOyB9CgogICAg
Y2xhc3MgQ29uc29sZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQ29uc29sZShJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVz
c2FnZUFkZGVkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2
b2lkIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KTsKICAgICAgICB2b2lkIG1l
c3NhZ2VzQ2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToK
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOwogICAgfTsKCiAgICBDb25zb2xlKiBjb25zb2xlKCkgeyByZXR1cm4gJm1fY29uc29sZTsg
fQoKICAgIGNsYXNzIE5ldHdvcmsgewogICAgcHVibGljOgogICAgICAgIE5ldHdvcmsoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2
b2lkIHJlcXVlc3RXaWxsQmVTZW50KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0LCBkb3VibGUgdGltZXN0
YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVk
aXJlY3RSZXNwb25zZSk7CiAgICAgICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbUNhY2hlKGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0IFN0cmluZyYgdHlwZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIGRhdGFS
ZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgaW50IGRh
dGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmlu
aXNoZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAg
IHZvaWQgbG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVz
dGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IGNhbmNlbGVk
KTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJ
ZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc291cmNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVz
dChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAgICAgIHZvaWQgd2ViU29ja2V0SGFuZHNoYWtl
UmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFt
cCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIHdl
YlNvY2tldENyZWF0ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJs
KTsKICAgICAgICB2b2lkIHdlYlNvY2tldENsb3NlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
ZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRl
OgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsqIG5ldHdvcmsoKSB7IHJldHVybiAmbV9uZXR3b3Jr
OyB9CgogICAgY2xhc3MgRGF0YWJhc2UgewogICAgcHVibGljOgogICAgICAgIERhdGFiYXNlKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBhZGREYXRhYmFzZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2Up
OwogICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQoaW50IHRyYW5zYWN0aW9uSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbHVtbk5hbWVzLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZXMpOwogICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rpb25GYWlsZWQoaW50
IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzcWxFcnJvcik7CiAg
ICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERh
dGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuICZtX2RhdGFiYXNlOyB9CgogICAgY2xhc3MgRE9N
U3RvcmFnZSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NU3RvcmFnZShJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRE9N
U3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RvcmFnZSk7CiAgICAgICAgdm9p
ZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01TdG9yYWdlKiBkb21zdG9yYWdl
KCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoKICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUg
ewogICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFwcGxpY2F0
aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7CiAgICAgICAgdm9pZCBuZXR3b3JrU3RhdGVVcGRh
dGVkKGJvb2wgaXNOb3dPbmxpbmUpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJp
dmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOwogICAgfTsKCiAgICBBcHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbmNhY2hl
KCkgeyByZXR1cm4gJm1fYXBwbGljYXRpb25jYWNoZTsgfQoKICAgIGNsYXNzIERPTSB7CiAgICBw
dWJsaWM6CiAgICAgICAgRE9NKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb2N1bWVudFVwZGF0ZWQoKTsKICAgICAgICB2
b2lkIHNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBub2Rlcyk7CiAgICAgICAgdm9pZCBhdHRyaWJ1dGVNb2RpZmllZChpbnQgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgIHZvaWQgYXR0cmli
dXRlUmVtb3ZlZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgICAgIHZvaWQg
aW5saW5lU3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRz
KTsKICAgICAgICB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIGNoYXJhY3RlckRhdGEpOwogICAgICAgIHZvaWQgY2hpbGROb2RlQ291bnRVcGRhdGVk
KGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVJ
bnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBub2RlKTsKICAgICAgICB2b2lkIGNoaWxkTm9kZVJlbW92ZWQoaW50
IHBhcmVudE5vZGVJZCwgaW50IG5vZGVJZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERPTSogZG9tKCkgeyByZXR1cm4gJm1fZG9tOyB9
CgogICAgY2xhc3MgQ1NTIHsKICAgIHB1YmxpYzoKICAgICAgICBDU1MoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ1NTKiBjc3MoKSB7IHJldHVy
biAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1lbGluZSB7CiAgICBwdWJsaWM6CiAgICAgICAgVGlt
ZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IH0KICAgICAgICB2b2lkIHN0YXJ0ZWQoKTsKICAgICAgICB2b2lkIHN0b3BwZWQoKTsKICAgICAg
ICB2b2lkIGV2ZW50UmVjb3JkZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCk7
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IFRpbWVsaW5lKiB0aW1lbGluZSgpIHsgcmV0dXJuICZtX3RpbWVsaW5lOyB9CgogICAgY2xhc3Mg
RGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjYXBhYmls
aXR5U2V0U2NyaXB0U291cmNlOwogICAgICAgIERlYnVnZ2VyKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkZWJ1Z2dlcldh
c0VuYWJsZWQoKTsKICAgICAgICB2b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKICAgICAgICB2
b2lkIHNjcmlwdFBhcnNlZChjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHVy
bCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29sdW1uLCBpbnQgZW5kTGluZSwgaW50IGVuZENv
bHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250ZW50U2NyaXB0KTsKICAgICAgICB2b2lkIHNj
cmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0
U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSk7CiAgICAgICAgdm9pZCBicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBi
cmVha3BvaW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAg
ICAgdm9pZCBwYXVzZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgY29u
c3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAg
ICAgICB2b2lkIHJlc3VtZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZh
dGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKICAgIH07CgogICAgRGVidWdnZXIqIGRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZGVi
dWdnZXI7IH0KCiAgICBjbGFzcyBET01EZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9N
RGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgRE9NRGVidWdnZXIqIGRvbWRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZG9tZGVidWdnZXI7
IH0KCiAgICBjbGFzcyBQcm9maWxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgUHJvZmlsZXIoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAg
ICB2b2lkIHByb2ZpbGVyV2FzRW5hYmxlZCgpOwogICAgICAgIHZvaWQgcHJvZmlsZXJXYXNEaXNh
YmxlZCgpOwogICAgICAgIHZvaWQgYWRkUHJvZmlsZUhlYWRlcihQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gaGVhZGVyKTsKICAgICAgICB2b2lkIGFkZEhlYXBTbmFwc2hvdENodW5rKGludCB1
aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspOwogICAgICAgIHZvaWQgZmluaXNoSGVhcFNuYXBzaG90
KGludCB1aWQpOwogICAgICAgIHZvaWQgc2V0UmVjb3JkaW5nUHJvZmlsZShib29sIGlzUHJvZmls
aW5nKTsKICAgICAgICB2b2lkIHJlc2V0UHJvZmlsZXMoKTsKICAgICAgICB2b2lkIHJlcG9ydEhl
YXBTbmFwc2hvdFByb2dyZXNzKGludCBkb25lLCBpbnQgdG90YWwpOwogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQcm9maWxlciogcHJvZmls
ZXIoKSB7IHJldHVybiAmbV9wcm9maWxlcjsgfQoKICAgIGNsYXNzIFdvcmtlciB7CiAgICBwdWJs
aWM6CiAgICAgICAgV29ya2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCB3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVjdG9yQ29ubmVjdGVkKTsKICAgICAgICB2b2lk
IHdvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKTsKICAgICAgICB2b2lkIGRpc3BhdGNoTWVz
c2FnZUZyb21Xb3JrZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICB9OwoKICAgIFdvcmtlciogd29ya2VyKCkgeyByZXR1cm4gJm1fd29ya2VyOyB9CgoKcHJpdmF0
ZToKICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICBJbnNwZWN0b3IgbV9pbnNwZWN0b3I7CiAgICBQYWdlIG1fcGFnZTsKICAgIFJ1bnRp
bWUgbV9ydW50aW1lOwogICAgQ29uc29sZSBtX2NvbnNvbGU7CiAgICBOZXR3b3JrIG1fbmV0d29y
azsKICAgIERhdGFiYXNlIG1fZGF0YWJhc2U7CiAgICBET01TdG9yYWdlIG1fZG9tc3RvcmFnZTsK
ICAgIEFwcGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hlOwogICAgRE9NIG1fZG9tOwog
ICAgQ1NTIG1fY3NzOwogICAgVGltZWxpbmUgbV90aW1lbGluZTsKICAgIERlYnVnZ2VyIG1fZGVi
dWdnZXI7CiAgICBET01EZWJ1Z2dlciBtX2RvbWRlYnVnZ2VyOwogICAgUHJvZmlsZXIgbV9wcm9m
aWxlcjsKICAgIFdvcmtlciBtX3dvcmtlcjsKfTsKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116046</attachid>
            <date>2011-11-21 00:42:24 -0800</date>
            <delta_ts>2011-11-24 12:46:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72835-20111121124222.patch</filename>
            <type>text/plain</type>
            <size>23981</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyNTM4MzM0YjUyNTU3
NmVlNGM2MWRmY2Q0ZDI5NjY0NmQ1NWNhMS4uMDM2NzMxZDI5MTY1MzI3ODY4OGZmYWE4N2YzZDlk
MWIwOGVhODg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTIxICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbcHJvdG9jb2xdIGdlbmVyYXRlIEMrKyBjbGFzc2VzIGZvciBwcm90b2NvbCBKU09OIG5hbWVk
IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4
dGVuZHMgcHl0aG9uIGdlbmVyYXRvciBmdW5jdGlvbmFsaXR5LgorICAgICAgICBNYWtlcyBjb25z
dHJ1Y3RvciBpbiBJbnNwZWN0b3JPYmplY3QgcHVibGljLgorCisgICAgICAgICogaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oOgorCiAyMDExLTExLTE5ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxp
dmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQysrIGJpbmRpbmdzIGJ1aWxkIGZpeCBmb3IgbW92
ZSBvZiBhcnJheSBjbGFzc2VzIHRvIFdURi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggOGNiYWFkNzI1MWEwMTFjOGJmNTY4
YTg4YjY3ZDA2OWUzY2ViYTlhYS4uMGQ5MGUxM2I0YTI4NWUzZjc3NTJkZmJlZmMzZjMzYjQ4Y2Vj
NjJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKQEAgLTEwMyw2ICsxMDMsMTIgQEAgZGVmaW5lc19tYXAgPSBwYXJzZV9kZWZp
bmVzKGFyZ19vcHRpb25zLmRlZmluZXMpCiAKIGNsYXNzIENhcGl0YWxpemVyOgogICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgbG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihzdHIpOgorICAgICAg
ICBpZiBsZW4oc3RyKSA+IDAgYW5kIHN0clswXS5pc2xvd2VyKCk6CisgICAgICAgICAgICBzdHIg
PSBzdHJbMF0udXBwZXIoKSArIHN0clsxOl0KKyAgICAgICAgcmV0dXJuIHN0cgorCisgICAgQHN0
YXRpY21ldGhvZAogICAgIGRlZiB1cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKHN0cik6CiAgICAg
ICAgIHBvcyA9IDAKICAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHN0cikgYW5kIHN0cltwb3NdLmlz
dXBwZXIoKToKQEAgLTE4Nyw2ICsxOTMsOCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAg
ICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAogICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAi
bnVtYmVyIjoKICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5OdW1iZXIKKyAgICAgICAgZWxp
ZiBqc29uX3R5cGUgPT0gImFueSI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQW55CiAg
ICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZTog
JXMiICUganNvbl90eXBlKQogCkBAIC0zMjMsNiArMzMxLDM1IEBAIGNsYXNzIFJhd1R5cGVzKG9i
amVjdCk6CiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IikKIAorICAgIGNsYXNzIEFueShCYXNlVHlwZSk6CisgICAgICAg
IEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5
cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVW
RU5UOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6CisgICAgICAg
ICAgICByZXR1cm4gIlZhbHVlIgorCisgICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0
ZXJfbmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX2luaXRp
YWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvclZhbHVlOjpjcmVhdGUoKSIK
KworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgp
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1Bh
cmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvclZhbHVlPiIpCisgICAgICAgIF9yZWZfY190eXBlID0g
Q1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQorCiAgICAgY2xhc3MgQXJy
YXkoQmFzZVR5cGUpOgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIGdldF9jX3Bh
cmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CkBAIC0zNjAsMzcgKzM5NywzMTYg
QEAgY2xhc3MgUGFyYW1UeXBlKG9iamVjdCk6CiAgICAgT1VUUFVUID0gIm91dHB1dCIKICAgICBF
VkVOVCA9ICJldmVudCIKIAorIyBDb2xsZWN0aW9uIG9mIEluc3BlY3Rvck9iamVjdCBjbGFzcyBt
ZXRob2RzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBvdmVybG9hZGVkIGluIGdlbmVyYXRlZCBjbGFz
cy4KKyMgV2UgbXVzdCBleHBsaWNpdGx5IGltcG9ydCBhbGwgb3ZlcmxvYWRlZCBtZXRob2RzIG9y
IHRoZXkgd29uJ3QgYmUgYXZhaWxhYmxlIHRvIHVzZXIuCitJTlNQRUNUT1JfT0JKRUNUX1NFVFRF
Ul9OQU1FUyA9IGZyb3plbnNldChbInNldFZhbHVlIiwgInNldEJvb2xlYW4iLCAic2V0TnVtYmVy
IiwgInNldFN0cmluZyIsICJzZXRWYWx1ZSIsICJzZXRPYmplY3QiLCAic2V0QXJyYXkiXSkKKwor
CitjbGFzcyBUeXBlQnVpbGRlclRlbXBsYXRlczoKKyAgICAjIFNwZWNpZmllcyB3aGV0aGVyIGdl
bmVyYXRvciBlbXBsb3lzIEMgcHJlcHJvY2Vzc29yIGRlZmluZXMgb3Igbm90LiBCb3RoIG9wdGlv
bnMgc2hvdWxkIGJlIHdvcmtpbmcuCisgICAgQ09MTEFQU0VfREVGSU5FUyA9IFRydWUKKworICAg
IEFMTF9ERUZJTkVTID0gW10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2VuZXJhdGVf
ZGVmaW5lcyhvdXRwdXQpOgorICAgICAgICBpZiBub3QgVHlwZUJ1aWxkZXJUZW1wbGF0ZXMuQ09M
TEFQU0VfREVGSU5FUzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBvdXRwdXQuYXBwZW5k
KCIvLyBTZXZlcmFsIHByZXByb2Nlc3NvciBkZWZpbmVzIHRoYXQgbWFrZSB0eXBlIGJ1aWxkZXIg
Y29kZSBtb3JlIGNvbXBhY3QuXG4iKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCIvLyBIYWNrIG1l
IGlmIHlvdSB3YW50IGdlbmVyYXRlZCBjb2RlIHdpdGhvdXQgcHJlcHJvY2Vzc29yIGRlZmluZXMu
XG4iKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCIvLyAgICAgLS0gZ2VuZXJhdG9yXG4iKQorICAg
ICAgICBmb3IgZGVmaW5lIGluIFR5cGVCdWlsZGVyVGVtcGxhdGVzLkFMTF9ERUZJTkVTOgorICAg
ICAgICAgICAgZGVmaW5lLmdlbmVyYXRlX2RlZmluZShvdXRwdXQpCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIGdlbmVyYXRlX3VuZGVmaW5lcyhvdXRwdXQpOgorICAgICAgICBmb3IgZGVm
aW5lIGluIHJldmVyc2VkKFR5cGVCdWlsZGVyVGVtcGxhdGVzLkFMTF9ERUZJTkVTKToKKyAgICAg
ICAgICAgIGRlZmluZS5nZW5lcmF0ZV91bmRlZmluZShvdXRwdXQpCisKKyAgICBjbGFzcyBEZWZp
bmU6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZpbmVfbmFtZSwgdGV4dCwgY29sbGFw
c2VkX3dyYXBwZXIsIHBhcmFtX25hbWVzLCBhbGxfZGVmaW5lcyk6CisgICAgICAgICAgICBzZWxm
LmRlZmluZV9uYW1lXyA9IGRlZmluZV9uYW1lCisgICAgICAgICAgICBzZWxmLnRlbXBsYXRlXyA9
IHN0cmluZy5UZW1wbGF0ZSh0ZXh0KQorICAgICAgICAgICAgc2VsZi5jb2xsYXBzZWRfd3JhcHBl
cl8gPSBjb2xsYXBzZWRfd3JhcHBlcgorICAgICAgICAgICAgc2VsZi5wYXJhbV9uYW1lc18gPSBw
YXJhbV9uYW1lcworCisgICAgICAgICAgICBhbGxfZGVmaW5lcy5hcHBlbmQoc2VsZikKKworICAg
ICAgICBkZWYgZ2VuZXJhdGVfZGVmaW5lKHNlbGYsIG91dHB1dCk6CisgICAgICAgICAgICBhcmd1
bWVudHMgPSB7fQorICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgICAgICBmb3Ig
a2V5IGluIHNlbGYucGFyYW1fbmFtZXNfOgorICAgICAgICAgICAgICAgIHByZXByb2Nlc3Nvcl9w
YXJhbWV0ZXJfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoa2V5
KQorICAgICAgICAgICAgICAgIGFyZ3VtZW50c1trZXldID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2Ft
ZWxfY2FzZV90b191cHBlcihrZXkpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
cHJlcHJvY2Vzc29yX3BhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgi
I2RlZmluZSAiICsgc2VsZi5kZWZpbmVfbmFtZV8gKyAiKCIgKyAiLCAiLmpvaW4ocGFyYW1ldGVy
cykgKyAiKSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZW1wbGF0ZV8uc3Vi
c3RpdHV0ZSgqKmFyZ3VtZW50cykucmVwbGFjZSgiXG4iLCAiXFxcbiIpICsgIlxuIikKKworICAg
ICAgICBkZWYgZ2VuZXJhdGVfdW5kZWZpbmUoc2VsZiwgb3V0cHV0KToKKyAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoIiN1bmRlZiAiICsgc2VsZi5kZWZpbmVfbmFtZV8gKyAiXG4iKQorCisgICAg
ICAgIGRlZiBmaWxsKHNlbGYsICoqa3dzKToKKyAgICAgICAgICAgIGlmIFR5cGVCdWlsZGVyVGVt
cGxhdGVzLkNPTExBUFNFX0RFRklORVM6CisgICAgICAgICAgICAgICAgYXJndW1lbnRzID0gW10K
KyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYucGFyYW1fbmFtZXNfOgorICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGt3c1trZXldKQorICAgICAgICAgICAgICAgIGRl
ZmluZV9jYWxsID0gc2VsZi5kZWZpbmVfbmFtZV8gKyAiKCIgKyAiLCAiLmpvaW4oYXJndW1lbnRz
KSArICIpIgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbGxhcHNlZF93cmFwcGVyXyAl
IGRlZmluZV9jYWxsCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmLnRlbXBsYXRlXy5zdWJzdGl0dXRlKCoqa3dzKQorCisgICAgTEFTVF9TVEVQX1BST0xPRyA9
IERlZmluZSgiTEFTVF9TVEVQX1BST0xPRyIsICIiIiAgICAgICAgICAgIGNsYXNzICRzdGVwTmFt
ZSB7CisgICAgICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICAgICAgaW5saW5lIFBhc3NSZWZQ
dHI8JHR5cGVOYW1lPiAiIiIsCisgICAgICAgICIgICAgICAgICAgICAlc1xuICAgICAgICAgICAg
ICAgICIsIFsic3RlcE5hbWUiLCAidHlwZU5hbWUiXSwgQUxMX0RFRklORVMpCisKKyAgICBMQVNU
X1NURVBfTUVUSE9EX0JFR0lOID0gRGVmaW5lKCJMQVNUX1NURVBfTUVUSE9EX0JFR0lOIiwgIiIi
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmIiIiLAor
ICAgICAgICAiXG4gICAgICAgICAgICAgICAgICAgICVzIiwgW10sIEFMTF9ERUZJTkVTKQorCisg
ICAgTEFTVF9TVEVQX1JFVFVSTiA9IERlZmluZSgiTEFTVF9TVEVQX1JFVFVSTiIsICIiIgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR0eXBlTmFt
ZT4qPigmbV9qc29uX3JlZikpLT5yZWxlYXNlKCk7IiIiLAorICAgICAgICAiXG4gICAgICAgICAg
ICAgICAgICAgICVzIiwgWyJ0eXBlTmFtZSJdLCBBTExfREVGSU5FUykKKworICAgIFNURVBfQlJJ
REdFID0gRGVmaW5lKCJTVEVQX0JSSURHRSIsICIiIgorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgJHByZXZTdGVw
TmFtZTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
ZjsKKyAgICAgICAgICAgICAgICBpbmxpbmUgJG5leHRTdGVwTmFtZShSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgbV9qc29uX3JlZl8pIDogbV9qc29uX3JlZihtX2pzb25fcmVmXykge30KKyAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgIGNsYXNzICRwcmV2U3RlcE5hbWUgeworICAgICAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgICAgIGlubGluZSAkbmV4dFN0ZXBOYW1lICIiIiwKKyAg
ICAgICAgIlxuICAgICAgICAgICAgJXNcbiAgICAgICAgICAgICAgICAiLCBbInByZXZTdGVwTmFt
ZSIsICJuZXh0U3RlcE5hbWUiXSwgQUxMX0RFRklORVMpCisKKyAgICBOT1RfTEFTVF9TVEVQX01F
VEhPRF9CRUdJTiA9IERlZmluZSgiTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4iLCAiIiIKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRuZXh0U3RlcE5hbWUgcmVzdWx0
KG1fanNvbl9yZWYpOworICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmIiIiLAorICAgICAg
ICAiXG4gICAgICAgICAgICAgICAgICAgICVzIiwgWyJuZXh0U3RlcE5hbWUiXSwgQUxMX0RFRklO
RVMpCisKKyAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTiA9IERlZmluZSgiTk9UX0xBU1RfU1RFUF9S
RVRVUk4iLCAiIiIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsiIiIsCisgICAg
ICAgICJcbiAgICAgICAgICAgICAgICAgICAgJXMiLCBbXSwgQUxMX0RFRklORVMpCisKKyAgICBG
SVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFID0gRGVmaW5lKCJGSVJTVF9TVEVQX0VORF9BTkRfQ1JF
QVRFIiwgIiIiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgICAgICBmcmllbmQgY2xhc3MgJHR5cGVOYW1lOworICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fanNvbl9yZWY7CisgICAgICAgICAgICAgICAgaW5saW5lICRz
dGVwTmFtZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3JlZl8pIDogbV9qc29u
X3JlZihtX2pzb25fcmVmXykge30KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlubGlu
ZSBzdGF0aWMgJHN0ZXBOYW1lIGNyZWF0ZSgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJHN0
ZXBOYW1lKEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICAgICAgfQorIiIiLAor
ICAgICAgICAiXG4gICAgICAgICAgICAlc1xuXG4iLCBbInN0ZXBOYW1lIiwgInR5cGVOYW1lIl0s
IEFMTF9ERUZJTkVTKQorCisKK2NsYXNzIFR5cGVCaW5kaW5nczoKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIGNyZWF0ZV9mb3JfbmFtZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGUsIGNv
bnRleHRfZG9tYWluX25hbWUpOgorICAgICAgICBpZiBqc29uX3R5cGVbInR5cGUiXSA9PSAic3Ry
aW5nIjoKKyAgICAgICAgICAgIGlmICJlbnVtIiBpbiBqc29uX3R5cGU6CisKKyAgICAgICAgICAg
ICAgICBjbGFzcyBFbnVtQmluZGluZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwg
Zm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90
eXBlWyJlbnVtIl0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogZG9jCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgIG5hbWVzcGFjZSAiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChqc29uX3R5cGVbImlkIl0pCisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIge1xuIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGNvbnN0ICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChDYXBp
dGFsaXplci51cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKGl0ZW1fY19uYW1lKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgPSBcIiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChlbnVtX2l0ZW0pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiXCI7XG4iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiICAgICAgICB9XG5cbiIpCisKKyAgICAgICAgICAgICAgICByZXR1
cm4gRW51bUJpbmRpbmcKKyAgICAgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgICAgICBjbGFz
cyBQbGFpblN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9s
aXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIGpz
b25fdHlwZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAg
LyogIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGpzb25fdHlw
ZVsiZGVzY3JpcHRpb24iXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIgKi9cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAg
ICAgIHR5cGVkZWYgU3RyaW5nICIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKGpzb25fdHlwZVsiaWQiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoIjtcblxuIikKKyAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5TdHJpbmcKKworICAgICAg
ICBlbGlmIGpzb25fdHlwZVsidHlwZSJdID09ICJvYmplY3QiOgorICAgICAgICAgICAgaWYgInBy
b3BlcnRpZXMiIGluIGpzb25fdHlwZToKKworICAgICAgICAgICAgICAgIGNsYXNzIENsYXNzQmlu
ZGluZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9saXN0ZW5lcik6
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBlWyJwcm9wZXJ0
aWVzIl0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGllcyA9IFtdCisgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wcm9wZXJ0aWVzID0gW10KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciBwIGluIHByb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgIm9wdGlvbmFsIiBpbiBwIGFuZCBwWyJvcHRpb25hbCJdOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wcm9wZXJ0aWVzLmFwcGVuZChwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1haW5fcHJvcGVydGllcy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgICAgICMg
VE9ETzogZG9jCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAg
IGNsYXNzICIpCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0ganNvbl90eXBl
WyJpZCJdCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGNsYXNzX25hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIg
ICAgICAgIHB1YmxpYzpcbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoIiAgICAgICAgICAgIC8qXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZCgiICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOlxuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgICAgICAqIFJlZlB0cjwlcz4g
cmVzdWx0ID0gJXM6OmNyZWF0ZSgpIiAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG1haW5fcHJvcGVydGllczoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJcbiAgICAgICAgICAgICAqICAgICAu
c2V0JXMoLi4uKSIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3Bb
Im5hbWUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCI7XG4gICAg
ICAgICAgICAgKi9cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbiht
YWluX3Byb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW5ndGggPT0gMDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICAgICBp
bmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8JXM+IGNyZWF0ZSgpXG4iICUgY2xhc3NfbmFtZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICAgICB7XG4i
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWYgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpO1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAg
ICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFJlZlB0cjwlcz4qPigmcmVmKSkt
PnJlbGVhc2UoKTtcbiIgJSBjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoIiAgICAgICAgICAgIH1cbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBfbmFtZXMgPSBbXQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW5ndGgpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwX25hbWVzLmFwcGVuZCgiU3RlcFNldCVz
IiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIobWFpbl9wcm9wZXJ0aWVz
W2ldWyJuYW1lIl0pKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN0ZXBfbmFt
ZSBpbiBzdGVwX25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCIgICAgICAgICAgICBjbGFzcyAlcztcbiIgJSBzdGVwX25hbWUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiXG4iKQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdldE1ldGhvZERlY2xhcmF0aW9uKG91dHB1dCwganNvbl9wcm9wKToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgic2V0IikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChDYXBpdGFsaXplci5s
b3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKGpzb25fcHJvcFsibmFtZSJdKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSByZXNvbHZlX3BhcmFtX3Jhd190
eXBlKGpzb25fcHJvcCwgY29udGV4dF9kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiKCVzIHZhbHVlKSIgJSBwYXJhbV9yYXdfdHlwZS5n
ZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpKQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldE1ldGhvZFN0YXRlbWVudChvdXRwdXQs
IGpzb25fcHJvcCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190
eXBlID0gcmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShqc29uX3Byb3AsIGNvbnRleHRfZG9tYWluX25h
bWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIi0+c2V0
JXMoXCIlc1wiLCB2YWx1ZSk7IiAlIChwYXJhbV9yYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKSwg
anNvbl9wcm9wWyJuYW1lIl0pKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChUeXBlQnVpbGRlclRlbXBsYXRlcy5MQVNUX1NURVBfUFJPTE9HLmZpbGwoc3RlcE5h
bWU9c3RlcF9uYW1lc1stMV0sIHR5cGVOYW1lPWNsYXNzX25hbWUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldE1ldGhvZERlY2xhcmF0aW9uKG91dHB1dCwgbWFpbl9wcm9wZXJ0aWVz
Wy0xXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKFR5cGVCdWls
ZGVyVGVtcGxhdGVzLkxBU1RfU1RFUF9NRVRIT0RfQkVHSU4uZmlsbCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldE1ldGhvZFN0YXRlbWVudChvdXRwdXQsIG1haW5fcHJvcGVydGll
c1stMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChUeXBlQnVp
bGRlclRlbXBsYXRlcy5MQVNUX1NURVBfUkVUVVJOLmZpbGwodHlwZU5hbWU9Y2xhc3NfbmFtZSkp
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBsZW4obWFpbl9wcm9wZXJ0aWVz
KSAtIDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBwb3MgPj0gMDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChUeXBlQnVpbGRlclRlbXBs
YXRlcy5TVEVQX0JSSURHRS5maWxsKHByZXZTdGVwTmFtZT1zdGVwX25hbWVzW3Bvc10sIG5leHRT
dGVwTmFtZT1zdGVwX25hbWVzW3BvcyArIDFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0TWV0aG9kRGVjbGFyYXRpb24ob3V0cHV0LCBtYWluX3Byb3BlcnRpZXNbcG9zXSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChUeXBlQnVpbGRl
clRlbXBsYXRlcy5OT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTi5maWxsKG5leHRTdGVwTmFtZT1z
dGVwX25hbWVzW3BvcyArIDFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
TWV0aG9kU3RhdGVtZW50KG91dHB1dCwgbWFpbl9wcm9wZXJ0aWVzW3Bvc10pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoVHlwZUJ1aWxkZXJUZW1wbGF0ZXMu
Tk9UX0xBU1RfU1RFUF9SRVRVUk4uZmlsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb3MgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
VHlwZUJ1aWxkZXJUZW1wbGF0ZXMuRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURS5maWxsKHN0ZXBO
YW1lPXN0ZXBfbmFtZXNbMF0sIHR5cGVOYW1lPWNsYXNzX25hbWUpKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgcHJvcCBpbiBvcHRpb25hbF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dHRlcl9uYW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBw
ZXIocHJvcFsibmFtZSJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoIiAgICAgICAgICAgIGlubGluZSB2b2lkICVzIiAlIHNldHRlcl9uYW1lKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiglcyB2YWx1ZSlcbiIgJSBwYXJhbV9y
YXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgRmFsc2UpLmdldF90ZXh0
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAgICAg
ICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0JXMoXCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3Jhd190
eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0pKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgICAgIH1cblxuIikKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIHNldHRlcl9uYW1lIGluIElOU1BFQ1RPUl9PQkpFQ1RfU0VU
VEVSX05BTUVTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCIgICAgICAgICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OiVzO1xuXG4iICUgc2V0dGVyX25h
bWUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgfTtc
blxuIikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2xhc3NCaW5kaW5nCisgICAgICAgICAgICBl
bHNlOgorCisgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5PYmplY3RCaW5kaW5nOgorICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5l
cmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICMgTm8tb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RCaW5kaW5nCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChqc29uX3R5cGVbInR5cGUiXSkKKworICAg
ICAgICAgICAgY2xhc3MgUmF3VHlwZXNCaW5kaW5nOgorICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwg
Zm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICMgTm8tb3AKKyAgICAgICAg
ICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzQmluZGluZworCiAK
IGNsYXNzIFR5cGVEYXRhKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fdHlw
ZSwganNvbl9kb21haW4pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25f
ZG9tYWluLCBkb21haW5fZGF0YSk6CiAgICAgICAgIHNlbGYuanNvbl90eXBlXyA9IGpzb25fdHlw
ZQogICAgICAgICBzZWxmLmpzb25fZG9tYWluXyA9IGpzb25fZG9tYWluCisgICAgICAgIHNlbGYu
ZG9tYWluX2RhdGFfID0gZG9tYWluX2RhdGEKIAotICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90
eXBlOgotICAgICAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUiXQotICAg
ICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCi0gICAgICAg
IGVsc2U6CisgICAgICAgIGlmICJ0eXBlIiBub3QgaW4ganNvbl90eXBlOgogICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQorCisgICAgICAgIGpzb25fdHlwZV9uYW1l
ID0ganNvbl90eXBlWyJ0eXBlIl0KKyAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNv
bl90eXBlX25hbWUpCiAgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKKyAgICAgICAg
c2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfZm9yX25hbWVkX3R5cGVfZGVjbGFy
YXRpb24oanNvbl90eXBlLCBqc29uX2RvbWFpblsiZG9tYWluIl0pCiAKICAgICBkZWYgZ2V0X3Jh
d190eXBlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KIAorICAgIGRlZiBn
ZXRfYmluZGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmluZGluZ18KKworCitjbGFz
cyBEb21haW5EYXRhOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX2RvbWFpbik6CisgICAg
ICAgIHNlbGYuanNvbl9kb21haW4gPSBqc29uX2RvbWFpbgorICAgICAgICBzZWxmLnR5cGVzXyA9
IFtdCisKKyAgICBkZWYgYWRkX3R5cGUoc2VsZiwgdHlwZV9kYXRhKToKKyAgICAgICAgc2VsZi50
eXBlc18uYXBwZW5kKHR5cGVfZGF0YSkKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5qc29uX2RvbWFpblsiZG9tYWluIl0KKworICAgIGRlZiB0eXBlcyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYudHlwZXNfCisKIAogY2xhc3MgVHlwZU1hcDoKICAgICBkZWYg
X19pbml0X18oc2VsZiwgYXBpKToKICAgICAgICAgc2VsZi5tYXBfID0ge30KKyAgICAgICAgc2Vs
Zi5kb21haW5zXyA9IFtdCiAgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFpbnMi
XToKICAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCiAKICAg
ICAgICAgICAgIGRvbWFpbl9tYXAgPSB7fQogICAgICAgICAgICAgc2VsZi5tYXBfW2RvbWFpbl9u
YW1lXSA9IGRvbWFpbl9tYXAKIAorICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5EYXRh
KGpzb25fZG9tYWluKQorICAgICAgICAgICAgc2VsZi5kb21haW5zXy5hcHBlbmQoZG9tYWluX2Rh
dGEpCisKICAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46CiAgICAgICAgICAg
ICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToKICAgICAgICAgICAg
ICAgICAgICAgdHlwZV9uYW1lID0ganNvbl90eXBlWyJpZCJdCi0gICAgICAgICAgICAgICAgICAg
IHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9kb21haW4pCisgICAgICAgICAg
ICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9kb21haW4sIGRv
bWFpbl9kYXRhKQogICAgICAgICAgICAgICAgICAgICBkb21haW5fbWFwW3R5cGVfbmFtZV0gPSB0
eXBlX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2RhdGEuYWRkX3R5cGUodHlwZV9k
YXRhKQorCisgICAgZGVmIGRvbWFpbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRvbWFp
bnNfCiAKICAgICBkZWYgZ2V0KHNlbGYsIGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpOgogICAgICAg
ICByZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9uYW1lXVt0eXBlX25hbWVdCkBAIC00MjYsNiArNzQy
LDMwIEBAIGpzb25fYXBpID0ganNvbi5sb2Fkcyhqc29uX3N0cmluZykKIAogCiBjbGFzcyBUZW1w
bGF0ZXM6CisgICAgZGVmIGdldF90aGlzX3NjcmlwdF9wYXRoXyhhYnNvbHV0ZV9wYXRoKToKKyAg
ICAgICAgYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChhYnNvbHV0ZV9wYXRoKQorICAg
ICAgICBjb21wb25lbnRzID0gW10KKworICAgICAgICBkZWYgZmlsbF9yZWN1cnNpdmUocGF0aF9w
YXJ0LCBkZXB0aCk6CisgICAgICAgICAgICBpZiBkZXB0aCA8PSAwIG9yIHBhdGhfcGFydCA9PSAn
Lyc6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmaWxsX3JlY3Vyc2l2ZShv
cy5wYXRoLmRpcm5hbWUocGF0aF9wYXJ0KSwgZGVwdGggLSAxKQorICAgICAgICAgICAgY29tcG9u
ZW50cy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShwYXRoX3BhcnQpKQorCisgICAgICAgICMgVHlw
aWNhbCBwYXRoIGlzIC9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorICAgICAgICAjIExldCdzIHRha2UgNCBjb21wb25lbnRzIGZyb20gdGhlIHJlYWwg
cGF0aCB0aGVuLgorICAgICAgICBmaWxsX3JlY3Vyc2l2ZShhYnNvbHV0ZV9wYXRoLCA0KQorCisg
ICAgICAgIHJldHVybiAiLyIuam9pbihjb21wb25lbnRzKQorCisgICAgZmlsZV9oZWFkZXJfID0g
KCIvLyBGaWxlIGlzIGdlbmVyYXRlZCBieSAlc1xuXG4iICUgZ2V0X3RoaXNfc2NyaXB0X3BhdGhf
KHN5cy5hcmd2WzBdKSArCisiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorIiIiKQorCisKKwogICAgIGZyb250ZW5kX2RvbWFpbl9jbGFz
cyA9IHN0cmluZy5UZW1wbGF0ZSgKICIiIiAgICBjbGFzcyAkZG9tYWluQ2xhc3NOYW1lIHsKICAg
ICBwdWJsaWM6JGRvbWFpbkNhcGFiaWxpdGllcwpAQCAtNDY3LDIzICs4MDcsMjQgQEAgJGNvZGUg
ICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogfQogIiIiKQogCi0gICAgZnJvbnRl
bmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZF9oCisg
ICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKworIiIiI2lmbmRl
ZiBJbnNwZWN0b3JGcm9udGVuZF9oCiAjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kX2gKIAogI2lu
Y2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKLWNsYXNz
IEluc3BlY3Rvck9iamVjdDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKK25hbWVz
cGFjZSBUeXBlQnVpbGRlciB7Ciske3R5cGVCdWlsZGVyc30KK30KKwogY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmQgewogcHVibGljOgogICAgIEluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCopOwpAQCAtNDk4LDEwICs4MzksOCBAQCAke2ZpZWxkRGVjbGFyYXRpb25zfX07
CiAjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkKICIiIikKIAotICAgIGJh
Y2tlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcl9oCisgICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyAr
CisiIiIjaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKICNkZWZpbmUgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KQEAg
LTU3MCwxMCArOTA5LDggQEAgJGZpZWxkRGVjbGFyYXRpb25zCiAKICIiIikKIAotICAgIGJhY2tl
bmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KKyAgICBiYWNrZW5kX2NwcCA9IHN0cmluZy5U
ZW1wbGF0ZShmaWxlX2hlYWRlcl8gKworIiIiCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgpAQCAtOTAxLDEwICsxMjM4LDggQEAg
Ym9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBTdHJpbmcqIHIKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQogIiIi
KQogCi0gICAgZnJvbnRlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KKyAgICBmcm9udGVu
ZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIgogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKQEAgLTkzMywxMCArMTI2
OCw4IEBAICRtZXRob2RzCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICIiIikKIAotICAg
IGJhY2tlbmRfanMgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQorICAgIGJhY2tlbmRfanMgPSBzdHJp
bmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIgogCiBJbnNwZWN0b3JCYWNrZW5kU3R1YiA9
IGZ1bmN0aW9uKCkKIHsKQEAgLTEyMTEsOSArMTU0NCwxMiBAQCBjbGFzcyBHZW5lcmF0b3I6CiAg
ICAgYmFja2VuZF9pbmNsdWRlX2xpc3QgPSBbXQogICAgIGZyb250ZW5kX2NvbnN0cnVjdG9yX2lu
aXRfbGlzdCA9IFtdCiAgICAgZnJvbnRlbmRfY2FwYWJpbGl0aWVzX2NvbnN0YW50c19saXN0ID0g
W10KKyAgICB0eXBlX2J1aWxkZXJfZnJhZ21lbnRzID0gW10KIAogICAgIEBzdGF0aWNtZXRob2QK
ICAgICBkZWYgZ28oKToKKyAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXModHlwZV9tYXAp
CisKICAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06CiAgICAg
ICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQogICAgICAgICAgICAg
ZG9tYWluX25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCkBAIC0xNDA4LDYgKzE3NDQs
MjYgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2lu
aXRpYWxpemVyX2xpc3QuYXBwZW5kKCIgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgne1wibWV0
aG9kXCI6IFwiJXMuJXNcIiVzLCBcImlkXCI6IDB9Jyk7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29u
X2NvbW1hbmRfbmFtZSwganNfcGFyYW1ldGVyc190ZXh0KSkKIAorICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgcHJvY2Vzc190eXBlcyh0eXBlX21hcCk6CisgICAgICAgIG91dHB1dCA9IEdlbmVy
YXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzCisKKyAgICAgICAgY2xhc3MgRm9yd2FyZExpc3Rl
bmVyOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIFR5cGVCdWlsZGVyVGVtcGxhdGVzLmdl
bmVyYXRlX2RlZmluZXMob3V0cHV0KQorCisgICAgICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBl
X21hcC5kb21haW5zKCk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgbmFtZXNwYWNl
ICIpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGRvbWFpbl9kYXRhLm5hbWUoKSkKKyAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoIiB7XG4iKQorICAgICAgICAgICAgZm9yIHR5cGVfZGF0YSBp
biBkb21haW5fZGF0YS50eXBlcygpOgorICAgICAgICAgICAgICAgIHR5cGVfZGF0YS5nZXRfYmlu
ZGluZygpLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIEZvcndhcmRMaXN0ZW5lcikKKwor
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIH1cbiIpCisKKyAgICAgICAgVHlwZUJ1aWxk
ZXJUZW1wbGF0ZXMuZ2VuZXJhdGVfdW5kZWZpbmVzKG91dHB1dCkKKwogR2VuZXJhdG9yLmdvKCkK
IAogYmFja2VuZF9oX2ZpbGUgPSBvcGVuKG91dHB1dF9oZWFkZXJfZGlybmFtZSArICIvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaCIsICJ3IikKQEAgLTE0MjEsNyArMTc3Nyw4IEBAIGJhY2tl
bmRfanNfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcyIsICJ3IikKIAogZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVu
ZF9oLnN1YnN0aXR1dGUoTm9uZSwKICAgICAgICAgIGZpZWxkRGVjbGFyYXRpb25zPWpvaW4oR2Vu
ZXJhdG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLCAiIiksCi0gICAgICAgICBkb21haW5D
bGFzc0xpc3Q9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLCAiIikp
KQorICAgICAgICAgZG9tYWluQ2xhc3NMaXN0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFp
bl9jbGFzc19saW5lcywgIiIpLAorICAgICAgICAgdHlwZUJ1aWxkZXJzPWpvaW4oR2VuZXJhdG9y
LnR5cGVfYnVpbGRlcl9mcmFnbWVudHMsICIiKSkpCiAKIGJhY2tlbmRfaF9maWxlLndyaXRlKFRl
bXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAogICAgIGNvbnN0cnVjdG9ySW5pdD1q
b2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggYjI2YWJjMzFjYzNj
YjAzZjdiZTA3NTk1NzFmZDEzNjM1ZjdiMTE1MS4uMDNmZGQxNWIyNWQwOWJkZWM0NTFhZDAzYjFh
YjMyMzlmMjgwZGEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaApAQCAtMjA2LDggKzIwNiwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQogCi1wcml2YXRlOgorcHJvdGVj
dGVkOgogICAgIEluc3BlY3Rvck9iamVjdCgpOworCitwcml2YXRlOgogICAgIERpY3Rpb25hcnkg
bV9kYXRhOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fb3JkZXI7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>116047</attachid>
            <date>2011-11-21 00:45:27 -0800</date>
            <delta_ts>2011-11-21 00:45:27 -0800</delta_ts>
            <desc>Sample generated file (condensed form with C preprocessor defines)</desc>
            <filename>InspectorFrontend.h.sample.condensed_form</filename>
            <type>text/plain</type>
            <size>84073</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCnR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKLy8gU2V2ZXJhbCBwcmVwcm9j
ZXNzb3IgZGVmaW5lcyB0aGF0IG1ha2UgdHlwZSBidWlsZGVyIGNvZGUgbW9yZSBjb21wYWN0Lgov
LyBIYWNrIG1lIGlmIHlvdSB3YW50IGdlbmVyYXRlZCBjb2RlIHdpdGhvdXQgcHJlcHJvY2Vzc29y
IGRlZmluZXMuCi8vICAgICAtLSBnZW5lcmF0b3IKI2RlZmluZSBMQVNUX1NURVBfUFJPTE9HKFN0
ZXBOYW1lLCBUeXBlTmFtZSkgICAgICAgICAgICAgY2xhc3MgU3RlcE5hbWUge1wKICAgICAgICAg
ICAgcHVibGljOlwKICAgICAgICAgICAgICAgIGlubGluZSBQYXNzUmVmUHRyPFR5cGVOYW1lPiAK
I2RlZmluZSBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCkgXAogICAgICAgICAgICAgICAge1wKICAg
ICAgICAgICAgICAgICAgICBtX2pzb25fcmVmCiNkZWZpbmUgTEFTVF9TVEVQX1JFVFVSTihUeXBl
TmFtZSkgXAogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8VHlwZU5hbWU+Kj4oJm1fanNvbl9yZWYpKS0+cmVsZWFzZSgpOwojZGVmaW5lIFNURVBfQlJJ
REdFKFByZXZTdGVwTmFtZSwgTmV4dFN0ZXBOYW1lKSBcCiAgICAgICAgICAgICAgICB9XApcCiAg
ICAgICAgICAgIHByaXZhdGU6XAogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFByZXZTdGVw
TmFtZTtcCiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbV9qc29uX3Jl
ZjtcCiAgICAgICAgICAgICAgICBpbmxpbmUgTmV4dFN0ZXBOYW1lKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBtX2pzb25fcmVmXykgOiBtX2pzb25fcmVmKG1fanNvbl9yZWZfKSB7fVwKICAgICAg
ICAgICAgfTtcClwKICAgICAgICAgICAgY2xhc3MgUHJldlN0ZXBOYW1lIHtcCiAgICAgICAgICAg
IHB1YmxpYzpcCiAgICAgICAgICAgICAgICBpbmxpbmUgTmV4dFN0ZXBOYW1lIAojZGVmaW5lIE5P
VF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKE5leHRTdGVwTmFtZSkgXAogICAgICAgICAgICAgICAg
e1wKICAgICAgICAgICAgICAgICAgICBOZXh0U3RlcE5hbWUgcmVzdWx0KG1fanNvbl9yZWYpO1wK
ICAgICAgICAgICAgICAgICAgICBtX2pzb25fcmVmCiNkZWZpbmUgTk9UX0xBU1RfU1RFUF9SRVRV
Uk4oKSBcCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKI2RlZmluZSBGSVJTVF9T
VEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBOYW1lLCBUeXBlTmFtZSkgXAogICAgICAgICAgICAgICAg
fVwKICAgICAgICAgICAgcHJpdmF0ZTpcCiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgVHlw
ZU5hbWU7XAogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9qc29uX3Jl
ZjtcCiAgICAgICAgICAgICAgICBpbmxpbmUgU3RlcE5hbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fanNvbl9yZWZfKSA6IG1fanNvbl9yZWYobV9qc29uX3JlZl8pIHt9XAogICAgICAg
ICAgICB9O1wKXAogICAgICAgICAgICBpbmxpbmUgc3RhdGljIFN0ZXBOYW1lIGNyZWF0ZSgpIHtc
CiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcE5hbWUoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7XAogICAgICAgICAgICB9XAoKICAgIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogICAgfQogICAg
bmFtZXNwYWNlIFBhZ2UgewogICAgICAgIG5hbWVzcGFjZSBSZXNvdXJjZVR5cGUgewogICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb25zdCBkb2N1bWVudCA9ICJEb2N1bWVudCI7CiAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGNvbnN0IHN0eWxlc2hlZXQgPSAiU3R5bGVzaGVldCI7CiAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGNvbnN0IGltYWdlID0gIkltYWdlIjsKICAgICAgICAgICAgY29uc3QgY2hh
ciogY29uc3QgZm9udCA9ICJGb250IjsKICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc2Ny
aXB0ID0gIlNjcmlwdCI7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHhociA9ICJYSFIi
OwogICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCB3ZWJTb2NrZXQgPSAiV2ViU29ja2V0IjsK
ICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgb3RoZXIgPSAiT3RoZXIiOwogICAgICAgIH0K
CiAgICAgICAgY2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBw
dWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAgICAgICAgICogUmVmUHRyPEZyYW1lPiByZXN1bHQgPSBGcmFtZTo6Y3JlYXRlKCkK
ICAgICAgICAgICAgICogICAgIC5zZXRJZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0TG9h
ZGVySWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNz
IFN0ZXBTZXRJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExvYWRlcklkOwogICAgICAgICAg
ICBjbGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWltZVR5cGU7Cgog
ICAgICAgICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRNaW1lVHlwZSwgRnJhbWUpCiAgICAg
ICAgICAgICAgICBzZXRNaW1lVHlwZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
TEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oRnJhbWUpCiAgICAgICAgICAgIFNU
RVBfQlJJREdFKFN0ZXBTZXRVcmwsIFN0ZXBTZXRNaW1lVHlwZSkKICAgICAgICAgICAgICAgIHNl
dFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oU3RlcFNldE1pbWVUeXBlKS0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JS
SURHRShTdGVwU2V0TG9hZGVySWQsIFN0ZXBTZXRVcmwpCiAgICAgICAgICAgICAgICBzZXRMb2Fk
ZXJJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oU3RlcFNldFVybCktPnNldFN0cmluZygibG9hZGVySWQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JS
SURHRShTdGVwU2V0SWQsIFN0ZXBTZXRMb2FkZXJJZCkKICAgICAgICAgICAgICAgIHNldElkKFN0
cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJ
TihTdGVwU2V0TG9hZGVySWQpLT5zZXRTdHJpbmcoImlkIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRf
QU5EX0NSRUFURShTdGVwU2V0SWQsIEZyYW1lKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0
UGFyZW50SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgaW5saW5lIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgRnJhbWVSZXNvdXJjZVRyZWUg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8q
CiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVm
UHRyPEZyYW1lUmVzb3VyY2VUcmVlPiByZXN1bHQgPSBGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRl
KCkKICAgICAgICAgICAgICogICAgIC5zZXRGcmFtZSguLi4pCiAgICAgICAgICAgICAqICAgICAu
c2V0UmVzb3VyY2VzKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0RnJhbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSZXNvdXJjZXM7CgogICAgICAgICAg
ICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRSZXNvdXJjZXMsIEZyYW1lUmVzb3VyY2VUcmVlKQog
ICAgICAgICAgICAgICAgc2V0UmVzb3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRBcnJheSgi
cmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4o
RnJhbWVSZXNvdXJjZVRyZWUpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRGcmFtZSwg
U3RlcFNldFJlc291cmNlcykKICAgICAgICAgICAgICAgIHNldEZyYW1lKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9E
X0JFR0lOKFN0ZXBTZXRSZXNvdXJjZXMpLT5zZXRPYmplY3QoImZyYW1lIiwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklSU1Rf
U1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0RnJhbWUsIEZyYW1lUmVzb3VyY2VUcmVlKQoKICAg
ICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2hpbGRGcmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFycmF5
KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAg
ICBjbGFzcyBTZWFyY2hNYXRjaCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICAgICAgICAgKiBSZWZQdHI8U2VhcmNoTWF0Y2g+IHJlc3VsdCA9IFNlYXJjaE1hdGNo
OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldExpbmVDb250ZW50KC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0TGluZU51bWJlcjsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExp
bmVDb250ZW50OwoKICAgICAgICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0TGluZUNvbnRl
bnQsIFNlYXJjaE1hdGNoKQogICAgICAgICAgICAgICAgc2V0TGluZUNvbnRlbnQoU3RyaW5nIHZh
bHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0U3Ry
aW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBf
UkVUVVJOKFNlYXJjaE1hdGNoKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0TGluZU51
bWJlciwgU3RlcFNldExpbmVDb250ZW50KQogICAgICAgICAgICAgICAgc2V0TGluZU51bWJlcihk
b3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVH
SU4oU3RlcFNldExpbmVDb250ZW50KS0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklS
U1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0TGluZU51bWJlciwgU2VhcmNoTWF0Y2gpCgog
ICAgICAgIH07CgogICAgICAgIGNsYXNzIFNlYXJjaFJlc3VsdCA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8U2VhcmNoUmVzdWx0PiBy
ZXN1bHQgPSBTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0VXJs
KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRGcmFtZUlkKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXRNYXRjaGVzQ291bnQoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRVcmw7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRGcmFtZUlkOwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0TWF0Y2hlc0NvdW50OwoKICAgICAgICAgICAgTEFTVF9TVEVQX1BS
T0xPRyhTdGVwU2V0TWF0Y2hlc0NvdW50LCBTZWFyY2hSZXN1bHQpCiAgICAgICAgICAgICAgICBz
ZXRNYXRjaGVzQ291bnQoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RF
UF9NRVRIT0RfQkVHSU4oKS0+c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihTZWFyY2hSZXN1bHQpCiAgICAgICAgICAg
IFNURVBfQlJJREdFKFN0ZXBTZXRGcmFtZUlkLCBTdGVwU2V0TWF0Y2hlc0NvdW50KQogICAgICAg
ICAgICAgICAgc2V0RnJhbWVJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9U
X0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldE1hdGNoZXNDb3VudCktPnNldFN0cmluZygi
ZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVS
TigpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRVcmwsIFN0ZXBTZXRGcmFtZUlkKQog
ICAgICAgICAgICAgICAgc2V0VXJsKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBO
T1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0RnJhbWVJZCktPnNldFN0cmluZygidXJs
IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAg
ICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0VXJsLCBTZWFyY2hSZXN1
bHQpCgogICAgICAgIH07CgogICAgICAgIGNsYXNzIENvb2tpZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q29va2llPiByZXN1bHQg
PSBDb29raWU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAg
ICAgICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldERvbWFp
biguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UGF0aCguLi4pCiAgICAgICAgICAgICAqICAg
ICAuc2V0RXhwaXJlcyguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAg
ICAgICAgICAqICAgICAuc2V0SHR0cE9ubHkoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFNl
Y3VyZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2Vzc2lvbiguLi4pOwogICAgICAgICAg
ICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5hbWU7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRWYWx1ZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldERvbWFpbjsKICAgICAgICAgICAg
Y2xhc3MgU3RlcFNldFBhdGg7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRFeHBpcmVzOwogICAg
ICAgICAgICBjbGFzcyBTdGVwU2V0U2l6ZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEh0dHBP
bmx5OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U2VjdXJlOwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0U2Vzc2lvbjsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFNlc3Np
b24sIENvb2tpZSkKICAgICAgICAgICAgICAgIHNldFNlc3Npb24oYm9vbCB2YWx1ZSkKICAgICAg
ICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldEJvb2xlYW4oInNlc3Np
b24iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihDb29raWUp
CiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTZWN1cmUsIFN0ZXBTZXRTZXNzaW9uKQog
ICAgICAgICAgICAgICAgc2V0U2VjdXJlKGJvb2wgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFNlc3Npb24pLT5zZXRCb29sZWFuKCJz
ZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4o
KQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0SHR0cE9ubHksIFN0ZXBTZXRTZWN1cmUp
CiAgICAgICAgICAgICAgICBzZXRIdHRwT25seShib29sIHZhbHVlKQogICAgICAgICAgICAgICAg
ICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTZWN1cmUpLT5zZXRCb29sZWFu
KCJodHRwT25seSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JF
VFVSTigpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTaXplLCBTdGVwU2V0SHR0cE9u
bHkpCiAgICAgICAgICAgICAgICBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICAgICAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0SHR0cE9ubHkpLT5zZXROdW1iZXIo
InNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4o
KQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0RXhwaXJlcywgU3RlcFNldFNpemUpCiAg
ICAgICAgICAgICAgICBzZXRFeHBpcmVzKGludCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBO
T1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U2l6ZSktPnNldE51bWJlcigiZXhwaXJl
cyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAg
ICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRQYXRoLCBTdGVwU2V0RXhwaXJlcykKICAgICAg
ICAgICAgICAgIHNldFBhdGgoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9M
QVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRFeHBpcmVzKS0+c2V0U3RyaW5nKCJwYXRoIiwg
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAg
ICAgICAgU1RFUF9CUklER0UoU3RlcFNldERvbWFpbiwgU3RlcFNldFBhdGgpCiAgICAgICAgICAg
ICAgICBzZXREb21haW4oU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNU
X1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRQYXRoKS0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAg
ICBTVEVQX0JSSURHRShTdGVwU2V0VmFsdWUsIFN0ZXBTZXREb21haW4pCiAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RF
UF9NRVRIT0RfQkVHSU4oU3RlcFNldERvbWFpbiktPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBT
VEVQX0JSSURHRShTdGVwU2V0TmFtZSwgU3RlcFNldFZhbHVlKQogICAgICAgICAgICAgICAgc2V0
TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oU3RlcFNldFZhbHVlKS0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklSU1RfU1RF
UF9FTkRfQU5EX0NSRUFURShTdGVwU2V0TmFtZSwgQ29va2llKQoKICAgICAgICB9OwoKICAgIC8q
IFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8KICAgICAgICB0eXBlZGVmIFN0cmluZyBTY3Jp
cHRJZGVudGlmaWVyOwoKICAgIH0KICAgIG5hbWVzcGFjZSBSdW50aW1lIHsKICAgIC8qIFVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KICAgICAgICB0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmpl
Y3RJZDsKCiAgICAgICAgY2xhc3MgUmVtb3RlT2JqZWN0IDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3Vs
dCA9IFJlbW90ZU9iamVjdDo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRUeXBlKC4u
Lik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlwZTsKCiAgICAg
ICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFR5cGUsIFJlbW90ZU9iamVjdCkKICAgICAg
ICAgICAgICAgIHNldFR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1Rf
U1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oUmVtb3RlT2JqZWN0KQogICAgICAgICAgICBGSVJT
VF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRUeXBlLCBSZW1vdGVPYmplY3QpCgogICAgICAg
ICAgICBpbmxpbmUgdm9pZCBzZXRTdWJ0eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0
cmluZygiY2xhc3NOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxp
bmUgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwog
ICAgICAgICAgICB9CgogICAgICAgICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVl
OwoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkZXNj
cmlwdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQg
c2V0T2JqZWN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmplY3RJZCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0RnVuY3Rpb25Mb2NhdGlvbihQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMt
PnNldE9iamVjdCgiZnVuY3Rpb25Mb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAg
ICAgICB9OwoKICAgICAgICBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFByb3BlcnR5RGVz
Y3JpcHRvcj4gcmVzdWx0ID0gUHJvcGVydHlEZXNjcmlwdG9yOjpjcmVhdGUoKQogICAgICAgICAg
ICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFdyaXRhYmxlKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRDb25maWd1cmFibGUoLi4uKQogICAgICAgICAgICAg
KiAgICAgLnNldEVudW1lcmFibGUoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXROYW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0V3JpdGFibGU7CiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRDb25maWd1cmFibGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRFbnVtZXJhYmxlOwoKICAgICAgICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0RW51bWVy
YWJsZSwgUHJvcGVydHlEZXNjcmlwdG9yKQogICAgICAgICAgICAgICAgc2V0RW51bWVyYWJsZShi
b29sIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+
c2V0Qm9vbGVhbigiZW51bWVyYWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBMQVNU
X1NURVBfUkVUVVJOKFByb3BlcnR5RGVzY3JpcHRvcikKICAgICAgICAgICAgU1RFUF9CUklER0Uo
U3RlcFNldENvbmZpZ3VyYWJsZSwgU3RlcFNldEVudW1lcmFibGUpCiAgICAgICAgICAgICAgICBz
ZXRDb25maWd1cmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9T
VEVQX01FVEhPRF9CRUdJTihTdGVwU2V0RW51bWVyYWJsZSktPnNldEJvb2xlYW4oImNvbmZpZ3Vy
YWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigp
CiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRXcml0YWJsZSwgU3RlcFNldENvbmZpZ3Vy
YWJsZSkKICAgICAgICAgICAgICAgIHNldFdyaXRhYmxlKGJvb2wgdmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldENvbmZpZ3VyYWJsZSkt
PnNldEJvb2xlYW4oIndyaXRhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9M
QVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldE5hbWUsIFN0
ZXBTZXRXcml0YWJsZSkKICAgICAgICAgICAgICAgIHNldE5hbWUoU3RyaW5nIHZhbHVlKQogICAg
ICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRXcml0YWJs
ZSktPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFT
VF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3Rl
cFNldE5hbWUsIFByb3BlcnR5RGVzY3JpcHRvcikKCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNl
dFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldEdldChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgiZ2V0Iiwg
dmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRTZXQoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRPYmplY3QoInNldCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgaW5saW5lIHZvaWQgc2V0V2FzVGhyb3duKGJvb2wgdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIHZhbHVlKTsKICAg
ICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAg
ICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENh
bGxBcmd1bWVudD4gcmVzdWx0ID0gQ2FsbEFyZ3VtZW50OjpjcmVhdGUoKTsKICAgICAgICAgICAg
ICovCiAgICAgICAgICAgIGlubGluZSBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+IGNy
ZWF0ZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlZiA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICByZXR1
cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxBcmd1bWVudD4qPigmcmVmKSktPnJlbGVh
c2UoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAg
ICAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKICAgICAgICAgICAgaW5saW5l
IHZvaWQgc2V0T2JqZWN0SWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm9iamVjdElkIiwgdmFs
dWUpOwogICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgfQogICAgbmFtZXNwYWNlIENvbnNv
bGUgewogICAgICAgIGNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4gcmVz
dWx0ID0gQ29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0U291
cmNlKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRMZXZlbCguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0VGV4dCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldFNvdXJjZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExldmVsOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0VGV4dDsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFRl
eHQsIENvbnNvbGVNZXNzYWdlKQogICAgICAgICAgICAgICAgc2V0VGV4dChTdHJpbmcgdmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJpbmco
InRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihDb25z
b2xlTWVzc2FnZSkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldExldmVsLCBTdGVwU2V0
VGV4dCkKICAgICAgICAgICAgICAgIHNldExldmVsKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0VGV4dCktPnNldFN0cmlu
ZygibGV2ZWwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRV
Uk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0U291cmNlLCBTdGVwU2V0TGV2ZWwp
CiAgICAgICAgICAgICAgICBzZXRTb3VyY2UoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAg
ICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRMZXZlbCktPnNldFN0cmluZygi
c291cmNlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJO
KCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0U291cmNlLCBD
b25zb2xlTWVzc2FnZSkKCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
dGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAg
IGlubGluZSB2b2lkIHNldExpbmUoaW50IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXROdW1iZXIoImxpbmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldFJlcGVhdENvdW50KGludCB2YWx1ZSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJyZXBlYXRDb3VudCIsIHZhbHVlKTsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UGFyYW1ldGVycyhQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0QXJyYXkoInBhcmFtZXRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFycmF5
KCJzdGFja1RyYWNlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUg
dm9pZCBzZXROZXR3b3JrUmVxdWVzdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygibmV0d29ya1JlcXVlc3RJZCIsIHZh
bHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDYWxsRnJhbWUg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8q
CiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVm
UHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUoKQogICAgICAgICAgICAg
KiAgICAgLnNldEZ1bmN0aW9uTmFtZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0VXJsKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXRDb2x1bW5OdW1iZXIoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRGdW5jdGlvbk5hbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRVcmw7CiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMaW5lTnVtYmVyOwogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0Q29sdW1uTnVtYmVyOwoKICAgICAgICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0Q29s
dW1uTnVtYmVyLCBDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICBzZXRDb2x1bW5OdW1iZXIoU3Ry
aW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+
c2V0U3RyaW5nKCJjb2x1bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFT
VF9TVEVQX1JFVFVSTihDYWxsRnJhbWUpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRM
aW5lTnVtYmVyLCBTdGVwU2V0Q29sdW1uTnVtYmVyKQogICAgICAgICAgICAgICAgc2V0TGluZU51
bWJlcihTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oU3RlcFNldENvbHVtbk51bWJlciktPnNldFN0cmluZygibGluZU51bWJlciIsIHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAg
ICAgIFNURVBfQlJJREdFKFN0ZXBTZXRVcmwsIFN0ZXBTZXRMaW5lTnVtYmVyKQogICAgICAgICAg
ICAgICAgc2V0VXJsKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9T
VEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TGluZU51bWJlciktPnNldFN0cmluZygidXJsIiwgdmFs
dWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAg
ICAgU1RFUF9CUklER0UoU3RlcFNldEZ1bmN0aW9uTmFtZSwgU3RlcFNldFVybCkKICAgICAgICAg
ICAgICAgIHNldEZ1bmN0aW9uTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFVybCktPnNldFN0cmluZygiZnVuY3Rp
b25OYW1lIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJO
KCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0RnVuY3Rpb25O
YW1lLCBDYWxsRnJhbWUpCgogICAgICAgIH07CgogICAgfQogICAgbmFtZXNwYWNlIE5ldHdvcmsg
ewogICAgLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwogICAgICAgIHR5cGVkZWYgU3Ry
aW5nIExvYWRlcklkOwoKICAgIC8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCiAgICAg
ICAgdHlwZWRlZiBTdHJpbmcgUmVxdWVzdElkOwoKICAgICAgICBjbGFzcyBSZXNvdXJjZVRpbWlu
ZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAg
LyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBS
ZWZQdHI8UmVzb3VyY2VUaW1pbmc+IHJlc3VsdCA9IFJlc291cmNlVGltaW5nOjpjcmVhdGUoKQog
ICAgICAgICAgICAgKiAgICAgLnNldFJlcXVlc3RUaW1lKC4uLikKICAgICAgICAgICAgICogICAg
IC5zZXRQcm94eVN0YXJ0KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRQcm94eUVuZCguLi4p
CiAgICAgICAgICAgICAqICAgICAuc2V0RG5zU3RhcnQoLi4uKQogICAgICAgICAgICAgKiAgICAg
LnNldERuc0VuZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Q29ubmVjdFN0YXJ0KC4uLikK
ICAgICAgICAgICAgICogICAgIC5zZXRDb25uZWN0RW5kKC4uLikKICAgICAgICAgICAgICogICAg
IC5zZXRTc2xTdGFydCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U3NsRW5kKC4uLikKICAg
ICAgICAgICAgICogICAgIC5zZXRTZW5kU3RhcnQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dFNlbmRFbmQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFJlY2VpdmVIZWFkZXJzRW5kKC4u
Lik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UmVxdWVzdFRpbWU7
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRQcm94eVN0YXJ0OwogICAgICAgICAgICBjbGFzcyBT
dGVwU2V0UHJveHlFbmQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXREbnNTdGFydDsKICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldERuc0VuZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldENvbm5l
Y3RTdGFydDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldENvbm5lY3RFbmQ7CiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRTc2xTdGFydDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNzbEVuZDsK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNlbmRTdGFydDsKICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldFNlbmRFbmQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSZWNlaXZlSGVhZGVyc0VuZDsK
CiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFJlY2VpdmVIZWFkZXJzRW5kLCBS
ZXNvdXJjZVRpbWluZykKICAgICAgICAgICAgICAgIHNldFJlY2VpdmVIZWFkZXJzRW5kKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNl
dE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
TEFTVF9TVEVQX1JFVFVSTihSZXNvdXJjZVRpbWluZykKICAgICAgICAgICAgU1RFUF9CUklER0Uo
U3RlcFNldFNlbmRFbmQsIFN0ZXBTZXRSZWNlaXZlSGVhZGVyc0VuZCkKICAgICAgICAgICAgICAg
IHNldFNlbmRFbmQoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRSZWNlaXZlSGVhZGVyc0VuZCktPnNldE51bWJlcigic2Vu
ZEVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigp
CiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTZW5kU3RhcnQsIFN0ZXBTZXRTZW5kRW5k
KQogICAgICAgICAgICAgICAgc2V0U2VuZFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U2VuZEVuZCktPnNldE51
bWJlcigic2VuZFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNzbEVuZCwgU3RlcFNl
dFNlbmRTdGFydCkKICAgICAgICAgICAgICAgIHNldFNzbEVuZChkb3VibGUgdmFsdWUpCiAgICAg
ICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFNlbmRTdGFy
dCktPnNldE51bWJlcigic3NsRW5kIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9M
QVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNzbFN0YXJ0
LCBTdGVwU2V0U3NsRW5kKQogICAgICAgICAgICAgICAgc2V0U3NsU3RhcnQoZG91YmxlIHZhbHVl
KQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRT
c2xFbmQpLT5zZXROdW1iZXIoInNzbFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAg
IE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldENv
bm5lY3RFbmQsIFN0ZXBTZXRTc2xTdGFydCkKICAgICAgICAgICAgICAgIHNldENvbm5lY3RFbmQo
ZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JF
R0lOKFN0ZXBTZXRTc2xTdGFydCktPnNldE51bWJlcigiY29ubmVjdEVuZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNURVBf
QlJJREdFKFN0ZXBTZXRDb25uZWN0U3RhcnQsIFN0ZXBTZXRDb25uZWN0RW5kKQogICAgICAgICAg
ICAgICAgc2V0Q29ubmVjdFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBO
T1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0Q29ubmVjdEVuZCktPnNldE51bWJlcigi
Y29ubmVjdFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBf
UkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldERuc0VuZCwgU3RlcFNldENv
bm5lY3RTdGFydCkKICAgICAgICAgICAgICAgIHNldERuc0VuZChkb3VibGUgdmFsdWUpCiAgICAg
ICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldENvbm5lY3RT
dGFydCktPnNldE51bWJlcigiZG5zRW5kIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5P
VF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldERuc1N0
YXJ0LCBTdGVwU2V0RG5zRW5kKQogICAgICAgICAgICAgICAgc2V0RG5zU3RhcnQoZG91YmxlIHZh
bHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBT
ZXREbnNFbmQpLT5zZXROdW1iZXIoImRuc1N0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNl
dFByb3h5RW5kLCBTdGVwU2V0RG5zU3RhcnQpCiAgICAgICAgICAgICAgICBzZXRQcm94eUVuZChk
b3VibGUgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVH
SU4oU3RlcFNldERuc1N0YXJ0KS0+c2V0TnVtYmVyKCJwcm94eUVuZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNURVBfQlJJ
REdFKFN0ZXBTZXRQcm94eVN0YXJ0LCBTdGVwU2V0UHJveHlFbmQpCiAgICAgICAgICAgICAgICBz
ZXRQcm94eVN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9T
VEVQX01FVEhPRF9CRUdJTihTdGVwU2V0UHJveHlFbmQpLT5zZXROdW1iZXIoInByb3h5U3RhcnQi
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAg
ICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0UmVxdWVzdFRpbWUsIFN0ZXBTZXRQcm94eVN0YXJ0
KQogICAgICAgICAgICAgICAgc2V0UmVxdWVzdFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgICAg
ICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRQcm94eVN0YXJ0KS0+
c2V0TnVtYmVyKCJyZXF1ZXN0VGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1Rf
TEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUo
U3RlcFNldFJlcXVlc3RUaW1lLCBSZXNvdXJjZVRpbWluZykKCiAgICAgICAgfTsKCiAgICAgICAg
Y2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICAgICAgICAgKiBSZWZQdHI8UmVxdWVzdD4gcmVzdWx0ID0gUmVxdWVzdDo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE1ldGhv
ZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICAgICAgICAg
Ki8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVybDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNl
dE1ldGhvZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhlYWRlcnM7CgogICAgICAgICAgICBM
QVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRIZWFkZXJzLCBSZXF1ZXN0KQogICAgICAgICAgICAgICAg
c2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVl
KTsKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKFJlcXVlc3QpCiAgICAgICAg
ICAgIFNURVBfQlJJREdFKFN0ZXBTZXRNZXRob2QsIFN0ZXBTZXRIZWFkZXJzKQogICAgICAgICAg
ICAgICAgc2V0TWV0aG9kKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFT
VF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0SGVhZGVycyktPnNldFN0cmluZygibWV0aG9kIiwg
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAg
ICAgICAgU1RFUF9CUklER0UoU3RlcFNldFVybCwgU3RlcFNldE1ldGhvZCkKICAgICAgICAgICAg
ICAgIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RF
UF9NRVRIT0RfQkVHSU4oU3RlcFNldE1ldGhvZCktPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklS
U1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0VXJsLCBSZXF1ZXN0KQoKICAgICAgICAgICAg
aW5saW5lIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwb3N0RGF0YSIsIHZhbHVlKTsKICAg
ICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBSZXNwb25zZSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8UmVzcG9u
c2U+IHJlc3VsdCA9IFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFVy
bCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRIZWFkZXJzKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pCiAgICAgICAgICAgICAqICAg
ICAuc2V0Q29ubmVjdGlvblJldXNlZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Q29ubmVj
dGlvbklkKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VXJs
OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U3RhdHVzOwogICAgICAgICAgICBjbGFzcyBTdGVw
U2V0U3RhdHVzVGV4dDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhlYWRlcnM7CiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRNaW1lVHlwZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldENvbm5l
Y3Rpb25SZXVzZWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb25uZWN0aW9uSWQ7CgogICAg
ICAgICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRDb25uZWN0aW9uSWQsIFJlc3BvbnNlKQog
ICAgICAgICAgICAgICAgc2V0Q29ubmVjdGlvbklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAg
ICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldE51bWJlcigiY29ubmVjdGlvbklk
IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oUmVzcG9uc2Up
CiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRDb25uZWN0aW9uUmV1c2VkLCBTdGVwU2V0
Q29ubmVjdGlvbklkKQogICAgICAgICAgICAgICAgc2V0Q29ubmVjdGlvblJldXNlZChib29sIHZh
bHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBT
ZXRDb25uZWN0aW9uSWQpLT5zZXRCb29sZWFuKCJjb25uZWN0aW9uUmV1c2VkIiwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RF
UF9CUklER0UoU3RlcFNldE1pbWVUeXBlLCBTdGVwU2V0Q29ubmVjdGlvblJldXNlZCkKICAgICAg
ICAgICAgICAgIHNldE1pbWVUeXBlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBO
T1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0Q29ubmVjdGlvblJldXNlZCktPnNldFN0
cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RF
UF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0SGVhZGVycywgU3RlcFNl
dE1pbWVUeXBlKQogICAgICAgICAgICAgICAgc2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJ
TihTdGVwU2V0TWltZVR5cGUpLT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURH
RShTdGVwU2V0U3RhdHVzVGV4dCwgU3RlcFNldEhlYWRlcnMpCiAgICAgICAgICAgICAgICBzZXRT
dGF0dXNUZXh0KFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQ
X01FVEhPRF9CRUdJTihTdGVwU2V0SGVhZGVycyktPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAg
ICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTdGF0dXMsIFN0ZXBTZXRTdGF0dXNUZXh0KQogICAgICAg
ICAgICAgICAgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1Rf
TEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U3RhdHVzVGV4dCktPnNldE51bWJlcigic3Rh
dHVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFVybCwgU3RlcFNldFN0YXR1cykKICAgICAg
ICAgICAgICAgIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xB
U1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFN0YXR1cyktPnNldFN0cmluZygidXJsIiwgdmFs
dWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAg
ICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0VXJsLCBSZXNwb25zZSkKCiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVyc1RleHQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFJlcXVl
c3RIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UmVxdWVzdEhlYWRl
cnNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IHRoaXMtPnNldFN0cmluZygicmVxdWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRGcm9tRGlza0NhY2hlKGJvb2wgdmFsdWUp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21EaXNr
Q2FjaGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNl
dFRpbWluZyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgidGltaW5nIiwgdmFsdWUpOwogICAgICAg
ICAgICB9CgogICAgICAgIH07CgogICAgICAgIGNsYXNzIFdlYlNvY2tldFJlcXVlc3QgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAg
ICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPFdl
YlNvY2tldFJlcXVlc3Q+IHJlc3VsdCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAqICAgICAuc2V0UmVxdWVzdEtleTMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dEhlYWRlcnMoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRS
ZXF1ZXN0S2V5MzsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhlYWRlcnM7CgogICAgICAgICAg
ICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRIZWFkZXJzLCBXZWJTb2NrZXRSZXF1ZXN0KQogICAg
ICAgICAgICAgICAgc2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldE9iamVjdCgiaGVh
ZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKFdlYlNv
Y2tldFJlcXVlc3QpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRSZXF1ZXN0S2V5Mywg
U3RlcFNldEhlYWRlcnMpCiAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0S2V5MyhTdHJpbmcgdmFs
dWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNl
dEhlYWRlcnMpLT5zZXRTdHJpbmcoInJlcXVlc3RLZXkzIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRf
QU5EX0NSRUFURShTdGVwU2V0UmVxdWVzdEtleTMsIFdlYlNvY2tldFJlcXVlc3QpCgogICAgICAg
IH07CgogICAgICAgIGNsYXNzIFdlYlNvY2tldFJlc3BvbnNlIDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxXZWJTb2NrZXRSZXNwb25z
ZT4gcmVzdWx0ID0gV2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAg
ICAuc2V0U3RhdHVzKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikK
ICAgICAgICAgICAgICogICAgIC5zZXRIZWFkZXJzKC4uLikKICAgICAgICAgICAgICogICAgIC5z
ZXRDaGFsbGVuZ2VSZXNwb25zZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xh
c3MgU3RlcFNldFN0YXR1czsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFN0YXR1c1RleHQ7CiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRIZWFkZXJzOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
Q2hhbGxlbmdlUmVzcG9uc2U7CgogICAgICAgICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRD
aGFsbGVuZ2VSZXNwb25zZSwgV2ViU29ja2V0UmVzcG9uc2UpCiAgICAgICAgICAgICAgICBzZXRD
aGFsbGVuZ2VSZXNwb25zZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTEFTVF9T
VEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJpbmcoImNoYWxsZW5nZVJlc3BvbnNlIiwgdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oV2ViU29ja2V0UmVzcG9uc2Up
CiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRIZWFkZXJzLCBTdGVwU2V0Q2hhbGxlbmdl
UmVzcG9uc2UpCiAgICAgICAgICAgICAgICBzZXRIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lO
KFN0ZXBTZXRDaGFsbGVuZ2VSZXNwb25zZSktPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNU
RVBfQlJJREdFKFN0ZXBTZXRTdGF0dXNUZXh0LCBTdGVwU2V0SGVhZGVycykKICAgICAgICAgICAg
ICAgIHNldFN0YXR1c1RleHQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9M
QVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRIZWFkZXJzKS0+c2V0U3RyaW5nKCJzdGF0dXNU
ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFN0YXR1cywgU3RlcFNldFN0YXR1c1RleHQp
CiAgICAgICAgICAgICAgICBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAg
ICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTdGF0dXNUZXh0KS0+c2V0TnVt
YmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICAgICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRTdGF0
dXMsIFdlYlNvY2tldFJlc3BvbnNlKQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDYWNoZWRS
ZXNvdXJjZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAg
ICAgKiBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+IHJlc3VsdCA9IENhY2hlZFJlc291cmNlOjpjcmVh
dGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICAgICAqICAgICAu
c2V0VHlwZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0UmVzcG9uc2UoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldEJvZHlTaXplKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAg
ICBjbGFzcyBTdGVwU2V0VXJsOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VHlwZTsKICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldFJlc3BvbnNlOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Qm9k
eVNpemU7CgogICAgICAgICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRCb2R5U2l6ZSwgQ2Fj
aGVkUmVzb3VyY2UpCiAgICAgICAgICAgICAgICBzZXRCb2R5U2l6ZShkb3VibGUgdmFsdWUpCiAg
ICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXROdW1iZXIoImJv
ZHlTaXplIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oQ2Fj
aGVkUmVzb3VyY2UpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRSZXNwb25zZSwgU3Rl
cFNldEJvZHlTaXplKQogICAgICAgICAgICAgICAgc2V0UmVzcG9uc2UoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0Rf
QkVHSU4oU3RlcFNldEJvZHlTaXplKS0+c2V0T2JqZWN0KCJyZXNwb25zZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNURVBf
QlJJREdFKFN0ZXBTZXRUeXBlLCBTdGVwU2V0UmVzcG9uc2UpCiAgICAgICAgICAgICAgICBzZXRU
eXBlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhP
RF9CRUdJTihTdGVwU2V0UmVzcG9uc2UpLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JS
SURHRShTdGVwU2V0VXJsLCBTdGVwU2V0VHlwZSkKICAgICAgICAgICAgICAgIHNldFVybChTdHJp
bmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4o
U3RlcFNldFR5cGUpLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9D
UkVBVEUoU3RlcFNldFVybCwgQ2FjaGVkUmVzb3VyY2UpCgogICAgICAgIH07CgogICAgICAgIGNs
YXNzIEluaXRpYXRvciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICAgICAgICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJbml0aWF0b3I6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAg
ICAgICAgY2xhc3MgU3RlcFNldFR5cGU7CgogICAgICAgICAgICBMQVNUX1NURVBfUFJPTE9HKFN0
ZXBTZXRUeXBlLCBJbml0aWF0b3IpCiAgICAgICAgICAgICAgICBzZXRUeXBlKFN0cmluZyB2YWx1
ZSkKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldFN0cmlu
ZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKElu
aXRpYXRvcikKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0VHlw
ZSwgSW5pdGlhdG9yKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0U3RhY2tUcmFjZShQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0TGluZU51bWJlcihkb3VibGUg
dmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE51bWJlcigibGlu
ZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgIH0KICAgIG5h
bWVzcGFjZSBEYXRhYmFzZSB7CiAgICAgICAgY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPERhdGFiYXNlPiBy
ZXN1bHQgPSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRJZCguLi4p
CiAgICAgICAgICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAgICAgICAgICogICAgIC5z
ZXROYW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRWZXJzaW9uKC4uLik7CiAgICAgICAg
ICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0SWQ7CiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXREb21haW47CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROYW1lOwogICAgICAgICAgICBj
bGFzcyBTdGVwU2V0VmVyc2lvbjsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNl
dFZlcnNpb24sIERhdGFiYXNlKQogICAgICAgICAgICAgICAgc2V0VmVyc2lvbihTdHJpbmcgdmFs
dWUpCiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJp
bmcoInZlcnNpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVS
TihEYXRhYmFzZSkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldE5hbWUsIFN0ZXBTZXRW
ZXJzaW9uKQogICAgICAgICAgICAgICAgc2V0TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFZlcnNpb24pLT5zZXRT
dHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0RG9tYWluLCBTdGVwU2V0TmFt
ZSkKICAgICAgICAgICAgICAgIHNldERvbWFpbihTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAg
ICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldE5hbWUpLT5zZXRTdHJpbmco
ImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVS
TigpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRJZCwgU3RlcFNldERvbWFpbikKICAg
ICAgICAgICAgICAgIHNldElkKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1Rf
TEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0RG9tYWluKS0+c2V0U3RyaW5nKCJpZCIsIHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAg
ICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldElkLCBEYXRhYmFzZSkKCiAgICAg
ICAgfTsKCiAgICB9CiAgICBuYW1lc3BhY2UgRE9NU3RvcmFnZSB7CiAgICAgICAgY2xhc3MgRW50
cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAg
IC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICog
UmVmUHRyPEVudHJ5PiByZXN1bHQgPSBFbnRyeTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAg
IC5zZXRIb3N0KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRJc0xvY2FsU3RvcmFnZSguLi4p
CiAgICAgICAgICAgICAqICAgICAuc2V0SWQoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRIb3N0OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0SXNMb2NhbFN0
b3JhZ2U7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRJZDsKCiAgICAgICAgICAgIExBU1RfU1RF
UF9QUk9MT0coU3RlcFNldElkLCBFbnRyeSkKICAgICAgICAgICAgICAgIHNldElkKGRvdWJsZSB2
YWx1ZSkKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldE51
bWJlcigiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihF
bnRyeSkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldElzTG9jYWxTdG9yYWdlLCBTdGVw
U2V0SWQpCiAgICAgICAgICAgICAgICBzZXRJc0xvY2FsU3RvcmFnZShib29sIHZhbHVlKQogICAg
ICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRJZCktPnNl
dEJvb2xlYW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5P
VF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldEhvc3Qs
IFN0ZXBTZXRJc0xvY2FsU3RvcmFnZSkKICAgICAgICAgICAgICAgIHNldEhvc3QoU3RyaW5nIHZh
bHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBT
ZXRJc0xvY2FsU3RvcmFnZSktPnNldFN0cmluZygiaG9zdCIsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5E
X0FORF9DUkVBVEUoU3RlcFNldEhvc3QsIEVudHJ5KQoKICAgICAgICB9OwoKICAgIH0KICAgIG5h
bWVzcGFjZSBBcHBsaWNhdGlvbkNhY2hlIHsKICAgICAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAg
ICAgICogUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzdWx0ID0gQXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4p
CiAgICAgICAgICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0
VHlwZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFVybDsK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNpemU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRU
eXBlOwoKICAgICAgICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0VHlwZSwgQXBwbGljYXRp
b25DYWNoZVJlc291cmNlKQogICAgICAgICAgICAgICAgc2V0VHlwZShTdHJpbmcgdmFsdWUpCiAg
ICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJpbmcoInR5
cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTaXplLCBT
dGVwU2V0VHlwZSkKICAgICAgICAgICAgICAgIHNldFNpemUoaW50IHZhbHVlKQogICAgICAgICAg
ICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRUeXBlKS0+c2V0TnVt
YmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVU
VVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFVybCwgU3RlcFNldFNpemUpCiAg
ICAgICAgICAgICAgICBzZXRVcmwoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5P
VF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTaXplKS0+c2V0U3RyaW5nKCJ1cmwiLCB2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAg
ICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRVcmwsIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZSkKCiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoK
ICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQ
dHI8QXBwbGljYXRpb25DYWNoZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCkK
ICAgICAgICAgICAgICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgICAgICAgICAqICAg
ICAuc2V0U2l6ZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Q3JlYXRpb25UaW1lKC4uLikK
ICAgICAgICAgICAgICogICAgIC5zZXRVcGRhdGVUaW1lKC4uLikKICAgICAgICAgICAgICogICAg
IC5zZXRSZXNvdXJjZXMoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0
ZXBTZXRNYW5pZmVzdFVSTDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNpemU7CiAgICAgICAg
ICAgIGNsYXNzIFN0ZXBTZXRDcmVhdGlvblRpbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRV
cGRhdGVUaW1lOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UmVzb3VyY2VzOwoKICAgICAgICAg
ICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0UmVzb3VyY2VzLCBBcHBsaWNhdGlvbkNhY2hlKQog
ICAgICAgICAgICAgICAgc2V0UmVzb3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRBcnJheSgi
cmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4o
QXBwbGljYXRpb25DYWNoZSkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFVwZGF0ZVRp
bWUsIFN0ZXBTZXRSZXNvdXJjZXMpCiAgICAgICAgICAgICAgICBzZXRVcGRhdGVUaW1lKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihT
dGVwU2V0UmVzb3VyY2VzKS0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklE
R0UoU3RlcFNldENyZWF0aW9uVGltZSwgU3RlcFNldFVwZGF0ZVRpbWUpCiAgICAgICAgICAgICAg
ICBzZXRDcmVhdGlvblRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9M
QVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRVcGRhdGVUaW1lKS0+c2V0TnVtYmVyKCJjcmVh
dGlvblRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRV
Uk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0U2l6ZSwgU3RlcFNldENyZWF0aW9u
VGltZSkKICAgICAgICAgICAgICAgIHNldFNpemUoZG91YmxlIHZhbHVlKQogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRDcmVhdGlvblRpbWUpLT5z
ZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RF
UF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0TWFuaWZlc3RVUkwsIFN0
ZXBTZXRTaXplKQogICAgICAgICAgICAgICAgc2V0TWFuaWZlc3RVUkwoU3RyaW5nIHZhbHVlKQog
ICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTaXpl
KS0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBO
T1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVB
VEUoU3RlcFNldE1hbmlmZXN0VVJMLCBBcHBsaWNhdGlvbkNhY2hlKQoKICAgICAgICB9OwoKICAg
ICAgICBjbGFzcyBGcmFtZVdpdGhNYW5pZmVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+IHJlc3Vs
dCA9IEZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldEZy
YW1lSWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJMKC4uLikKICAgICAg
ICAgICAgICogICAgIC5zZXRTdGF0dXMoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRGcmFtZUlkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWFuaWZlc3RV
Ukw7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdGF0dXM7CgogICAgICAgICAgICBMQVNUX1NU
RVBfUFJPTE9HKFN0ZXBTZXRTdGF0dXMsIEZyYW1lV2l0aE1hbmlmZXN0KQogICAgICAgICAgICAg
ICAgc2V0U3RhdHVzKGludCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVU
SE9EX0JFR0lOKCktPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgIExBU1RfU1RFUF9SRVRVUk4oRnJhbWVXaXRoTWFuaWZlc3QpCiAgICAgICAgICAgIFNURVBf
QlJJREdFKFN0ZXBTZXRNYW5pZmVzdFVSTCwgU3RlcFNldFN0YXR1cykKICAgICAgICAgICAgICAg
IHNldE1hbmlmZXN0VVJMKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFT
VF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U3RhdHVzKS0+c2V0U3RyaW5nKCJtYW5pZmVzdFVS
TCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAg
ICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRGcmFtZUlkLCBTdGVwU2V0TWFuaWZlc3RVUkwp
CiAgICAgICAgICAgICAgICBzZXRGcmFtZUlkKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0TWFuaWZlc3RVUkwpLT5zZXRT
dHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RF
UF9SRVRVUk4oKQogICAgICAgICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRG
cmFtZUlkLCBGcmFtZVdpdGhNYW5pZmVzdCkKCiAgICAgICAgfTsKCiAgICB9CiAgICBuYW1lc3Bh
Y2UgRE9NIHsKICAgICAgICBjbGFzcyBOb2RlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAg
ICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBOb2RlOjpjcmVh
dGUoKQogICAgICAgICAgICAgKiAgICAgLnNldE5vZGVJZCguLi4pCiAgICAgICAgICAgICAqICAg
ICAuc2V0Tm9kZVR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE5vZGVOYW1lKC4uLikK
ICAgICAgICAgICAgICogICAgIC5zZXRMb2NhbE5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAg
LnNldE5vZGVWYWx1ZSguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldE5vZGVJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5vZGVUeXBlOwogICAgICAgICAg
ICBjbGFzcyBTdGVwU2V0Tm9kZU5hbWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRMb2NhbE5h
bWU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXROb2RlVmFsdWU7CgogICAgICAgICAgICBMQVNU
X1NURVBfUFJPTE9HKFN0ZXBTZXROb2RlVmFsdWUsIE5vZGUpCiAgICAgICAgICAgICAgICBzZXRO
b2RlVmFsdWUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oKS0+c2V0U3RyaW5nKCJub2RlVmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgTEFTVF9TVEVQX1JFVFVSTihOb2RlKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVw
U2V0TG9jYWxOYW1lLCBTdGVwU2V0Tm9kZVZhbHVlKQogICAgICAgICAgICAgICAgc2V0TG9jYWxO
YW1lKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhP
RF9CRUdJTihTdGVwU2V0Tm9kZVZhbHVlKS0+c2V0U3RyaW5nKCJsb2NhbE5hbWUiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBT
VEVQX0JSSURHRShTdGVwU2V0Tm9kZU5hbWUsIFN0ZXBTZXRMb2NhbE5hbWUpCiAgICAgICAgICAg
ICAgICBzZXROb2RlTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xB
U1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldExvY2FsTmFtZSktPnNldFN0cmluZygibm9kZU5h
bWUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQog
ICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0Tm9kZVR5cGUsIFN0ZXBTZXROb2RlTmFtZSkK
ICAgICAgICAgICAgICAgIHNldE5vZGVUeXBlKGludCB2YWx1ZSkKICAgICAgICAgICAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0Tm9kZU5hbWUpLT5zZXROdW1iZXIo
Im5vZGVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVU
VVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldE5vZGVJZCwgU3RlcFNldE5vZGVU
eXBlKQogICAgICAgICAgICAgICAgc2V0Tm9kZUlkKGludCB2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0Tm9kZVR5cGUpLT5zZXROdW1i
ZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JF
VFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldE5vZGVJ
ZCwgTm9kZSkKCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldENoaWxkTm9kZUNvdW50KGludCB2
YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjaGls
ZE5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZv
aWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0QXR0cmlidXRlcyhQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0QXJyYXkoImF0dHJpYnV0ZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldERvY3VtZW50VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygiZG9jdW1lbnRV
UkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFB1
YmxpY0lkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IHRoaXMtPnNldFN0cmluZygicHVibGljSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgIGlubGluZSB2b2lkIHNldFN5c3RlbUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygic3lzdGVtSWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldEludGVybmFsU3Vi
c2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRo
aXMtPnNldFN0cmluZygiaW50ZXJuYWxTdWJzZXQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlubGluZSB2b2lkIHNldFhtbFZlcnNpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ4bWxWZXJzaW9u
IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXROYW1l
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMt
PnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5s
aW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCiAgICAgICAg
fTsKCiAgICAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gcmVzdWx0
ID0gRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRUeXBlKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRVc2VDYXB0dXJlKC4uLikKICAgICAgICAgICAgICog
ICAgIC5zZXRJc0F0dHJpYnV0ZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0Tm9kZUlkKC4u
LikKICAgICAgICAgICAgICogICAgIC5zZXRIYW5kbGVyQm9keSguLi4pOwogICAgICAgICAgICAg
Ki8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFR5cGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRVc2VDYXB0dXJlOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0SXNBdHRyaWJ1dGU7CiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXROb2RlSWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRIYW5k
bGVyQm9keTsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldEhhbmRsZXJCb2R5
LCBFdmVudExpc3RlbmVyKQogICAgICAgICAgICAgICAgc2V0SGFuZGxlckJvZHkoU3RyaW5nIHZh
bHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0U3Ry
aW5nKCJoYW5kbGVyQm9keSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBf
UkVUVVJOKEV2ZW50TGlzdGVuZXIpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXROb2Rl
SWQsIFN0ZXBTZXRIYW5kbGVyQm9keSkKICAgICAgICAgICAgICAgIHNldE5vZGVJZChpbnQgdmFs
dWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNl
dEhhbmRsZXJCb2R5KS0+c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVw
U2V0SXNBdHRyaWJ1dGUsIFN0ZXBTZXROb2RlSWQpCiAgICAgICAgICAgICAgICBzZXRJc0F0dHJp
YnV0ZShib29sIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9E
X0JFR0lOKFN0ZXBTZXROb2RlSWQpLT5zZXRCb29sZWFuKCJpc0F0dHJpYnV0ZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNU
RVBfQlJJREdFKFN0ZXBTZXRVc2VDYXB0dXJlLCBTdGVwU2V0SXNBdHRyaWJ1dGUpCiAgICAgICAg
ICAgICAgICBzZXRVc2VDYXB0dXJlKGJvb2wgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9U
X0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldElzQXR0cmlidXRlKS0+c2V0Qm9vbGVhbigi
dXNlQ2FwdHVyZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JF
VFVSTigpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRUeXBlLCBTdGVwU2V0VXNlQ2Fw
dHVyZSkKICAgICAgICAgICAgICAgIHNldFR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRVc2VDYXB0dXJlKS0+c2V0
U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBf
UkVUVVJOKCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0VHlw
ZSwgRXZlbnRMaXN0ZW5lcikKCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldExvY2F0aW9uKFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgdGhpcy0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgfQoK
ICAgICAgICB9OwoKICAgICAgICBjbGFzcyBSR0JBIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxSR0JBPiByZXN1bHQgPSBSR0JBOjpj
cmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFIoLi4uKQogICAgICAgICAgICAgKiAgICAg
LnNldEcoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldEIoLi4uKTsKICAgICAgICAgICAgICov
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RzsK
ICAgICAgICAgICAgY2xhc3MgU3RlcFNldEI7CgogICAgICAgICAgICBMQVNUX1NURVBfUFJPTE9H
KFN0ZXBTZXRCLCBSR0JBKQogICAgICAgICAgICAgICAgc2V0QihpbnQgdmFsdWUpCiAgICAgICAg
ICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXROdW1iZXIoImIiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihSR0JBKQogICAgICAgICAg
ICBTVEVQX0JSSURHRShTdGVwU2V0RywgU3RlcFNldEIpCiAgICAgICAgICAgICAgICBzZXRHKGlu
dCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihT
dGVwU2V0QiktPnNldE51bWJlcigiZyIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1Rf
TEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRSLCBTdGVw
U2V0RykKICAgICAgICAgICAgICAgIHNldFIoaW50IHZhbHVlKQogICAgICAgICAgICAgICAgICAg
IE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRHKS0+c2V0TnVtYmVyKCJyIiwgdmFs
dWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAg
ICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0UiwgUkdCQSkKCiAgICAgICAgICAg
IGlubGluZSB2b2lkIHNldEEoZG91YmxlIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXROdW1iZXIoImEiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
fTsKCiAgICAgICAgY2xhc3MgSGlnaGxpZ2h0Q29uZmlnIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxIaWdobGlnaHRDb25maWc+IHJl
c3VsdCA9IEhpZ2hsaWdodENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAqLwogICAgICAg
ICAgICBpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiBjcmVhdGUoKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWYg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuIChyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGlnaHRDb25maWc+Kj4oJnJlZikpLT5yZWxlYXNlKCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0U2hvd0luZm8oYm9vbCB2
YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigic2hv
d0luZm8iLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNl
dENvbnRlbnRDb2xvcihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgiY29udGVudENvbG9yIiwgdmFs
dWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRQYWRkaW5nQ29s
b3IoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoInBhZGRpbmdDb2xvciIsIHZhbHVlKTsKICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Qm9yZGVyQ29sb3IoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0
aGlzLT5zZXRPYmplY3QoImJvcmRlckNvbG9yIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRNYXJnaW5Db2xvcihQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVj
dCgibWFyZ2luQ29sb3IiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICB9
CiAgICBuYW1lc3BhY2UgQ1NTIHsKICAgICAgICBjbGFzcyBDU1NTdHlsZUlkIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxDU1NTdHls
ZUlkPiByZXN1bHQgPSBDU1NTdHlsZUlkOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNl
dFN0eWxlU2hlZXRJZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwog
ICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFN0eWxlU2hlZXRJZDsKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldE9yZGluYWw7CgogICAgICAgICAgICBMQVNUX1NURVBfUFJP
TE9HKFN0ZXBTZXRPcmRpbmFsLCBDU1NTdHlsZUlkKQogICAgICAgICAgICAgICAgc2V0T3JkaW5h
bChpbnQgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigp
LT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9T
VEVQX1JFVFVSTihDU1NTdHlsZUlkKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0U3R5
bGVTaGVldElkLCBTdGVwU2V0T3JkaW5hbCkKICAgICAgICAgICAgICAgIHNldFN0eWxlU2hlZXRJ
ZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0Rf
QkVHSU4oU3RlcFNldE9yZGluYWwpLT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJ
UlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFN0eWxlU2hlZXRJZCwgQ1NTU3R5bGVJZCkK
CiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgQ1NTUnVsZUlkIDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxDU1NSdWxlSWQ+IHJlc3Vs
dCA9IENTU1J1bGVJZDo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRTdHlsZVNoZWV0
SWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAgICAgICAg
ICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZVNoZWV0SWQ7CiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRPcmRpbmFsOwoKICAgICAgICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0
T3JkaW5hbCwgQ1NTUnVsZUlkKQogICAgICAgICAgICAgICAgc2V0T3JkaW5hbChpbnQgdmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXROdW1iZXIo
Im9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihD
U1NSdWxlSWQpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRTdHlsZVNoZWV0SWQsIFN0
ZXBTZXRPcmRpbmFsKQogICAgICAgICAgICAgICAgc2V0U3R5bGVTaGVldElkKFN0cmluZyB2YWx1
ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0
T3JkaW5hbCktPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRf
QU5EX0NSRUFURShTdGVwU2V0U3R5bGVTaGVldElkLCBDU1NSdWxlSWQpCgogICAgICAgIH07Cgog
ICAgICAgIGNsYXNzIENTU05vZGVTdHlsZXMgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAg
ICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENTU05vZGVTdHlsZXM+IHJlc3VsdCA9IENT
U05vZGVTdHlsZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0Q29tcHV0ZWRTdHls
ZSguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0TWF0Y2hlZENTU1J1bGVzKC4uLikKICAgICAg
ICAgICAgICogICAgIC5zZXRTdHlsZUF0dHJpYnV0ZXMoLi4uKQogICAgICAgICAgICAgKiAgICAg
LnNldFBzZXVkb0VsZW1lbnRzKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRJbmhlcml0ZWQo
Li4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRDb21wdXRlZFN0
eWxlOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0TWF0Y2hlZENTU1J1bGVzOwogICAgICAgICAg
ICBjbGFzcyBTdGVwU2V0U3R5bGVBdHRyaWJ1dGVzOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0
UHNldWRvRWxlbWVudHM7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRJbmhlcml0ZWQ7CgogICAg
ICAgICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRJbmhlcml0ZWQsIENTU05vZGVTdHlsZXMp
CiAgICAgICAgICAgICAgICBzZXRJbmhlcml0ZWQoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldEFycmF5
KCJpbmhlcml0ZWQiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVS
TihDU1NOb2RlU3R5bGVzKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0UHNldWRvRWxl
bWVudHMsIFN0ZXBTZXRJbmhlcml0ZWQpCiAgICAgICAgICAgICAgICBzZXRQc2V1ZG9FbGVtZW50
cyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9M
QVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRJbmhlcml0ZWQpLT5zZXRBcnJheSgicHNldWRv
RWxlbWVudHMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRV
Uk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0U3R5bGVBdHRyaWJ1dGVzLCBTdGVw
U2V0UHNldWRvRWxlbWVudHMpCiAgICAgICAgICAgICAgICBzZXRTdHlsZUF0dHJpYnV0ZXMoUmVm
UHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9T
VEVQX01FVEhPRF9CRUdJTihTdGVwU2V0UHNldWRvRWxlbWVudHMpLT5zZXRBcnJheSgic3R5bGVB
dHRyaWJ1dGVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVU
VVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldE1hdGNoZWRDU1NSdWxlcywgU3Rl
cFNldFN0eWxlQXR0cmlidXRlcykKICAgICAgICAgICAgICAgIHNldE1hdGNoZWRDU1NSdWxlcyhS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNU
X1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTdHlsZUF0dHJpYnV0ZXMpLT5zZXRBcnJheSgibWF0
Y2hlZENTU1J1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBf
UkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldENvbXB1dGVkU3R5bGUsIFN0
ZXBTZXRNYXRjaGVkQ1NTUnVsZXMpCiAgICAgICAgICAgICAgICBzZXRDb21wdXRlZFN0eWxlKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNU
X1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXMpLT5zZXRPYmplY3QoImNv
bXB1dGVkU3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICAgICAgICBGSVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRDb21w
dXRlZFN0eWxlLCBDU1NOb2RlU3R5bGVzKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0SW5s
aW5lU3R5bGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgdmFsdWUpOwog
ICAgICAgICAgICB9CgogICAgICAgIH07CgogICAgICAgIGNsYXNzIFBzZXVkb0lkUnVsZXMgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAg
ICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRy
PFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgICAg
ICAgICAqICAgICAuc2V0UHNldWRvSWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFJ1bGVz
KC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UHNldWRvSWQ7
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSdWxlczsKCiAgICAgICAgICAgIExBU1RfU1RFUF9Q
Uk9MT0coU3RlcFNldFJ1bGVzLCBQc2V1ZG9JZFJ1bGVzKQogICAgICAgICAgICAgICAgc2V0UnVs
ZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBMQVNU
X1NURVBfTUVUSE9EX0JFR0lOKCktPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICBMQVNUX1NURVBfUkVUVVJOKFBzZXVkb0lkUnVsZXMpCiAgICAgICAgICAgIFNU
RVBfQlJJREdFKFN0ZXBTZXRQc2V1ZG9JZCwgU3RlcFNldFJ1bGVzKQogICAgICAgICAgICAgICAg
c2V0UHNldWRvSWQoaW50IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBf
TUVUSE9EX0JFR0lOKFN0ZXBTZXRSdWxlcyktPnNldE51bWJlcigicHNldWRvSWQiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBG
SVJTVF9TVEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRQc2V1ZG9JZCwgUHNldWRvSWRSdWxlcykK
CiAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRyeSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8SW5oZXJp
dGVkU3R5bGVFbnRyeT4gcmVzdWx0ID0gSW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICogICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoLi4uKTsKICAgICAgICAgICAgICov
CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXM7CgogICAgICAgICAgICBM
QVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXMsIEluaGVyaXRlZFN0eWxlRW50
cnkpCiAgICAgICAgICAgICAgICBzZXRNYXRjaGVkQ1NTUnVsZXMoUmVmUHRyPEluc3BlY3RvckFy
cmF5PiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCkt
PnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
TEFTVF9TVEVQX1JFVFVSTihJbmhlcml0ZWRTdHlsZUVudHJ5KQogICAgICAgICAgICBGSVJTVF9T
VEVQX0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRNYXRjaGVkQ1NTUnVsZXMsIEluaGVyaXRlZFN0eWxl
RW50cnkpCgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRo
aXMtPnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgfTsKCiAgICAgICAgY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGUgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENTU1N0eWxlQXR0cmli
dXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICog
ICAgIC5zZXROYW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTdHlsZSguLi4pOwogICAg
ICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldE5hbWU7CiAgICAgICAgICAgIGNs
YXNzIFN0ZXBTZXRTdHlsZTsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFN0
eWxlLCBDU1NTdHlsZUF0dHJpYnV0ZSkKICAgICAgICAgICAgICAgIHNldFN0eWxlKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oKS0+c2V0T2JqZWN0KCJzdHlsZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAg
ICBMQVNUX1NURVBfUkVUVVJOKENTU1N0eWxlQXR0cmlidXRlKQogICAgICAgICAgICBTVEVQX0JS
SURHRShTdGVwU2V0TmFtZSwgU3RlcFNldFN0eWxlKQogICAgICAgICAgICAgICAgc2V0TmFtZShT
dHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVH
SU4oU3RlcFNldFN0eWxlKS0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRf
QU5EX0NSRUFURShTdGVwU2V0TmFtZSwgQ1NTU3R5bGVBdHRyaWJ1dGUpCgogICAgICAgIH07Cgog
ICAgICAgIGNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICogUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+
IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRIZWFkZXI6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAg
ICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRTb3VyY2VVUkwo
Li4uKQogICAgICAgICAgICAgKiAgICAgLnNldFRpdGxlKC4uLikKICAgICAgICAgICAgICogICAg
IC5zZXREaXNhYmxlZCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldFN0eWxlU2hlZXRJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNvdXJjZVVSTDsKICAg
ICAgICAgICAgY2xhc3MgU3RlcFNldFRpdGxlOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RGlz
YWJsZWQ7CgogICAgICAgICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXREaXNhYmxlZCwgQ1NT
U3R5bGVTaGVldEhlYWRlcikKICAgICAgICAgICAgICAgIHNldERpc2FibGVkKGJvb2wgdmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRCb29sZWFu
KCJkaXNhYmxlZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfUkVUVVJO
KENTU1N0eWxlU2hlZXRIZWFkZXIpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBTZXRUaXRs
ZSwgU3RlcFNldERpc2FibGVkKQogICAgICAgICAgICAgICAgc2V0VGl0bGUoU3RyaW5nIHZhbHVl
KQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRE
aXNhYmxlZCktPnNldFN0cmluZygidGl0bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0U291
cmNlVVJMLCBTdGVwU2V0VGl0bGUpCiAgICAgICAgICAgICAgICBzZXRTb3VyY2VVUkwoU3RyaW5n
IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0
ZXBTZXRUaXRsZSktPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3Rl
cFNldFN0eWxlU2hlZXRJZCwgU3RlcFNldFNvdXJjZVVSTCkKICAgICAgICAgICAgICAgIHNldFN0
eWxlU2hlZXRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RF
UF9NRVRIT0RfQkVHSU4oU3RlcFNldFNvdXJjZVVSTCktPnNldFN0cmluZygic3R5bGVTaGVldElk
IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAg
ICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0U3R5bGVTaGVldElkLCBD
U1NTdHlsZVNoZWV0SGVhZGVyKQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NTdHlsZVNo
ZWV0Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAg
ICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5
OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAg
ICAgICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAg
IGNsYXNzIFN0ZXBTZXRTdHlsZVNoZWV0SWQ7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRSdWxl
czsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFJ1bGVzLCBDU1NTdHlsZVNo
ZWV0Qm9keSkKICAgICAgICAgICAgICAgIHNldFJ1bGVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRB
cnJheSgicnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVS
TihDU1NTdHlsZVNoZWV0Qm9keSkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFN0eWxl
U2hlZXRJZCwgU3RlcFNldFJ1bGVzKQogICAgICAgICAgICAgICAgc2V0U3R5bGVTaGVldElkKFN0
cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJ
TihTdGVwU2V0UnVsZXMpLT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NU
RVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFN0eWxlU2hlZXRJZCwgQ1NTU3R5bGVTaGVldEJvZHkp
CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVl
KTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NSdWxlIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAg
ICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxD
U1NSdWxlPiByZXN1bHQgPSBDU1NSdWxlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNl
dFJ1bGVJZCguLi4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2VsZWN0b3JUZXh0KC4uLikKICAg
ICAgICAgICAgICogICAgIC5zZXRTb3VyY2VMaW5lKC4uLikKICAgICAgICAgICAgICogICAgIC5z
ZXRPcmlnaW4oLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgICAg
ICAgICAqLwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0UnVsZUlkOwogICAgICAgICAgICBjbGFz
cyBTdGVwU2V0U2VsZWN0b3JUZXh0OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0U291cmNlTGlu
ZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldE9yaWdpbjsKICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldFN0eWxlOwoKICAgICAgICAgICAgTEFTVF9TVEVQX1BST0xPRyhTdGVwU2V0U3R5bGUsIENT
U1J1bGUpCiAgICAgICAgICAgICAgICBzZXRTdHlsZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICAgICAgICAgICAgICBMQVNUX1NURVBfTUVUSE9EX0JFR0lOKCktPnNldE9i
amVjdCgic3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVS
TihDU1NSdWxlKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0T3JpZ2luLCBTdGVwU2V0
U3R5bGUpCiAgICAgICAgICAgICAgICBzZXRPcmlnaW4oU3RyaW5nIHZhbHVlKQogICAgICAgICAg
ICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTdHlsZSktPnNldFN0
cmluZygib3JpZ2luIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBf
UkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNvdXJjZUxpbmUsIFN0ZXBT
ZXRPcmlnaW4pCiAgICAgICAgICAgICAgICBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgICAg
ICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0T3JpZ2luKS0+
c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9M
QVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFNlbGVjdG9y
VGV4dCwgU3RlcFNldFNvdXJjZUxpbmUpCiAgICAgICAgICAgICAgICBzZXRTZWxlY3RvclRleHQo
U3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JF
R0lOKFN0ZXBTZXRTb3VyY2VMaW5lKS0+c2V0U3RyaW5nKCJzZWxlY3RvclRleHQiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBT
VEVQX0JSSURHRShTdGVwU2V0UnVsZUlkLCBTdGVwU2V0U2VsZWN0b3JUZXh0KQogICAgICAgICAg
ICAgICAgc2V0UnVsZUlkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAg
ICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRTZWxlY3RvclRleHQp
LT5zZXRPYmplY3QoInJ1bGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFT
VF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3Rl
cFNldFJ1bGVJZCwgQ1NTUnVsZSkKCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFNvdXJjZVVS
TChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0U2VsZWN0b3JSYW5nZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldE9iamVjdCgi
c2VsZWN0b3JSYW5nZSIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5l
IHZvaWQgc2V0TWVkaWEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRpYSIsIHZhbHVlKTsKICAg
ICAgICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBTb3VyY2VSYW5nZSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAg
ICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8U291
cmNlUmFuZ2U+IHJlc3VsdCA9IFNvdXJjZVJhbmdlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAg
ICAgLnNldFN0YXJ0KC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRFbmQoLi4uKTsKICAgICAg
ICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRTdGFydDsKICAgICAgICAgICAgY2xh
c3MgU3RlcFNldEVuZDsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldEVuZCwg
U291cmNlUmFuZ2UpCiAgICAgICAgICAgICAgICBzZXRFbmQoaW50IHZhbHVlKQogICAgICAgICAg
ICAgICAgICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0TnVtYmVyKCJlbmQiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihTb3VyY2VSYW5nZSkKICAg
ICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFN0YXJ0LCBTdGVwU2V0RW5kKQogICAgICAgICAg
ICAgICAgc2V0U3RhcnQoaW50IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfTUVUSE9EX0JFR0lOKFN0ZXBTZXRFbmQpLT5zZXROdW1iZXIoInN0YXJ0IiwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklS
U1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0U3RhcnQsIFNvdXJjZVJhbmdlKQoKICAgICAg
ICB9OwoKICAgICAgICBjbGFzcyBDU1NTdHlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9IENTU1N0
eWxlOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFN0eWxlSWQoLi4uKQogICAgICAg
ICAgICAgKiAgICAgLnNldENzc1Byb3BlcnRpZXMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dFNob3J0aGFuZEVudHJpZXMoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFdpZHRoKC4uLikK
ICAgICAgICAgICAgICogICAgIC5zZXRIZWlnaHQoLi4uKTsKICAgICAgICAgICAgICovCiAgICAg
ICAgICAgIGNsYXNzIFN0ZXBTZXRTdHlsZUlkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0Q3Nz
UHJvcGVydGllczsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFNob3J0aGFuZEVudHJpZXM7CiAg
ICAgICAgICAgIGNsYXNzIFN0ZXBTZXRXaWR0aDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldEhl
aWdodDsKCiAgICAgICAgICAgIExBU1RfU1RFUF9QUk9MT0coU3RlcFNldEhlaWdodCwgQ1NTU3R5
bGUpCiAgICAgICAgICAgICAgICBzZXRIZWlnaHQoaW50IHZhbHVlKQogICAgICAgICAgICAgICAg
ICAgIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0TnVtYmVyKCJoZWlnaHQiLCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihDU1NTdHlsZSkKICAgICAgICAg
ICAgU1RFUF9CUklER0UoU3RlcFNldFdpZHRoLCBTdGVwU2V0SGVpZ2h0KQogICAgICAgICAgICAg
ICAgc2V0V2lkdGgoaW50IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBf
TUVUSE9EX0JFR0lOKFN0ZXBTZXRIZWlnaHQpLT5zZXROdW1iZXIoIndpZHRoIiwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RF
UF9CUklER0UoU3RlcFNldFNob3J0aGFuZEVudHJpZXMsIFN0ZXBTZXRXaWR0aCkKICAgICAgICAg
ICAgICAgIHNldFNob3J0aGFuZEVudHJpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkK
ICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0V2lk
dGgpLT5zZXRBcnJheSgic2hvcnRoYW5kRW50cmllcyIsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNURVBfQlJJREdFKFN0ZXBT
ZXRDc3NQcm9wZXJ0aWVzLCBTdGVwU2V0U2hvcnRoYW5kRW50cmllcykKICAgICAgICAgICAgICAg
IHNldENzc1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U2hvcnRoYW5kRW50
cmllcyktPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgdmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNl
dFN0eWxlSWQsIFN0ZXBTZXRDc3NQcm9wZXJ0aWVzKQogICAgICAgICAgICAgICAgc2V0U3R5bGVJ
ZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1Rf
TEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0Q3NzUHJvcGVydGllcyktPnNldE9iamVjdCgi
c3R5bGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVS
TigpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUoU3RlcFNldFN0eWxlSWQs
IENTU1N0eWxlKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmco
ImNzc1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lk
IHNldFJhbmdlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgfQoKICAgICAgICB9OwoKICAgICAgICBjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8Q1NTUHJv
cGVydHk+IHJlc3VsdCA9IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAg
LnNldE5hbWUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAgICAg
ICAgICogICAgIC5zZXRTaG9ydGhhbmROYW1lKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAg
ICAgICBjbGFzcyBTdGVwU2V0TmFtZTsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldFZhbHVlOwog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0U2hvcnRoYW5kTmFtZTsKCiAgICAgICAgICAgIExBU1Rf
U1RFUF9QUk9MT0coU3RlcFNldFNob3J0aGFuZE5hbWUsIENTU1Byb3BlcnR5KQogICAgICAgICAg
ICAgICAgc2V0U2hvcnRoYW5kTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
TEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihDU1NQcm9wZXJ0eSkKICAg
ICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldFZhbHVlLCBTdGVwU2V0U2hvcnRoYW5kTmFtZSkK
ICAgICAgICAgICAgICAgIHNldFZhbHVlKFN0cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAg
ICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0U2hvcnRoYW5kTmFtZSktPnNldFN0
cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0TmFtZSwgU3RlcFNldFZhbHVl
KQogICAgICAgICAgICAgICAgc2V0TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAg
ICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldFZhbHVlKS0+c2V0U3RyaW5nKCJu
YW1lIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkK
ICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0TmFtZSwgQ1NTUHJv
cGVydHkpCgogICAgICAgICAgICBpbmxpbmUgdm9pZCBzZXRQcmlvcml0eShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBy
aW9yaXR5IiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlz
LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0UGFyc2VkT2soYm9vbCB2YWx1ZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1ZSk7CiAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFN0YXR1cyhjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN0YXR1
cyIsIHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0UmFu
Z2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdlIiwgdmFsdWUpOwogICAgICAgICAgICB9
CgogICAgICAgIH07CgogICAgICAgIGNsYXNzIENTU01lZGlhIDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxDU1NNZWRpYT4gcmVzdWx0
ID0gQ1NTTWVkaWE6OmNyZWF0ZSgpCiAgICAgICAgICAgICAqICAgICAuc2V0VGV4dCguLi4pOwog
ICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFRleHQ7CgogICAgICAgICAg
ICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRUZXh0LCBDU1NNZWRpYSkKICAgICAgICAgICAgICAg
IHNldFRleHQoU3RyaW5nIHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9NRVRI
T0RfQkVHSU4oKS0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAg
IExBU1RfU1RFUF9SRVRVUk4oQ1NTTWVkaWEpCiAgICAgICAgICAgIEZJUlNUX1NURVBfRU5EX0FO
RF9DUkVBVEUoU3RlcFNldFRleHQsIENTU01lZGlhKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQg
c2V0U291cmNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2
YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlubGluZSB2b2lkIHNldFNvdXJjZUxp
bmUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAg
IH07CgogICAgfQogICAgbmFtZXNwYWNlIFRpbWVsaW5lIHsKICAgICAgICBjbGFzcyBUaW1lbGlu
ZUV2ZW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAg
ICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAg
ICAqIFJlZlB0cjxUaW1lbGluZUV2ZW50PiByZXN1bHQgPSBUaW1lbGluZUV2ZW50OjpjcmVhdGUo
KQogICAgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dERhdGEoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRUeXBl
OwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RGF0YTsKCiAgICAgICAgICAgIExBU1RfU1RFUF9Q
Uk9MT0coU3RlcFNldERhdGEsIFRpbWVsaW5lRXZlbnQpCiAgICAgICAgICAgICAgICBzZXREYXRh
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1Rf
U1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0T2JqZWN0KCJkYXRhIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oVGltZWxpbmVFdmVudCkKICAgICAgICAgICAgU1RF
UF9CUklER0UoU3RlcFNldFR5cGUsIFN0ZXBTZXREYXRhKQogICAgICAgICAgICAgICAgc2V0VHlw
ZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0Rf
QkVHSU4oU3RlcFNldERhdGEpLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBGSVJTVF9TVEVQX0VO
RF9BTkRfQ1JFQVRFKFN0ZXBTZXRUeXBlLCBUaW1lbGluZUV2ZW50KQoKICAgICAgICAgICAgaW5s
aW5lIHZvaWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZh
bHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9OwoKICAgIH0KICAgIG5hbWVzcGFjZSBEZWJ1
Z2dlciB7CiAgICAvKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCiAgICAgICAgdHlwZWRlZiBT
dHJpbmcgQnJlYWtwb2ludElkOwoKICAgIC8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8K
ICAgICAgICB0eXBlZGVmIFN0cmluZyBTY3JpcHRJZDsKCiAgICAvKiBDYWxsIGZyYW1lIGlkZW50
aWZpZXIuICovCiAgICAgICAgdHlwZWRlZiBTdHJpbmcgQ2FsbEZyYW1lSWQ7CgogICAgICAgIGNs
YXNzIExvY2F0aW9uIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
ICAgICAgICAqIFJlZlB0cjxMb2NhdGlvbj4gcmVzdWx0ID0gTG9jYXRpb246OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAqICAgICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dExpbmVOdW1iZXIoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRTY3JpcHRJZDsKICAgICAgICAgICAgY2xhc3MgU3RlcFNldExpbmVOdW1iZXI7CgogICAgICAg
ICAgICBMQVNUX1NURVBfUFJPTE9HKFN0ZXBTZXRMaW5lTnVtYmVyLCBMb2NhdGlvbikKICAgICAg
ICAgICAgICAgIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExB
U1RfU1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgIExBU1RfU1RFUF9SRVRVUk4oTG9jYXRpb24pCiAgICAgICAgICAg
IFNURVBfQlJJREdFKFN0ZXBTZXRTY3JpcHRJZCwgU3RlcFNldExpbmVOdW1iZXIpCiAgICAgICAg
ICAgICAgICBzZXRTY3JpcHRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgTk9U
X0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldExpbmVOdW1iZXIpLT5zZXRTdHJpbmcoInNj
cmlwdElkIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJO
KCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRfQU5EX0NSRUFURShTdGVwU2V0U2NyaXB0SWQs
IExvY2F0aW9uKQoKICAgICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q29sdW1uTnVtYmVyKGludCB2
YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjb2x1
bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKCiAgICAgICAgY2xh
c3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
ICAgICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJlc3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkK
ICAgICAgICAgICAgICogICAgIC5zZXRDYWxsRnJhbWVJZCguLi4pCiAgICAgICAgICAgICAqICAg
ICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAgICAgICAgICogICAgIC5zZXRMb2NhdGlvbigu
Li4pCiAgICAgICAgICAgICAqICAgICAuc2V0U2NvcGVDaGFpbiguLi4pCiAgICAgICAgICAgICAq
ICAgICAuc2V0VGhpcyguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3Rl
cFNldENhbGxGcmFtZUlkOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0RnVuY3Rpb25OYW1lOwog
ICAgICAgICAgICBjbGFzcyBTdGVwU2V0TG9jYXRpb247CiAgICAgICAgICAgIGNsYXNzIFN0ZXBT
ZXRTY29wZUNoYWluOwogICAgICAgICAgICBjbGFzcyBTdGVwU2V0VGhpczsKCiAgICAgICAgICAg
IExBU1RfU1RFUF9QUk9MT0coU3RlcFNldFRoaXMsIENhbGxGcmFtZSkKICAgICAgICAgICAgICAg
IHNldFRoaXMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgICAgICAg
ICAgTEFTVF9TVEVQX01FVEhPRF9CRUdJTigpLT5zZXRPYmplY3QoInRoaXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihDYWxsRnJhbWUpCiAgICAgICAgICAg
IFNURVBfQlJJREdFKFN0ZXBTZXRTY29wZUNoYWluLCBTdGVwU2V0VGhpcykKICAgICAgICAgICAg
ICAgIHNldFNjb3BlQ2hhaW4oUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTihTdGVwU2V0VGhpcyktPnNldEFy
cmF5KCJzY29wZUNoYWluIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NU
RVBfUkVUVVJOKCkKICAgICAgICAgICAgU1RFUF9CUklER0UoU3RlcFNldExvY2F0aW9uLCBTdGVw
U2V0U2NvcGVDaGFpbikKICAgICAgICAgICAgICAgIHNldExvY2F0aW9uKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIE5PVF9MQVNUX1NURVBfTUVUSE9E
X0JFR0lOKFN0ZXBTZXRTY29wZUNoYWluKS0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX1JFVFVSTigpCiAgICAgICAgICAgIFNU
RVBfQlJJREdFKFN0ZXBTZXRGdW5jdGlvbk5hbWUsIFN0ZXBTZXRMb2NhdGlvbikKICAgICAgICAg
ICAgICAgIHNldEZ1bmN0aW9uTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
Tk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNldExvY2F0aW9uKS0+c2V0U3RyaW5nKCJm
dW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9S
RVRVUk4oKQogICAgICAgICAgICBTVEVQX0JSSURHRShTdGVwU2V0Q2FsbEZyYW1lSWQsIFN0ZXBT
ZXRGdW5jdGlvbk5hbWUpCiAgICAgICAgICAgICAgICBzZXRDYWxsRnJhbWVJZChTdHJpbmcgdmFs
dWUpCiAgICAgICAgICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9NRVRIT0RfQkVHSU4oU3RlcFNl
dEZ1bmN0aW9uTmFtZSktPnNldFN0cmluZygiY2FsbEZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgTk9UX0xBU1RfU1RFUF9SRVRVUk4oKQogICAgICAgICAgICBGSVJTVF9TVEVQ
X0VORF9BTkRfQ1JFQVRFKFN0ZXBTZXRDYWxsRnJhbWVJZCwgQ2FsbEZyYW1lKQoKICAgICAgICB9
OwoKICAgICAgICBjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8U2NvcGU+IHJlc3VsdCA9IFNjb3BlOjpjcmVhdGUo
KQogICAgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dE9iamVjdCguLi4pOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2xhc3MgU3RlcFNldFR5
cGU7CiAgICAgICAgICAgIGNsYXNzIFN0ZXBTZXRPYmplY3Q7CgogICAgICAgICAgICBMQVNUX1NU
RVBfUFJPTE9HKFN0ZXBTZXRPYmplY3QsIFNjb3BlKQogICAgICAgICAgICAgICAgc2V0T2JqZWN0
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgIExBU1Rf
U1RFUF9NRVRIT0RfQkVHSU4oKS0+c2V0T2JqZWN0KCJvYmplY3QiLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgTEFTVF9TVEVQX1JFVFVSTihTY29wZSkKICAgICAgICAgICAgU1RFUF9CUklE
R0UoU3RlcFNldFR5cGUsIFN0ZXBTZXRPYmplY3QpCiAgICAgICAgICAgICAgICBzZXRUeXBlKFN0
cmluZyB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJ
TihTdGVwU2V0T2JqZWN0KS0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgIE5PVF9MQVNUX1NURVBfUkVUVVJOKCkKICAgICAgICAgICAgRklSU1RfU1RFUF9FTkRf
QU5EX0NSRUFURShTdGVwU2V0VHlwZSwgU2NvcGUpCgogICAgICAgIH07CgogICAgfQogICAgbmFt
ZXNwYWNlIERPTURlYnVnZ2VyIHsKICAgICAgICBuYW1lc3BhY2UgRE9NQnJlYWtwb2ludFR5cGUg
ewogICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdWJ0cmVlX21vZGlmaWVkID0gInN1YnRy
ZWUtbW9kaWZpZWQiOwogICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBhdHRyaWJ1dGVfbW9k
aWZpZWQgPSAiYXR0cmlidXRlLW1vZGlmaWVkIjsKICAgICAgICAgICAgY29uc3QgY2hhciogY29u
c3Qgbm9kZV9yZW1vdmVkID0gIm5vZGUtcmVtb3ZlZCI7CiAgICAgICAgfQoKICAgIH0KICAgIG5h
bWVzcGFjZSBQcm9maWxlciB7CiAgICB9CiAgICBuYW1lc3BhY2UgV29ya2VyIHsKICAgIH0KI3Vu
ZGVmIEZJUlNUX1NURVBfRU5EX0FORF9DUkVBVEUKI3VuZGVmIE5PVF9MQVNUX1NURVBfUkVUVVJO
CiN1bmRlZiBOT1RfTEFTVF9TVEVQX01FVEhPRF9CRUdJTgojdW5kZWYgU1RFUF9CUklER0UKI3Vu
ZGVmIExBU1RfU1RFUF9SRVRVUk4KI3VuZGVmIExBU1RfU1RFUF9NRVRIT0RfQkVHSU4KI3VuZGVm
IExBU1RfU1RFUF9QUk9MT0cKCn0KCmNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKcHVibGljOgog
ICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CgoKICAgIGNs
YXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9yKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBm
cm9udGVuZFJldXNlZCgpOwogICAgICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CiAgICAgICAgdm9p
ZCBkaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKICAgICAgICB2b2lkIHJlc2V0KCk7CiAgICAgICAg
dm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCk7CiAgICAgICAgdm9pZCBzdGFydFVz
ZXJJbml0aWF0ZWREZWJ1Z2dpbmcoKTsKICAgICAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJv
bnRlbmQoaW50IHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAgICAgICB2b2lk
IGluc3BlY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihpbnQg
aWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKTsKICAgICAgICB2b2lkIGRpZERl
c3Ryb3lXb3JrZXIoaW50IGlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZh
dGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKICAgIH07CgogICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJldHVybiAmbV9p
bnNwZWN0b3I7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2
b2lkIGxvYWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVO
YXZpZ2F0ZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lLCBjb25zdCBTdHJpbmcm
IGxvYWRlcklkKTsKICAgICAgICB2b2lkIGZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFt
ZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgUGFnZSogcGFnZSgpIHsgcmV0dXJuICZtX3BhZ2U7IH0KCiAgICBjbGFzcyBSdW50aW1l
IHsKICAgIHB1YmxpYzoKICAgICAgICBSdW50aW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFJ1bnRpbWUqIHJ1bnRpbWUoKSB7IHJldHVybiAm
bV9ydW50aW1lOyB9CgogICAgY2xhc3MgQ29uc29sZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQ29u
c29sZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgbWVzc2FnZUFkZGVkKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
ZXNzYWdlKTsKICAgICAgICB2b2lkIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50
KTsKICAgICAgICB2b2lkIG1lc3NhZ2VzQ2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBDb25zb2xlKiBjb25zb2xlKCkgeyBy
ZXR1cm4gJm1fY29uc29sZTsgfQoKICAgIGNsYXNzIE5ldHdvcmsgewogICAgcHVibGljOgogICAg
ICAgIE5ldHdvcmsoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KICAgICAgICB2b2lkIHJlcXVlc3RXaWxsQmVTZW50KGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1
ZXN0LCBkb3VibGUgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlh
dG9yLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgICAgdm9pZCByZXF1ZXN0U2Vy
dmVkRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2b2lkIHJlc3Bv
bnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsK
ICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91Ymxl
IHRpbWVzdGFtcCwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICAg
ICAgdm9pZCBsb2FkaW5nRmluaXNoZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0
aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJlcXVl
c3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJv
b2wqIGNvbnN0IGNhbmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5
Q2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91YmxlIHRp
bWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldFdpbGxT
ZW5kSGFuZHNoYWtlUmVxdWVzdChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVz
dGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAgICAgIHZvaWQg
d2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNl
KTsKICAgICAgICB2b2lkIHdlYlNvY2tldENyZWF0ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENsb3NlZChjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsqIG5ldHdvcmsoKSB7
IHJldHVybiAmbV9uZXR3b3JrOyB9CgogICAgY2xhc3MgRGF0YWJhc2UgewogICAgcHVibGljOgog
ICAgICAgIERhdGFiYXNlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGREYXRhYmFzZShQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YWJhc2UpOwogICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQo
aW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbHVtbk5hbWVz
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZXMpOwogICAgICAgIHZvaWQgc3FsVHJh
bnNhY3Rpb25GYWlsZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBzcWxFcnJvcik7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICB9OwoKICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuICZtX2RhdGFiYXNl
OyB9CgogICAgY2xhc3MgRE9NU3RvcmFnZSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NU3RvcmFn
ZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQog
ICAgICAgIHZvaWQgYWRkRE9NU3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3Rv
cmFnZSk7CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwogICAg
ICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01T
dG9yYWdlKiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoKICAgIGNsYXNz
IEFwcGxpY2F0aW9uQ2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAg
ICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7CiAgICAgICAgdm9p
ZCBuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxpbmUpOwogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBBcHBsaWNhdGlvbkNhY2hl
KiBhcHBsaWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1fYXBwbGljYXRpb25jYWNoZTsgfQoKICAg
IGNsYXNzIERPTSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb2N1bWVudFVw
ZGF0ZWQoKTsKICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBub2Rlcyk7CiAgICAgICAgdm9pZCBhdHRyaWJ1dGVNb2RpZmll
ZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwog
ICAgICAgIHZvaWQgYXR0cmlidXRlUmVtb3ZlZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogICAgICAgIHZvaWQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBub2RlSWRzKTsKICAgICAgICB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChp
bnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlckRhdGEpOwogICAgICAgIHZvaWQgY2hp
bGROb2RlQ291bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCk7CiAgICAg
ICAgdm9pZCBjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNO
b2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBub2RlKTsKICAgICAgICB2b2lkIGNo
aWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IG5vZGVJZCk7CiAgICAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERPTSogZG9tKCkg
eyByZXR1cm4gJm1fZG9tOyB9CgogICAgY2xhc3MgQ1NTIHsKICAgIHB1YmxpYzoKICAgICAgICBD
U1MoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0K
ICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAg
Q1NTKiBjc3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1lbGluZSB7CiAgICBw
dWJsaWM6CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHN0YXJ0ZWQoKTsKICAgICAgICB2b2lk
IHN0b3BwZWQoKTsKICAgICAgICB2b2lkIGV2ZW50UmVjb3JkZWQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlY29yZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRl
OgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7CiAgICB9OwoKICAgIFRpbWVsaW5lKiB0aW1lbGluZSgpIHsgcmV0dXJuICZtX3RpbWVs
aW5lOyB9CgogICAgY2xhc3MgRGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjYXBhYmlsaXR5U2V0U2NyaXB0U291cmNlOwogICAgICAgIERlYnVnZ2VyKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBkZWJ1Z2dlcldhc0VuYWJsZWQoKTsKICAgICAgICB2b2lkIGRlYnVnZ2VyV2FzRGlz
YWJsZWQoKTsKICAgICAgICB2b2lkIHNjcmlwdFBhcnNlZChjb25zdCBTdHJpbmcmIHNjcmlwdElk
LCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29sdW1uLCBpbnQg
ZW5kTGluZSwgaW50IGVuZENvbHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250ZW50U2NyaXB0
KTsKICAgICAgICB2b2lkIHNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgICAgdm9pZCBicmVha3BvaW50UmVzb2x2
ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBsb2NhdGlvbik7CiAgICAgICAgdm9pZCBwYXVzZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhKTsKICAgICAgICB2b2lkIHJlc3VtZWQoKTsKICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRGVidWdnZXIqIGRlYnVnZ2Vy
KCkgeyByZXR1cm4gJm1fZGVidWdnZXI7IH0KCiAgICBjbGFzcyBET01EZWJ1Z2dlciB7CiAgICBw
dWJsaWM6CiAgICAgICAgRE9NRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NRGVidWdnZXIqIGRvbWRlYnVnZ2VyKCkgeyByZXR1
cm4gJm1fZG9tZGVidWdnZXI7IH0KCiAgICBjbGFzcyBQcm9maWxlciB7CiAgICBwdWJsaWM6CiAg
ICAgICAgUHJvZmlsZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIHByb2ZpbGVyV2FzRW5hYmxlZCgpOwogICAgICAgIHZv
aWQgcHJvZmlsZXJXYXNEaXNhYmxlZCgpOwogICAgICAgIHZvaWQgYWRkUHJvZmlsZUhlYWRlcihQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyKTsKICAgICAgICB2b2lkIGFkZEhlYXBT
bmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspOwogICAgICAgIHZvaWQg
ZmluaXNoSGVhcFNuYXBzaG90KGludCB1aWQpOwogICAgICAgIHZvaWQgc2V0UmVjb3JkaW5nUHJv
ZmlsZShib29sIGlzUHJvZmlsaW5nKTsKICAgICAgICB2b2lkIHJlc2V0UHJvZmlsZXMoKTsKICAg
ICAgICB2b2lkIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKGludCBkb25lLCBpbnQgdG90YWwp
OwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAg
ICBQcm9maWxlciogcHJvZmlsZXIoKSB7IHJldHVybiAmbV9wcm9maWxlcjsgfQoKICAgIGNsYXNz
IFdvcmtlciB7CiAgICBwdWJsaWM6CiAgICAgICAgV29ya2VyKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCB3b3JrZXJDcmVh
dGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVjdG9yQ29ubmVj
dGVkKTsKICAgICAgICB2b2lkIHdvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKTsKICAgICAg
ICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFdvcmtlciogd29ya2VyKCkgeyByZXR1cm4gJm1f
d29ya2VyOyB9CgoKcHJpdmF0ZToKICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICBJbnNwZWN0b3IgbV9pbnNwZWN0b3I7CiAgICBQYWdl
IG1fcGFnZTsKICAgIFJ1bnRpbWUgbV9ydW50aW1lOwogICAgQ29uc29sZSBtX2NvbnNvbGU7CiAg
ICBOZXR3b3JrIG1fbmV0d29yazsKICAgIERhdGFiYXNlIG1fZGF0YWJhc2U7CiAgICBET01TdG9y
YWdlIG1fZG9tc3RvcmFnZTsKICAgIEFwcGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hl
OwogICAgRE9NIG1fZG9tOwogICAgQ1NTIG1fY3NzOwogICAgVGltZWxpbmUgbV90aW1lbGluZTsK
ICAgIERlYnVnZ2VyIG1fZGVidWdnZXI7CiAgICBET01EZWJ1Z2dlciBtX2RvbWRlYnVnZ2VyOwog
ICAgUHJvZmlsZXIgbV9wcm9maWxlcjsKICAgIFdvcmtlciBtX3dvcmtlcjsKfTsKCn0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116532</attachid>
            <date>2011-11-24 12:46:24 -0800</date>
            <delta_ts>2011-11-25 08:23:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72835-20111125004622.patch</filename>
            <type>text/plain</type>
            <size>21166</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyNTM4MzM0YjUyNTU3
NmVlNGM2MWRmY2Q0ZDI5NjY0NmQ1NWNhMS4uOWZlMDFkM2M1M2QwZDhiMzdlOWY3NzRhMzEyYjdm
Nzk1NTg4OGQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTI1ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbcHJvdG9jb2xdIGdlbmVyYXRlIEMrKyBjbGFzc2VzIGZvciBwcm90b2NvbCBKU09OIG5hbWVk
IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4
dGVuZHMgcHl0aG9uIGdlbmVyYXRvciBmdW5jdGlvbmFsaXR5LgorICAgICAgICBNYWtlcyBjb25z
dHJ1Y3RvciBpbiBJbnNwZWN0b3JPYmplY3QgcHVibGljLgorCisgICAgICAgICogaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oOgorCiAyMDExLTExLTE5ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxp
dmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQysrIGJpbmRpbmdzIGJ1aWxkIGZpeCBmb3IgbW92
ZSBvZiBhcnJheSBjbGFzc2VzIHRvIFdURi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggOGNiYWFkNzI1MWEwMTFjOGJmNTY4
YTg4YjY3ZDA2OWUzY2ViYTlhYS4uZjc3MDI5NWRmMDVjMDBkY2E2MmJlMzQxMDBlNWVlMDFkNDEw
YzEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKQEAgLTEwMyw2ICsxMDMsMTIgQEAgZGVmaW5lc19tYXAgPSBwYXJzZV9kZWZp
bmVzKGFyZ19vcHRpb25zLmRlZmluZXMpCiAKIGNsYXNzIENhcGl0YWxpemVyOgogICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgbG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihzdHIpOgorICAgICAg
ICBpZiBsZW4oc3RyKSA+IDAgYW5kIHN0clswXS5pc2xvd2VyKCk6CisgICAgICAgICAgICBzdHIg
PSBzdHJbMF0udXBwZXIoKSArIHN0clsxOl0KKyAgICAgICAgcmV0dXJuIHN0cgorCisgICAgQHN0
YXRpY21ldGhvZAogICAgIGRlZiB1cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKHN0cik6CiAgICAg
ICAgIHBvcyA9IDAKICAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHN0cikgYW5kIHN0cltwb3NdLmlz
dXBwZXIoKToKQEAgLTExOSw2ICsxMjUsNDcgQEAgY2xhc3MgQ2FwaXRhbGl6ZXI6CiAgICAgICAg
IHN0ciA9IHBvc3NpYmxlX2FiYnJldmlhdGlvbi5sb3dlcigpICsgc3RyW3BvczpdCiAgICAgICAg
IHJldHVybiBzdHIKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2FtZWxfY2FzZV90b19j
YXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKHN0cik6CisgICAgICAgIGlmIGxlbihzdHIpID09
IDA6CisgICAgICAgICAgICByZXR1cm4gc3RyCisgICAgICAgIG91dHB1dCA9IENhcGl0YWxpemVy
LnNwbGl0X2NhbWVsX2Nhc2VfKHN0cikKKyAgICAgICAgcG9zID0gMAorICAgICAgICB3aGlsZSBw
b3MgPCBsZW4ob3V0cHV0KToKKyAgICAgICAgICAgIG91dHB1dFtwb3NdID0gb3V0cHV0W3Bvc10u
dXBwZXIoKQorICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgcmV0dXJuICJfIi5qb2luKG91
dHB1dCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3BsaXRfY2FtZWxfY2FzZV8oc3Ry
KToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgcG9zX2JlaW5nID0gMAorICAgICAgICBw
b3MgPSAxCisgICAgICAgIGhhc19vbmVsZXR0ZXIgPSBGYWxzZQorICAgICAgICB3aGlsZSBwb3Mg
PCBsZW4oc3RyKToKKyAgICAgICAgICAgIGlmIHN0cltwb3NdLmlzdXBwZXIoKToKKyAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cltwb3NfYmVpbmc6cG9zXS51cHBlcigpKQorICAgICAg
ICAgICAgICAgIGlmIHBvcyAtIHBvc19iZWluZyA9PSAxOgorICAgICAgICAgICAgICAgICAgICBo
YXNfb25lbGV0dGVyID0gVHJ1ZQorICAgICAgICAgICAgICAgIHBvc19iZWluZyA9IHBvcworICAg
ICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9zX2JlaW5nOl0p
CisgICAgICAgIGlmIGhhc19vbmVsZXR0ZXI6CisgICAgICAgICAgICBhcnJheV9wb3MgPSAwCisg
ICAgICAgICAgICB3aGlsZSBhcnJheV9wb3MgPCBsZW4ob3V0cHV0KSAtIDE6CisgICAgICAgICAg
ICAgICAgaWYgbGVuKG91dHB1dFthcnJheV9wb3NdKSA9PSAxOgorICAgICAgICAgICAgICAgICAg
ICBhcnJheV9wb3NfZW5kID0gYXJyYXlfcG9zICsgMQorICAgICAgICAgICAgICAgICAgICB3aGls
ZSBhcnJheV9wb3NfZW5kIDwgbGVuKG91dHB1dCkgYW5kIGxlbihvdXRwdXRbYXJyYXlfcG9zX2Vu
ZF0pID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kICs9IDEKKyAg
ICAgICAgICAgICAgICAgICAgaWYgYXJyYXlfcG9zX2VuZCAtIGFycmF5X3BvcyA+IDE6CisgICAg
ICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZV9hYmJyZXZpYXRpb24gPSAiIi5qb2luKG91dHB1
dFthcnJheV9wb3M6YXJyYXlfcG9zX2VuZF0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBw
b3NzaWJsZV9hYmJyZXZpYXRpb24udXBwZXIoKSBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJT046
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2FycmF5X3BvczphcnJheV9wb3Nf
ZW5kXSA9IFtwb3NzaWJsZV9hYmJyZXZpYXRpb25dCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3BvcyA9IGFycmF5X3Bvc19l
bmQgLSAxCisgICAgICAgICAgICAgICAgYXJyYXlfcG9zICs9IDEKKyAgICAgICAgcmV0dXJuIG91
dHB1dAorCiAgICAgQUJCUkVWSUFUSU9OID0gZnJvemVuc2V0KFsiWEhSIiwgIkRPTSIsICJDU1Mi
XSkKIAogCkBAIC0xODcsNiArMjM0LDggQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKICAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm51
bWJlciI6CiAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCisgICAgICAgIGVsaWYg
anNvbl90eXBlID09ICJhbnkiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFueQogICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGU6ICVz
IiAlIGpzb25fdHlwZSkKIApAQCAtMzIzLDYgKzM3MiwzNSBAQCBjbGFzcyBSYXdUeXBlcyhvYmpl
Y3QpOgogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4iKQogICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiIpCiAKKyAgICBjbGFzcyBBbnkoQmFzZVR5cGUpOgorICAgICAgICBA
Y2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBl
LCBvcHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVO
VDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgorICAgICAgICAg
ICAgcmV0dXJuICJWYWx1ZSIKKworICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVy
X25hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19pbml0aWFs
aXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCkiCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJh
bVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQ
YXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IikKKwogICAgIGNsYXNzIEFycmF5
KEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJh
bV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgpAQCAtMzYwLDM3ICs0MzgsMjU0IEBA
IGNsYXNzIFBhcmFtVHlwZShvYmplY3QpOgogICAgIE9VVFBVVCA9ICJvdXRwdXQiCiAgICAgRVZF
TlQgPSAiZXZlbnQiCiAKKyMgQ29sbGVjdGlvbiBvZiBJbnNwZWN0b3JPYmplY3QgY2xhc3MgbWV0
aG9kcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgb3ZlcmxvYWRlZCBpbiBnZW5lcmF0ZWQgY2xhc3Mu
CisjIFdlIG11c3QgZXhwbGljaXRseSBpbXBvcnQgYWxsIG92ZXJsb2FkZWQgbWV0aG9kcyBvciB0
aGV5IHdvbid0IGJlIGF2YWlsYWJsZSB0byB1c2VyLgorSU5TUEVDVE9SX09CSkVDVF9TRVRURVJf
TkFNRVMgPSBmcm96ZW5zZXQoWyJzZXRWYWx1ZSIsICJzZXRCb29sZWFuIiwgInNldE51bWJlciIs
ICJzZXRTdHJpbmciLCAic2V0VmFsdWUiLCAic2V0T2JqZWN0IiwgInNldEFycmF5Il0pCisKKwor
Y2xhc3MgVHlwZUJpbmRpbmdzOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2Zv
cl9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwZSwgY29udGV4dF9kb21haW5fbmFtZSk6
CisgICAgICAgIGlmIGpzb25fdHlwZVsidHlwZSJdID09ICJzdHJpbmciOgorICAgICAgICAgICAg
aWYgImVudW0iIGluIGpzb25fdHlwZToKKworICAgICAgICAgICAgICAgIGNsYXNzIEVudW1CaW5k
aW5nOgorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBmb3J3YXJkX2xpc3RlbmVyKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gPSBqc29uX3R5cGVbImVudW0iXQorICAgICAg
ICAgICAgICAgICAgICAgICAgIyBUT0RPOiBkb2MKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoIm5hbWVzcGFjZSAiKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChqc29uX3R5cGVbImlkIl0pCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCIge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnVtX2l0ZW0gaW4g
ZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRl
bS5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5h
cHBlbmQoImNvbnN0IGNoYXIqIGNvbnN0ICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZChDYXBpdGFsaXplci51cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKGl0ZW1f
Y19uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgPSBc
IiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChlbnVtX2l0ZW0p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiXCI7XG4iKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgifSAvLyBuYW1lc3BhY2UgIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoanNvbl90eXBlWyJpZCJdKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiXG5cbiIpCisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRW51bUJpbmRpbmcKKyAgICAgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAg
ICAgICBjbGFzcyBQbGFpblN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwg
Zm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAiZGVzY3JpcHRp
b24iIGluIGpzb25fdHlwZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIvKiAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoanNv
bl90eXBlWyJkZXNjcmlwdGlvbiJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoIiAqL1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
InR5cGVkZWYgU3RyaW5nICIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KGpzb25fdHlwZVsiaWQiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
IjtcblxuIikKKyAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5TdHJpbmcKKworICAgICAgICBl
bGlmIGpzb25fdHlwZVsidHlwZSJdID09ICJvYmplY3QiOgorICAgICAgICAgICAgaWYgInByb3Bl
cnRpZXMiIGluIGpzb25fdHlwZToKKworICAgICAgICAgICAgICAgIGNsYXNzIENsYXNzQmluZGlu
ZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9saXN0ZW5lcik6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGRvYworICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiY2xhc3MgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
X25hbWUgPSBqc29uX3R5cGVbImlkIl0KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5h
cHBlbmQoY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
IiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoInB1YmxpYzpcbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnRpZXMgPSBqc29uX3R5cGVbInByb3BlcnRpZXMiXQorICAgICAgICAgICAgICAgICAgICAg
ICAgbWFpbl9wcm9wZXJ0aWVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFs
X3Byb3BlcnRpZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcHJvcGVy
dGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAib3B0aW9uYWwiIGluIHAgYW5k
IHBbIm9wdGlvbmFsIl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFs
X3Byb3BlcnRpZXMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wcm9wZXJ0aWVzLmFwcGVuZChw
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKAorIiIiICAgIGVudW0g
eworICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKKyIiIikKKworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVfZW51bV9pdGVtcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBs
ZW4obWFpbl9wcm9wZXJ0aWVzKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9z
ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIG1haW5fcHJvcGVydGll
czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6
ZXIuY2FtZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKHBbIm5hbWUiXSkg
KyAiX1NFVCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVt
cy5hcHBlbmQoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCIgICAgICAgICVzID0gMSA8PCAlcyxcbiIgJSAoaXRlbV9uYW1lLCBwb3MpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsbF9maWVsZHNfc2V0X3ZhbHVlID0gIigiICsgKCIgfCAiLmpvaW4oc3Rh
dGVfZW51bV9pdGVtcykpICsgIikiCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9maWVsZHNfc2V0X3ZhbHVlID0gIjAiCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoCisiIiIgICAgICAgIEFMTF9GSUVM
RFNfU0VUID0gJXMKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNz
IEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAg
IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgaW5saW5lIEJ1aWxkZXIoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICB9CisiIiIgJSBhbGxfZmllbGRzX3NldF92
YWx1ZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BbIm5hbWUiXQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShwcm9wLCBjb250
ZXh0X2RvbWFpbl9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoIiIiCisgICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgJXM+JiBzZXQlcyglcyB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICVzKSwg
cHJvcGVydHlfJXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldCVzKCIl
cyIsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JXM+KCk7CisgICAgICAg
IH0KKyIiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNb
cG9zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuT1VUUFVULCBG
YWxzZSkuZ2V0X3RleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9l
bnVtX2l0ZW1zW3Bvc10sIHByb3BfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbV9yYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcF9uYW1lLCBzdGF0ZV9lbnVt
X2l0ZW1zW3Bvc10pKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiIiIKKyAgICAgICAgaW5saW5l
IG9wZXJhdG9yIFJlZlB0cjwlcz4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JXM+Kj4oJm1fcmVzdWx0
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPCVzPiAo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPCVzPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Owor
CisiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGNsYXNzX25hbWUsIGNsYXNzX25hbWUs
IGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCIgICAgLypcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOlxuIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpjcmVh
dGUoKSIgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgcHJvcCBpbiBtYWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiXG4gICAgICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVy
Lmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcFsibmFtZSJdKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoIjtcbiAgICAgKi9cbiIpCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoCisiIiIgICAgaW5saW5lIHN0YXRpYyBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPigpOworICAgIH0KKyIiIikKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IHByb3AgaW4gb3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUocHJvcCwgY29udGV4dF9k
b21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfbmFtZSA9ICJz
ZXQlcyIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BbIm5hbWUi
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJcbiAgICBpbmxp
bmUgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgcGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1f
dHlwZShQYXJhbVR5cGUuRVZFTlQsIEZhbHNlKS5nZXRfdGV4dCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICB7XG4iKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgdGhpcy0+c2V0JXMoXCIlc1wiLCB2YWx1
ZSk7XG4iICUgKHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0p
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICB9XG4iKQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2V0dGVyX25hbWUgaW4gSU5TUEVDVE9S
X09CSkVDVF9TRVRURVJfTkFNRVM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoIiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OiVzO1xuXG4iICUgc2V0dGVy
X25hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIn07XG5cbiIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIENsYXNzQmluZGluZworICAgICAgICAgICAgZWxzZToK
KworICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluT2JqZWN0QmluZGluZzoKKyAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVf
dHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAg
ICAgICAgICAjIE5vLW9wCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFBsYWluT2JqZWN0QmluZGluZworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlWyJ0eXBlIl0pCisKKyAgICAgICAg
ICAgIGNsYXNzIFJhd1R5cGVzQmluZGluZzoKKyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndh
cmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAjIE5vLW9wCisgICAgICAgICAgICAg
ICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlc0JpbmRpbmcKKwogCiBjbGFz
cyBUeXBlRGF0YShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpz
b25fZG9tYWluKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl90eXBlLCBqc29uX2RvbWFp
biwgZG9tYWluX2RhdGEpOgogICAgICAgICBzZWxmLmpzb25fdHlwZV8gPSBqc29uX3R5cGUKICAg
ICAgICAgc2VsZi5qc29uX2RvbWFpbl8gPSBqc29uX2RvbWFpbgorICAgICAgICBzZWxmLmRvbWFp
bl9kYXRhXyA9IGRvbWFpbl9kYXRhCiAKLSAgICAgICAgaWYgInR5cGUiIGluIGpzb25fdHlwZToK
LSAgICAgICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KLSAgICAgICAg
ICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9uYW1lKQotICAgICAgICBlbHNl
OgorICAgICAgICBpZiAidHlwZSIgbm90IGluIGpzb25fdHlwZToKICAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikKKworICAgICAgICBqc29uX3R5cGVfbmFtZSA9IGpz
b25fdHlwZVsidHlwZSJdCisgICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlw
ZV9uYW1lKQogICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCisgICAgICAgIHNlbGYu
YmluZGluZ18gPSBUeXBlQmluZGluZ3MuY3JlYXRlX2Zvcl9uYW1lZF90eXBlX2RlY2xhcmF0aW9u
KGpzb25fdHlwZSwganNvbl9kb21haW5bImRvbWFpbiJdKQogCiAgICAgZGVmIGdldF9yYXdfdHlw
ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfCiAKKyAgICBkZWYgZ2V0X2Jp
bmRpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJpbmRpbmdfCisKKworY2xhc3MgRG9t
YWluRGF0YToKKyAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl9kb21haW4pOgorICAgICAgICBz
ZWxmLmpzb25fZG9tYWluID0ganNvbl9kb21haW4KKyAgICAgICAgc2VsZi50eXBlc18gPSBbXQor
CisgICAgZGVmIGFkZF90eXBlKHNlbGYsIHR5cGVfZGF0YSk6CisgICAgICAgIHNlbGYudHlwZXNf
LmFwcGVuZCh0eXBlX2RhdGEpCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuanNvbl9kb21haW5bImRvbWFpbiJdCisKKyAgICBkZWYgdHlwZXMoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLnR5cGVzXworCiAKIGNsYXNzIFR5cGVNYXA6CiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGFwaSk6CiAgICAgICAgIHNlbGYubWFwXyA9IHt9CisgICAgICAgIHNlbGYuZG9t
YWluc18gPSBbXQogICAgICAgICBmb3IganNvbl9kb21haW4gaW4gYXBpWyJkb21haW5zIl06CiAg
ICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQogCiAgICAgICAg
ICAgICBkb21haW5fbWFwID0ge30KICAgICAgICAgICAgIHNlbGYubWFwX1tkb21haW5fbmFtZV0g
PSBkb21haW5fbWFwCiAKKyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluRGF0YShqc29u
X2RvbWFpbikKKyAgICAgICAgICAgIHNlbGYuZG9tYWluc18uYXBwZW5kKGRvbWFpbl9kYXRhKQor
CiAgICAgICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgogICAgICAgICAgICAgICAg
IGZvciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVzIl06CiAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfbmFtZSA9IGpzb25fdHlwZVsiaWQiXQotICAgICAgICAgICAgICAgICAgICB0eXBl
X2RhdGEgPSBUeXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluKQorICAgICAgICAgICAgICAg
ICAgICB0eXBlX2RhdGEgPSBUeXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluLCBkb21haW5f
ZGF0YSkKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9k
YXRhCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9kYXRhLmFkZF90eXBlKHR5cGVfZGF0YSkK
KworICAgIGRlZiBkb21haW5zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kb21haW5zXwog
CiAgICAgZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKICAgICAgICAgcmV0
dXJuIHNlbGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQpAQCAtNDI2LDYgKzcyMSwzMCBA
QCBqc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCiAKIAogY2xhc3MgVGVtcGxhdGVz
OgorICAgIGRlZiBnZXRfdGhpc19zY3JpcHRfcGF0aF8oYWJzb2x1dGVfcGF0aCk6CisgICAgICAg
IGFic29sdXRlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoYWJzb2x1dGVfcGF0aCkKKyAgICAgICAg
Y29tcG9uZW50cyA9IFtdCisKKyAgICAgICAgZGVmIGZpbGxfcmVjdXJzaXZlKHBhdGhfcGFydCwg
ZGVwdGgpOgorICAgICAgICAgICAgaWYgZGVwdGggPD0gMCBvciBwYXRoX3BhcnQgPT0gJy8nOgor
ICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZmlsbF9yZWN1cnNpdmUob3MucGF0
aC5kaXJuYW1lKHBhdGhfcGFydCksIGRlcHRoIC0gMSkKKyAgICAgICAgICAgIGNvbXBvbmVudHMu
YXBwZW5kKG9zLnBhdGguYmFzZW5hbWUocGF0aF9wYXJ0KSkKKworICAgICAgICAjIFR5cGljYWwg
cGF0aCBpcyAvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkKKyAgICAgICAgIyBMZXQncyB0YWtlIDQgY29tcG9uZW50cyBmcm9tIHRoZSByZWFsIHBhdGgg
dGhlbi4KKyAgICAgICAgZmlsbF9yZWN1cnNpdmUoYWJzb2x1dGVfcGF0aCwgNCkKKworICAgICAg
ICByZXR1cm4gIi8iLmpvaW4oY29tcG9uZW50cykKKworICAgIGZpbGVfaGVhZGVyXyA9ICgiLy8g
RmlsZSBpcyBnZW5lcmF0ZWQgYnkgJXNcblxuIiAlIGdldF90aGlzX3NjcmlwdF9wYXRoXyhzeXMu
YXJndlswXSkgKworIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKyIiIikKKworCisKICAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBz
dHJpbmcuVGVtcGxhdGUoCiAiIiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFtZSB7CiAgICAgcHVi
bGljOiRkb21haW5DYXBhYmlsaXRpZXMKQEAgLTQ2NywyMyArNzg2LDI0IEBAICRjb2RlICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKIH0KICIiIikKIAotICAgIGZyb250ZW5kX2gg
PSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLSNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRfaAorICAgIGZy
b250ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIiNpZm5kZWYgSW5z
cGVjdG9yRnJvbnRlbmRfaAogI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZF9oCiAKKyNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5z
cGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci1jbGFzcyBJbnNw
ZWN0b3JPYmplY3Q7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCituYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIgeworJHt0eXBlQnVpbGRlcnN9Cit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRl
cgorCiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRnJv
bnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CkBAIC00OTgsMTAgKzgxOCw4IEBAICR7
ZmllbGREZWNsYXJhdGlvbnN9fTsKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVu
ZF9oKQogIiIiKQogCi0gICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jaWZuZGVm
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKyAgICBiYWNrZW5kX2ggPSBzdHJpbmcuVGVt
cGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIiNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJfaAogI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgpAQCAtNTcwLDEwICs4ODgsOCBAQCAkZmllbGREZWNsYXJhdGlvbnMK
IAogIiIiKQogCi0gICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQorICAgIGJh
Y2tlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCkBA
IC05MDEsMTAgKzEyMTcsOCBAQCBib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRD
b21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcgogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCiAiIiIpCiAKLSAgICBmcm9udGVuZF9jcHAgPSBzdHJpbmcuVGVtcGxh
dGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLQorICAgIGZyb250ZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8g
KworIiIiCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZC5oIgpAQCAtOTMzLDEwICsxMjQ3LDggQEAgJG1ldGhvZHMKICNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQogIiIiKQogCi0gICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCisg
ICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKworIiIiCiAKIElu
c3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQogewpAQCAtMTIxMSw5ICsxNTIzLDEyIEBA
IGNsYXNzIEdlbmVyYXRvcjoKICAgICBiYWNrZW5kX2luY2x1ZGVfbGlzdCA9IFtdCiAgICAgZnJv
bnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10KICAgICBmcm9udGVuZF9jYXBhYmlsaXRp
ZXNfY29uc3RhbnRzX2xpc3QgPSBbXQorICAgIHR5cGVfYnVpbGRlcl9mcmFnbWVudHMgPSBbXQog
CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBnbygpOgorICAgICAgICBHZW5lcmF0b3IucHJv
Y2Vzc190eXBlcyh0eXBlX21hcCkKKwogICAgICAgICBmb3IganNvbl9kb21haW4gaW4ganNvbl9h
cGlbImRvbWFpbnMiXToKICAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRv
bWFpbiJdCiAgICAgICAgICAgICBkb21haW5fbmFtZV9sb3dlciA9IGRvbWFpbl9uYW1lLmxvd2Vy
KCkKQEAgLTE0MDgsNiArMTcyMywyNCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIiAgICB0aGlzLl9yZWdp
c3RlckRlbGVnYXRlKCd7XCJtZXRob2RcIjogXCIlcy4lc1wiJXMsIFwiaWRcIjogMH0nKTtcbiIg
JSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQpKQog
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX3R5cGVzKHR5cGVfbWFwKToKKyAg
ICAgICAgb3V0cHV0ID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVudHMKKworICAgICAg
ICBjbGFzcyBGb3J3YXJkTGlzdGVuZXI6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9y
IGRvbWFpbl9kYXRhIGluIHR5cGVfbWFwLmRvbWFpbnMoKToKKyAgICAgICAgICAgIG91dHB1dC5h
cHBlbmQoIm5hbWVzcGFjZSAiKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChkb21haW5fZGF0
YS5uYW1lKCkpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIge1xuIikKKyAgICAgICAgICAg
IGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKKyAgICAgICAgICAgICAgICB0
eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKS5nZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBGb3J3
YXJkTGlzdGVuZXIpCisKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIn0gLy8gIikKKyAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoZG9tYWluX2RhdGEubmFtZSgpKQorICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgiXG4iKQorCiBHZW5lcmF0b3IuZ28oKQogCiBiYWNrZW5kX2hfZmlsZSA9IG9w
ZW4ob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
IiwgInciKQpAQCAtMTQyMSw3ICsxNzU0LDggQEAgYmFja2VuZF9qc19maWxlID0gb3BlbihvdXRw
dXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIiwgInciKQogCiBmcm9u
dGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAog
ICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3Nf
ZmllbGRfbGluZXMsICIiKSwKLSAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1qb2luKEdlbmVyYXRv
ci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIiKSkpCisgICAgICAgICBkb21haW5DbGFz
c0xpc3Q9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLCAiIiksCisg
ICAgICAgICB0eXBlQnVpbGRlcnM9am9pbihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50
cywgIiIpKSkKIAogYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfaC5zdWJz
dGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRf
Y29uc3RydWN0b3JfaW5pdF9saXN0LCAiXG4iKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaAppbmRleCBiMjZhYmMzMWNjM2NiMDNmN2JlMDc1OTU3MWZkMTM2MzVm
N2IxMTUxLi4wM2ZkZDE1YjI1ZDA5YmRlYzQ1MWFkMDNiMWFiMzIzOWYyODBkYTAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0yMDYsOCArMjA2LDEw
IEBAIHB1YmxpYzoKICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5iZWdpbigpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmVuZCgpOyB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yT2Jq
ZWN0KCk7CisKK3ByaXZhdGU6CiAgICAgRGljdGlvbmFyeSBtX2RhdGE7CiAgICAgVmVjdG9yPFN0
cmluZz4gbV9vcmRlcjsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>116533</attachid>
            <date>2011-11-24 12:48:29 -0800</date>
            <delta_ts>2011-11-24 12:49:40 -0800</delta_ts>
            <desc>Sample generated file (caseq template technique)</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>126547</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCnR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Cn0gLy8gSW5zcGVjdG9yCm5hbWVzcGFjZSBQYWdlIHsKbmFtZXNwYWNlIFJlc291cmNlVHlw
ZSB7CmNvbnN0IGNoYXIqIGNvbnN0IGRvY3VtZW50ID0gIkRvY3VtZW50IjsKY29uc3QgY2hhciog
Y29uc3Qgc3R5bGVzaGVldCA9ICJTdHlsZXNoZWV0IjsKY29uc3QgY2hhciogY29uc3QgaW1hZ2Ug
PSAiSW1hZ2UiOwpjb25zdCBjaGFyKiBjb25zdCBmb250ID0gIkZvbnQiOwpjb25zdCBjaGFyKiBj
b25zdCBzY3JpcHQgPSAiU2NyaXB0IjsKY29uc3QgY2hhciogY29uc3QgeGhyID0gIlhIUiI7CmNv
bnN0IGNoYXIqIGNvbnN0IHdlYlNvY2tldCA9ICJXZWJTb2NrZXQiOwpjb25zdCBjaGFyKiBjb25z
dCBvdGhlciA9ICJPdGhlciI7Cn0gLy8gbmFtZXNwYWNlIFJlc291cmNlVHlwZQoKY2xhc3MgRnJh
bWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgSURfU0VUID0gMSA8PCAwLAogICAgICAgIExPQURF
Ul9JRF9TRVQgPSAxIDw8IDEsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMiwKICAgICAgICBNSU1F
X1RZUEVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKElEX1NFVCB8IExP
QURFUl9JRF9TRVQgfCBVUkxfU0VUIHwgTUlNRV9UWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVyKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19T
RVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgSURfU0VUPiYgc2V0SWQoU3RyaW5nIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElEX1NFVCksIHByb3BlcnR5X2lk
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SURfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBMT0FERVJfSURfU0VUPiYgc2V0TG9hZGVySWQo
U3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIExPQURFUl9JRF9TRVQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPExPQURFUl9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBp
bmxpbmUgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoU3RyaW5nIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9w
ZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1
cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgTUlNRV9UWVBFX1NFVD4mIHNl
dE1pbWVUeXBlKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNSU1FX1RZUEVfU0VUKSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNSU1FX1RZUEVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxGcmFtZT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
RnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQ
YXNzUmVmUHRyPEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPEZyYW1lPiByZXN1bHQgPSBGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
SWQoLi4uKQogICAgICogICAgIC5zZXRMb2FkZXJJZCguLi4pCiAgICAgKiAgICAgLnNldFVybCgu
Li4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0
aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0UGFyZW50
SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBh
cmVudElkIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldE5hbWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7
CiAgICB9Cn07CgpjbGFzcyBGcmFtZVJlc291cmNlVHJlZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBGUkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgUkVTT1VSQ0VTX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChGUkFNRV9TRVQgfCBSRVNPVVJDRVNfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5saW5l
IEJ1aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0KCiAg
ICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9TRVQ+JiBzZXRGcmFtZShSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBGUkFNRV9TRVQpLCBwcm9wZXJ0eV9mcmFtZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImZyYW1lIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgUkVTT1VSQ0VTX1NFVD4mIHNldFJlc291cmNlcyhSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZy
YW1lUmVzb3VyY2VUcmVlPiByZXN1bHQgPSBGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0RnJhbWUoLi4uKQogICAgICogICAgIC5zZXRSZXNvdXJjZXMoLi4uKTsKICAg
ICAqLwogICAgaW5saW5lIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KCiAgICBp
bmxpbmUgdm9pZCBzZXRDaGlsZEZyYW1lcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRGcmFtZXMiLCB2YWx1ZSk7CiAg
ICB9Cn07CgpjbGFzcyBTZWFyY2hNYXRjaCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBMSU5FX05V
TUJFUl9TRVQgPSAxIDw8IDAsCiAgICAgICAgTElORV9DT05URU5UX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChMSU5FX05VTUJFUl9TRVQgfCBMSU5FX0NPTlRFTlRfU0VU
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAg
ICAgaW5saW5lIEJ1aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBMSU5FX05VTUJFUl9TRVQ+JiBz
ZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBMSU5FX05VTUJFUl9TRVQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMSU5FX05VTUJFUl9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IExJTkVfQ09OVEVOVF9T
RVQ+JiBzZXRMaW5lQ29udGVudChTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9DT05URU5UX1NFVCksIHByb3BlcnR5X2xpbmVD
b250ZW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibGlu
ZUNvbnRlbnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TElORV9DT05U
RU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQdHI8U2Vh
cmNoTWF0Y2g+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVM
RFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxTZWFyY2hNYXRjaD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxT
ZWFyY2hNYXRjaD4gcmVzdWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRMaW5lQ29udGVudCguLi4pOwogICAgICov
CiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQp9OwoKY2xhc3Mg
U2VhcmNoUmVzdWx0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAg
ICAgICAgRlJBTUVfSURfU0VUID0gMSA8PCAxLAogICAgICAgIE1BVENIRVNfQ09VTlRfU0VUID0g
MSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBGUkFNRV9JRF9TRVQg
fCBNQVRDSEVTX0NPVU5UX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVyKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwg
VVJMX1NFVD4mIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5l
IEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9JRF9TRVQ+JiBzZXRGcmFtZUlkKFN0cmluZyB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGUkFNRV9JRF9T
RVQpLCBwcm9wZXJ0eV9mcmFtZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxGUkFNRV9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFU
RSB8IE1BVENIRVNfQ09VTlRfU0VUPiYgc2V0TWF0Y2hlc0NvdW50KGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQVRDSEVTX0NPVU5U
X1NFVCksIHByb3BlcnR5X21hdGNoZXNDb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoIm1hdGNoZXNDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNQVRDSEVTX0NPVU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBvcGVyYXRvciBSZWZQdHI8U2VhcmNoUmVzdWx0PiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWFy
Y2hSZXN1bHQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRv
ciBQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWFyY2hSZXN1bHQ+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VhcmNoUmVzdWx0PiByZXN1bHQgPSBTZWFyY2hS
ZXN1bHQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldEZy
YW1lSWQoLi4uKQogICAgICogICAgIC5zZXRNYXRjaGVzQ291bnQoLi4uKTsKICAgICAqLwogICAg
aW5saW5lIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KfTsKCmNsYXNzIENvb2tp
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBWQUxV
RV9TRVQgPSAxIDw8IDEsCiAgICAgICAgRE9NQUlOX1NFVCA9IDEgPDwgMiwKICAgICAgICBQQVRI
X1NFVCA9IDEgPDwgMywKICAgICAgICBFWFBJUkVTX1NFVCA9IDEgPDwgNCwKICAgICAgICBTSVpF
X1NFVCA9IDEgPDwgNSwKICAgICAgICBIVFRQX09OTFlfU0VUID0gMSA8PCA2LAogICAgICAgIFNF
Q1VSRV9TRVQgPSAxIDw8IDcsCiAgICAgICAgU0VTU0lPTl9TRVQgPSAxIDw8IDgsCiAgICAgICAg
QUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBWQUxVRV9TRVQgfCBET01BSU5fU0VUIHwgUEFU
SF9TRVQgfCBFWFBJUkVTX1NFVCB8IFNJWkVfU0VUIHwgSFRUUF9PTkxZX1NFVCB8IFNFQ1VSRV9T
RVQgfCBTRVNTSU9OX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVyKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgTkFN
RV9TRVQ+JiBzZXROYW1lKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5s
aW5lIEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkFMVUVfU0VUKSwg
cHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWQUxVRV9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IERPTUFJTl9T
RVQ+JiBzZXREb21haW4oU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIERPTUFJTl9TRVQpLCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RE9NQUlOX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgUEFUSF9TRVQ+JiBzZXRQYXRoKFN0cmluZyB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQQVRIX1NF
VCksIHByb3BlcnR5X3BhdGhfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJwYXRoIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBBVEhf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBFWFBJUkVT
X1NFVD4mIHNldEV4cGlyZXMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEVYUElSRVNfU0VUKSwgcHJvcGVydHlfZXhwaXJlc19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImV4cGlyZXMiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RVhQSVJFU19TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNJWkVfU0VUPiYgc2V0U2l6ZShpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0laRV9T
RVQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTSVpF
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgSFRUUF9P
TkxZX1NFVD4mIHNldEh0dHBPbmx5KGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgSFRUUF9PTkxZX1NFVCksIHByb3BlcnR5X2h0dHBPbmx5
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBPbmx5
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhUVFBfT05MWV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNFQ1VSRV9TRVQ+JiBz
ZXRTZWN1cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTRUNVUkVfU0VUKSwgcHJvcGVydHlfc2VjdXJlX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInNlY3VyZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTRUNVUkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5s
aW5lIEJ1aWxkZXI8U1RBVEUgfCBTRVNTSU9OX1NFVD4mIHNldFNlc3Npb24oYm9vbCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRVNTSU9OX1NF
VCksIHByb3BlcnR5X3Nlc3Npb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0Qm9vbGVhbigic2Vzc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTRVNTSU9OX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQ
dHI8Q29va2llPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDb29raWU+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPENvb2tpZT4gKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDb29raWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q29va2llPiByZXN1bHQg
PSBDb29raWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5z
ZXRWYWx1ZSguLi4pCiAgICAgKiAgICAgLnNldERvbWFpbiguLi4pCiAgICAgKiAgICAgLnNldFBh
dGgoLi4uKQogICAgICogICAgIC5zZXRFeHBpcmVzKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSgu
Li4pCiAgICAgKiAgICAgLnNldEh0dHBPbmx5KC4uLikKICAgICAqICAgICAuc2V0U2VjdXJlKC4u
LikKICAgICAqICAgICAuc2V0U2Vzc2lvbiguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQp9OwoKLyogVW5pcXVlIHNjcmlwdCBpZGVudGlm
aWVyLiAqLwp0eXBlZGVmIFN0cmluZyBTY3JpcHRJZGVudGlmaWVyOwoKfSAvLyBQYWdlCm5hbWVz
cGFjZSBSdW50aW1lIHsKLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0
cmluZyBSZW1vdGVPYmplY3RJZDsKCmNsYXNzIFJlbW90ZU9iamVjdCA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUWVBF
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgog
ICAgICAgIGlubGluZSBCdWlsZGVyKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRU
eXBlKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9y
IFJlZlB0cjxSZW1vdGVPYmplY3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlbW90ZU9iamVjdD4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFBhc3NSZWZQdHI8
UmVtb3RlT2JqZWN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlbW90ZU9iamVjdD4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3VsdCA9IFJlbW90ZU9iamVjdDo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOT19GSUVMRFNfU0VUPigpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFN1YnR5cGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUi
LCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCB2YWx1
ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUp
OwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgogICAgaW5saW5l
IHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoImRlc2NyaXB0aW9uIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2
b2lkIHNldE9iamVjdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBzZXRG
dW5jdGlvbkxvY2F0aW9uKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRPYmplY3QoImZ1bmN0aW9uTG9jYXRpb24iLCB2YWx1ZSk7CiAgICB9
Cn07CgpjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFN
RV9TRVQgPSAxIDw8IDAsCiAgICAgICAgV1JJVEFCTEVfU0VUID0gMSA8PCAxLAogICAgICAgIENP
TkZJR1VSQUJMRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgRU5VTUVSQUJMRV9TRVQgPSAxIDw8IDMs
CiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBXUklUQUJMRV9TRVQgfCBDT05G
SUdVUkFCTEVfU0VUIHwgRU5VTUVSQUJMRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRl
cjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1l
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgV1JJVEFCTEVfU0VUPiYgc2V0V3JpdGFi
bGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBXUklUQUJMRV9TRVQpLCBwcm9wZXJ0eV93cml0YWJsZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJ3cml0YWJsZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxXUklUQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBp
bmxpbmUgQnVpbGRlcjxTVEFURSB8IENPTkZJR1VSQUJMRV9TRVQ+JiBzZXRDb25maWd1cmFibGUo
Ym9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDT05GSUdVUkFCTEVfU0VUKSwgcHJvcGVydHlfY29uZmlndXJhYmxlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbmZpZ3VyYWJsZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05GSUdVUkFCTEVfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBFTlVNRVJBQkxFX1NFVD4mIHNldEVu
dW1lcmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBFTlVNRVJBQkxFX1NFVCksIHByb3BlcnR5X2VudW1lcmFibGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiZW51bWVyYWJsZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFTlVNRVJBQkxFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVM
RFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRv
cj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9G
SUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiByZXN1bHQgPSBQcm9wZXJ0eURlc2NyaXB0b3I6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRXcml0YWJs
ZSguLi4pCiAgICAgKiAgICAgLnNldENvbmZpZ3VyYWJsZSguLi4pCiAgICAgKiAgICAgLnNldEVu
dW1lcmFibGUoLi4uKTsKICAgICAqLwogICAgaW5saW5lIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oKTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ2YWx1ZSIsIHZh
bHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6c2V0VmFsdWU7CgoKICAgIGlu
bGluZSB2b2lkIHNldEdldChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJnZXQiLCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5l
IHZvaWQgc2V0U2V0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRPYmplY3QoInNldCIsIHZhbHVlKTsKICAgIH0KCiAgICBpbmxpbmUgdm9p
ZCBzZXRXYXNUaHJvd24oYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFu
KCJ3YXNUaHJvd24iLCB2YWx1ZSk7CiAgICB9Cn07CgpjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERT
X1NFVCA9IDAsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAwCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUg
b3BlcmF0b3IgUmVmUHRyPENhbGxBcmd1bWVudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEFyZ3Vt
ZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFz
c1JlZlB0cjxDYWxsQXJndW1lbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEFyZ3VtZW50Pio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxBcmd1bWVudD4gcmVzdWx0ID0gQ2FsbEFyZ3VtZW50
OjpjcmVhdGUoKTsKICAgICAqLwogICAgaW5saW5lIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
KTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7
CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAgICBpbmxpbmUg
dm9pZCBzZXRPYmplY3RJZChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCn0g
Ly8gUnVudGltZQpuYW1lc3BhY2UgQ29uc29sZSB7CmNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxE
U19TRVQgPSAwLAogICAgICAgIFNPVVJDRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgTEVWRUxfU0VU
ID0gMSA8PCAxLAogICAgICAgIFRFWFRfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFNPVVJDRV9TRVQgfCBMRVZFTF9TRVQgfCBURVhUX1NFVCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVy
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgU09VUkNFX1NFVD4mIHNldFNvdXJjZShTdHJpbmcgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU09VUkNFX1NF
VCksIHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInNvdXJjZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
T1VSQ0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBM
RVZFTF9TRVQ+JiBzZXRMZXZlbChTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTEVWRUxfU0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMRVZFTF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFRFWFRfU0VUPiYgc2V0VGV4dChTdHJpbmcgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9T
RVQpLCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhU
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQdHI8Q29uc29s
ZU1lc3NhZ2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENvbnNvbGVNZXNzYWdlPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxDb25zb2xlTWVz
c2FnZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDb25zb2xlTWVzc2FnZT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxDb25zb2xlTWVzc2FnZT4gcmVzdWx0ID0gQ29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFNvdXJjZSguLi4pCiAgICAgKiAgICAgLnNldExldmVsKC4uLikKICAg
ICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPigpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAg
ICB9CgogICAgaW5saW5lIHZvaWQgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZv
aWQgc2V0TGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJsaW5l
IiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFJlcGVhdENvdW50KGludCB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInJlcGVhdENvdW50IiwgdmFsdWUpOwog
ICAgfQoKICAgIGlubGluZSB2b2lkIHNldFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInBhcmFtZXRlcnMiLCB2
YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgic3RhY2tU
cmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBzZXROZXR3b3JrUmVxdWVzdElk
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuZXR3
b3JrUmVxdWVzdElkIiwgdmFsdWUpOwogICAgfQp9OwoKY2xhc3MgQ2FsbEZyYW1lIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19T
RVQgPSAwLAogICAgICAgIEZVTkNUSU9OX05BTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFVSTF9T
RVQgPSAxIDw8IDEsCiAgICAgICAgTElORV9OVU1CRVJfU0VUID0gMSA8PCAyLAogICAgICAgIENP
TFVNTl9OVU1CRVJfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKEZVTkNU
SU9OX05BTUVfU0VUIHwgVVJMX1NFVCB8IExJTkVfTlVNQkVSX1NFVCB8IENPTFVNTl9OVU1CRVJf
U0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAg
ICAgICAgaW5saW5lIEJ1aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBGVU5DVElPTl9OQU1FX1NF
VD4mIHNldEZ1bmN0aW9uTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlVOQ1RJT05fTkFNRV9TRVQpLCBwcm9wZXJ0eV9mdW5j
dGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJm
dW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlVOQ1RJ
T05fTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8
IFVSTF9TRVQ+JiBzZXRVcmwoU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGluZU51bWJlcihTdHJpbmcg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElO
RV9OVU1CRVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
aW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBDT0xVTU5fTlVNQkVSX1NFVD4mIHNldENvbHVtbk51bWJl
cihTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ09MVU1OX05VTUJFUl9TRVQpLCBwcm9wZXJ0eV9jb2x1bW5OdW1iZXJfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjb2x1bW5OdW1iZXIiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09MVU1OX05VTUJFUl9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUmVmUHRyPENhbGxGcmFtZT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBp
bmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+ICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2Fs
bEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2Fs
bEZyYW1lOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAgICog
ICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikKICAgICAqICAg
ICAuc2V0Q29sdW1uTnVtYmVyKC4uLik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KCk7CiAgICB9Cn07Cgp9IC8vIENvbnNvbGUKbmFtZXNwYWNlIE5ldHdvcmsg
ewovKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIExvYWRlcklk
OwoKLyogVW5pcXVlIHJlcXVlc3QgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgUmVxdWVz
dElkOwoKY2xhc3MgUmVzb3VyY2VUaW1pbmcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgUkVRVUVT
VF9USU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBQUk9YWV9TVEFSVF9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgUFJPWFlfRU5EX1NFVCA9IDEgPDwgMiwKICAgICAgICBETlNfU1RBUlRfU0VUID0gMSA8
PCAzLAogICAgICAgIEROU19FTkRfU0VUID0gMSA8PCA0LAogICAgICAgIENPTk5FQ1RfU1RBUlRf
U0VUID0gMSA8PCA1LAogICAgICAgIENPTk5FQ1RfRU5EX1NFVCA9IDEgPDwgNiwKICAgICAgICBT
U0xfU1RBUlRfU0VUID0gMSA8PCA3LAogICAgICAgIFNTTF9FTkRfU0VUID0gMSA8PCA4LAogICAg
ICAgIFNFTkRfU1RBUlRfU0VUID0gMSA8PCA5LAogICAgICAgIFNFTkRfRU5EX1NFVCA9IDEgPDwg
MTAsCiAgICAgICAgUkVDRUlWRV9IRUFERVJTX0VORF9TRVQgPSAxIDw8IDExLAogICAgICAgIEFM
TF9GSUVMRFNfU0VUID0gKFJFUVVFU1RfVElNRV9TRVQgfCBQUk9YWV9TVEFSVF9TRVQgfCBQUk9Y
WV9FTkRfU0VUIHwgRE5TX1NUQVJUX1NFVCB8IEROU19FTkRfU0VUIHwgQ09OTkVDVF9TVEFSVF9T
RVQgfCBDT05ORUNUX0VORF9TRVQgfCBTU0xfU1RBUlRfU0VUIHwgU1NMX0VORF9TRVQgfCBTRU5E
X1NUQVJUX1NFVCB8IFNFTkRfRU5EX1NFVCB8IFJFQ0VJVkVfSEVBREVSU19FTkRfU0VUKQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5s
aW5lIEJ1aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0K
CiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBSRVFVRVNUX1RJTUVfU0VUPiYgc2V0UmVx
dWVzdFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFJFUVVFU1RfVElNRV9TRVQpLCBwcm9wZXJ0eV9yZXF1ZXN0VGltZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlcXVlc3RUaW1lIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJFUVVFU1RfVElNRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFBST1hZX1NUQVJUX1NF
VD4mIHNldFByb3h5U3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX1NUQVJUX1NFVCksIHByb3BlcnR5X3Byb3h5U3Rh
cnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eVN0
YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBST1hZX1NUQVJUX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgUFJPWFlfRU5E
X1NFVD4mIHNldFByb3h5RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQUk9YWV9FTkRfU0VUKSwgcHJvcGVydHlfcHJveHlFbmRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eUVuZCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQUk9YWV9FTkRfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBETlNfU1RBUlRfU0VUPiYg
c2V0RG5zU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEROU19TVEFSVF9TRVQpLCBwcm9wZXJ0eV9kbnNTdGFydF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRuc1N0YXJ0IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEROU19TVEFSVF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IEROU19FTkRfU0VUPiYgc2V0RG5zRW5k
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBETlNfRU5EX1NFVCksIHByb3BlcnR5X2Ruc0VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRuc0VuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxETlNfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBC
dWlsZGVyPFNUQVRFIHwgQ09OTkVDVF9TVEFSVF9TRVQ+JiBzZXRDb25uZWN0U3RhcnQoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENP
Tk5FQ1RfU1RBUlRfU0VUKSwgcHJvcGVydHlfY29ubmVjdFN0YXJ0X2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdFN0YXJ0IiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENPTk5FQ1RfU1RBUlRfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBDT05ORUNUX0VORF9TRVQ+JiBzZXRDb25u
ZWN0RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDT05ORUNUX0VORF9TRVQpLCBwcm9wZXJ0eV9jb25uZWN0RW5kX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdEVuZCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05ORUNUX0VORF9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNTTF9TVEFSVF9TRVQ+JiBzZXRT
c2xTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU1NMX1NUQVJUX1NFVCksIHByb3BlcnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1NMX1NUQVJUX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1NMX0VORF9TRVQ+JiBzZXRTc2xFbmQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNTTF9FTkRfU0VUKSwgcHJvcGVydHlfc3NsRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic3NsRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNTTF9FTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxk
ZXI8U1RBVEUgfCBTRU5EX1NUQVJUX1NFVD4mIHNldFNlbmRTdGFydChkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0VORF9TVEFSVF9T
RVQpLCBwcm9wZXJ0eV9zZW5kU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJzZW5kU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U0VORF9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRl
cjxTVEFURSB8IFNFTkRfRU5EX1NFVD4mIHNldFNlbmRFbmQoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTkRfRU5EX1NFVCksIHBy
b3BlcnR5X3NlbmRFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzZW5kRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTkRf
RU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgUkVD
RUlWRV9IRUFERVJTX0VORF9TRVQ+JiBzZXRSZWNlaXZlSGVhZGVyc0VuZChkb3VibGUgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVDRUlWRV9I
RUFERVJTX0VORF9TRVQpLCBwcm9wZXJ0eV9yZWNlaXZlSGVhZGVyc0VuZF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlY2VpdmVIZWFkZXJzRW5kIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJFQ0VJVkVfSEVBREVSU19FTkRfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxSZXNvdXJjZVRp
bWluZz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVzb3VyY2VUaW1pbmc+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlVGltaW5n
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJ
RUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlVGltaW5nPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPFJlc291cmNlVGltaW5nPiByZXN1bHQgPSBSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0UmVxdWVzdFRpbWUoLi4uKQogICAgICogICAgIC5zZXRQcm94eVN0YXJ0KC4u
LikKICAgICAqICAgICAuc2V0UHJveHlFbmQoLi4uKQogICAgICogICAgIC5zZXREbnNTdGFydCgu
Li4pCiAgICAgKiAgICAgLnNldERuc0VuZCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3RTdGFy
dCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3RFbmQoLi4uKQogICAgICogICAgIC5zZXRTc2xT
dGFydCguLi4pCiAgICAgKiAgICAgLnNldFNzbEVuZCguLi4pCiAgICAgKiAgICAgLnNldFNlbmRT
dGFydCguLi4pCiAgICAgKiAgICAgLnNldFNlbmRFbmQoLi4uKQogICAgICogICAgIC5zZXRSZWNl
aXZlSGVhZGVyc0VuZCguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9f
RklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVM
RFNfU0VUPigpOwogICAgfQp9OwoKY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAgIE1FVEhPRF9TRVQgPSAxIDw8IDEsCiAgICAgICAg
SEVBREVSU19TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8
IE1FVEhPRF9TRVQgfCBIRUFERVJTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gaW5saW5lIEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVyKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNU
QVRFIHwgVVJMX1NFVD4mIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
aW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBNRVRIT0RfU0VUPiYgc2V0TWV0aG9kKFN0cmluZyB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNRVRIT0Rf
U0VUKSwgcHJvcGVydHlfbWV0aG9kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWV0aG9kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE1FVEhPRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8
IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NF
VCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0
cjxSZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXF1ZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXF1ZXN0PiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVxdWVzdD4gcmVz
dWx0ID0gUmVxdWVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAg
ICAuc2V0TWV0aG9kKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAg
ICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQoKICAgIGlubGluZSB2
b2lkIHNldFBvc3REYXRhKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJwb3N0RGF0YSIsIHZhbHVlKTsKICAgIH0KfTsKCmNsYXNzIFJlc3BvbnNlIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgU1RBVFVTX1NF
VCA9IDEgPDwgMSwKICAgICAgICBTVEFUVVNfVEVYVF9TRVQgPSAxIDw8IDIsCiAgICAgICAgSEVB
REVSU19TRVQgPSAxIDw8IDMsCiAgICAgICAgTUlNRV9UWVBFX1NFVCA9IDEgPDwgNCwKICAgICAg
ICBDT05ORUNUSU9OX1JFVVNFRF9TRVQgPSAxIDw8IDUsCiAgICAgICAgQ09OTkVDVElPTl9JRF9T
RVQgPSAxIDw8IDYsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IFNUQVRVU19T
RVQgfCBTVEFUVVNfVEVYVF9TRVQgfCBIRUFERVJTX1NFVCB8IE1JTUVfVFlQRV9TRVQgfCBDT05O
RUNUSU9OX1JFVVNFRF9TRVQgfCBDT05ORUNUSU9OX0lEX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVyKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19T
RVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChTdHJpbmcgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5
X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEFUVVNfU0VUPiYgc2V0U3RhdHVz
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTVEFUVVNfU0VUKSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFNUQVRVU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVp
bGRlcjxTVEFURSB8IFNUQVRVU19URVhUX1NFVD4mIHNldFN0YXR1c1RleHQoU3RyaW5nIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19U
RVhUX1NFVCksIHByb3BlcnR5X3N0YXR1c1RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0dXNUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFNUQVRVU19URVhUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEhFQURFUlNfU0VUKSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SEVBREVSU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxp
bmUgQnVpbGRlcjxTVEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShTdHJpbmcgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTUlNRV9U
WVBFX1NFVCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TUlNRV9UWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWls
ZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9SRVVTRURfU0VUPiYgc2V0Q29ubmVjdGlvblJldXNlZChi
b29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENPTk5FQ1RJT05fUkVVU0VEX1NFVCksIHByb3BlcnR5X2Nvbm5lY3Rpb25SZXVzZWRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29ubmVjdGlvblJldXNl
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05ORUNUSU9OX1JFVVNF
RF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IENPTk5F
Q1RJT05fSURfU0VUPiYgc2V0Q29ubmVjdGlvbklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDT05ORUNUSU9OX0lEX1NFVCksIHBy
b3BlcnR5X2Nvbm5lY3Rpb25JZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoImNvbm5lY3Rpb25JZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDT05ORUNUSU9OX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVy
YXRvciBSZWZQdHI8UmVzcG9uc2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc3BvbnNlPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNw
b25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxSZXNwb25zZT4gcmVzdWx0ID0gUmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVy
bCguLi4pCiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pCiAgICAgKiAgICAgLnNldFN0YXR1c1Rl
eHQoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLikKICAgICAqICAgICAuc2V0TWltZVR5
cGUoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0aW9uUmV1c2VkKC4uLikKICAgICAqICAgICAu
c2V0Q29ubmVjdGlvbklkKC4uLik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxO
T19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+KCk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0SGVhZGVyc1RleHQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImhlYWRlcnNUZXh0
IiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFJlcXVlc3RIZWFkZXJzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmpl
Y3QoInJlcXVlc3RIZWFkZXJzIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFJl
cXVlc3RIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygicmVxdWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIGlubGlu
ZSB2b2lkIHNldEZyb21EaXNrQ2FjaGUoYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRCb29sZWFuKCJmcm9tRGlza0NhY2hlIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lk
IHNldFRpbWluZyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1pbmciLCB2YWx1ZSk7CiAgICB9Cn07CgpjbGFzcyBXZWJT
b2NrZXRSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFJFUVVFU1RfS0VZM19TRVQgPSAx
IDw8IDAsCiAgICAgICAgSEVBREVSU19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoUkVRVUVTVF9LRVkzX1NFVCB8IEhFQURFUlNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5saW5lIEJ1aWxkZXIoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5l
IEJ1aWxkZXI8U1RBVEUgfCBSRVFVRVNUX0tFWTNfU0VUPiYgc2V0UmVxdWVzdEtleTMoU3RyaW5n
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJF
UVVFU1RfS0VZM19TRVQpLCBwcm9wZXJ0eV9yZXF1ZXN0S2V5M19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInJlcXVlc3RLZXkzIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFJFUVVFU1RfS0VZM19TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2ViU29j
a2V0UmVxdWVzdD4gcmVzdWx0ID0gV2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0UmVxdWVzdEtleTMoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAg
Ki8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9Cn07CgpjbGFz
cyBXZWJTb2NrZXRSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVEFUVVNfU0VUID0g
MSA8PCAwLAogICAgICAgIFNUQVRVU19URVhUX1NFVCA9IDEgPDwgMSwKICAgICAgICBIRUFERVJT
X1NFVCA9IDEgPDwgMiwKICAgICAgICBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUID0gMSA8PCAzLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUQVRVU19TRVQgfCBTVEFUVVNfVEVYVF9TRVQgfCBI
RUFERVJTX1NFVCB8IENIQUxMRU5HRV9SRVNQT05TRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUg
QnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19TRVQpLCBw
cm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVT
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RBVFVT
X1RFWFRfU0VUPiYgc2V0U3RhdHVzVGV4dChTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1RFWFRfU0VUKSwgcHJvcGVydHlf
c3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InN0YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVT
X1RFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBI
RUFERVJTX1NFVD4mIHNldEhlYWRlcnMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVBREVSU19TRVQp
LCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxI
RUFERVJTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwg
Q0hBTExFTkdFX1JFU1BPTlNFX1NFVD4mIHNldENoYWxsZW5nZVJlc3BvbnNlKFN0cmluZyB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDSEFMTEVO
R0VfUkVTUE9OU0VfU0VUKSwgcHJvcGVydHlfY2hhbGxlbmdlUmVzcG9uc2VfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNwb25zZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDSEFMTEVOR0VfUkVTUE9OU0VfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxXZWJTb2NrZXRS
ZXNwb25zZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPFdlYlNvY2tl
dFJlc3BvbnNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiByZXN1bHQgPSBXZWJTb2NrZXRSZXNw
b25zZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0
U3RhdHVzVGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5z
ZXRDaGFsbGVuZ2VSZXNwb25zZSguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPigpOwogICAgfQp9OwoKY2xhc3MgQ2FjaGVkUmVzb3VyY2UgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NF
VCA9IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwg
MSwKICAgICAgICBSRVNQT05TRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgQk9EWV9TSVpFX1NFVCA9
IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwgVFlQRV9TRVQgfCBS
RVNQT05TRV9TRVQgfCBCT0RZX1NJWkVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxpbmUg
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5saW5lIEJ1aWxkZXIoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8
U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShTdHJpbmcgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQp
LCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgUkVTUE9OU0Vf
U0VUPiYgc2V0UmVzcG9uc2UoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVTUE9OU0VfU0VUKSwgcHJv
cGVydHlfcmVzcG9uc2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2Jq
ZWN0KCJyZXNwb25zZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNQ
T05TRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IEJP
RFlfU0laRV9TRVQ+JiBzZXRCb2R5U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQk9EWV9TSVpFX1NFVCksIHByb3BlcnR5X2Jv
ZHlTaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9k
eVNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Qk9EWV9TSVpFX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQdHI8Q2FjaGVkUmVz
b3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhY2hlZFJlc291cmNlPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJj
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9G
SUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxDYWNoZWRSZXNvdXJjZT4gcmVzdWx0ID0gQ2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAg
IC5zZXRSZXNwb25zZSguLi4pCiAgICAgKiAgICAgLnNldEJvZHlTaXplKC4uLik7CiAgICAgKi8K
ICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9Cn07CgpjbGFzcyBJ
bml0aWF0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoVFlQRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRl
cjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQdHI8SW5pdGlhdG9yPiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxJbml0aWF0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBv
cGVyYXRvciBQYXNzUmVmUHRyPEluaXRpYXRvcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbml0aWF0b3I+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJbml0aWF0b3I6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgaW5saW5lIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBzZXRTdGFj
a1RyYWNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lk
IHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
ZygidXJsIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldExpbmVOdW1iZXIoZG91
YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJlciIsIHZh
bHVlKTsKICAgIH0KfTsKCn0gLy8gTmV0d29yawpuYW1lc3BhY2UgRGF0YWJhc2UgewpjbGFzcyBE
YXRhYmFzZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBJRF9TRVQgPSAxIDw8IDAsCiAgICAgICAg
RE9NQUlOX1NFVCA9IDEgPDwgMSwKICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMiwKICAgICAgICBW
RVJTSU9OX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChJRF9TRVQgfCBE
T01BSU5fU0VUIHwgTkFNRV9TRVQgfCBWRVJTSU9OX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
aW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVyKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBC
dWlsZGVyPFNUQVRFIHwgSURfU0VUPiYgc2V0SWQoU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElEX1NFVCksIHByb3BlcnR5X2lkX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaWQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SURfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBET01BSU5fU0VUPiYgc2V0RG9tYWluKFN0cmluZyB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBET01B
SU5fU0VUKSwgcHJvcGVydHlfZG9tYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiZG9tYWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPERPTUFJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFU
RSB8IE5BTUVfU0VUPiYgc2V0TmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgVkVSU0lPTl9TRVQ+JiBzZXRWZXJzaW9uKFN0cmlu
ZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBW
RVJTSU9OX1NFVCksIHByb3BlcnR5X3ZlcnNpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJ2ZXJzaW9uIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFZFUlNJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJh
dG9yIFJlZlB0cjxEYXRhYmFzZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RGF0YWJhc2U+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPERhdGFi
YXNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxM
X0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PERhdGFiYXNlPiByZXN1bHQgPSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQo
Li4uKQogICAgICogICAgIC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXROYW1lKC4uLikK
ICAgICAqICAgICAuc2V0VmVyc2lvbiguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOT19GSUVMRFNfU0VUPigpOwogICAgfQp9OwoKfSAvLyBEYXRhYmFzZQpuYW1lc3BhY2UgRE9N
U3RvcmFnZSB7CmNsYXNzIEVudHJ5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIEhPU1RfU0VUID0g
MSA8PCAwLAogICAgICAgIElTX0xPQ0FMX1NUT1JBR0VfU0VUID0gMSA8PCAxLAogICAgICAgIElE
X1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChIT1NUX1NFVCB8IElTX0xP
Q0FMX1NUT1JBR0VfU0VUIHwgSURfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxpbmUgQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5saW5lIEJ1aWxkZXIoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RB
VEUgfCBIT1NUX1NFVD4mIHNldEhvc3QoU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhPU1RfU0VUKSwgcHJvcGVydHlfaG9zdF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhvc3QiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SE9TVF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IElTX0xPQ0FMX1NUT1JBR0VfU0VUPiYgc2V0SXNM
b2NhbFN0b3JhZ2UoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBJU19MT0NBTF9TVE9SQUdFX1NFVCksIHByb3BlcnR5X2lzTG9jYWxTdG9y
YWdlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzTG9j
YWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0xPQ0FM
X1NUT1JBR0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUg
fCBJRF9TRVQ+JiBzZXRJZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VUKSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3Bl
cmF0b3IgUmVmUHRyPEVudHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFbnRyeT4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFBhc3NSZWZQdHI8RW50cnk+ICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8RW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RW50cnk+IHJl
c3VsdCA9IEVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRIb3N0KC4uLikKICAgICAqICAg
ICAuc2V0SXNMb2NhbFN0b3JhZ2UoLi4uKQogICAgICogICAgIC5zZXRJZCguLi4pOwogICAgICov
CiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQp9OwoKfSAvLyBE
T01TdG9yYWdlCm5hbWVzcGFjZSBBcHBsaWNhdGlvbkNhY2hlIHsKY2xhc3MgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAg
ICAgICAgU0laRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDIsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IFNJWkVfU0VUIHwgVFlQRV9TRVQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxp
bmUgQnVpbGRlcigpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoK
ICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoU3RyaW5nIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9T
RVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU0laRV9TRVQ+
JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxk
ZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExf
RklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291
cmNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
cmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0VHlwZSgu
Li4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAg
fQp9OwoKY2xhc3MgQXBwbGljYXRpb25DYWNoZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBNQU5J
RkVTVF9VX1JfTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgU0laRV9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgQ1JFQVRJT05fVElNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgVVBEQVRFX1RJTUVfU0VUID0g
MSA8PCAzLAogICAgICAgIFJFU09VUkNFU19TRVQgPSAxIDw8IDQsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoTUFOSUZFU1RfVV9SX0xfU0VUIHwgU0laRV9TRVQgfCBDUkVBVElPTl9USU1FX1NF
VCB8IFVQREFURV9USU1FX1NFVCB8IFJFU09VUkNFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUg
QnVpbGRlcjxTVEFURSB8IE1BTklGRVNUX1VfUl9MX1NFVD4mIHNldE1hbmlmZXN0VVJMKFN0cmlu
ZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
QU5JRkVTVF9VX1JfTF9TRVQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJMIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BTklGRVNUX1VfUl9MX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU0laRV9TRVQ+JiBzZXRTaXplKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
SVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBD
UkVBVElPTl9USU1FX1NFVD4mIHNldENyZWF0aW9uVGltZShkb3VibGUgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ1JFQVRJT05fVElNRV9TRVQp
LCBwcm9wZXJ0eV9jcmVhdGlvblRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJjcmVhdGlvblRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Q1JFQVRJT05fVElNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUg
QnVpbGRlcjxTVEFURSB8IFVQREFURV9USU1FX1NFVD4mIHNldFVwZGF0ZVRpbWUoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVQREFU
RV9USU1FX1NFVCksIHByb3BlcnR5X3VwZGF0ZVRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFVQREFURV9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgUkVTT1VSQ0VTX1NFVD4mIHNldFJlc291cmNlcyhSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8QXBw
bGljYXRpb25DYWNoZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0TWFuaWZlc3RVUkwoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAq
ICAgICAuc2V0Q3JlYXRpb25UaW1lKC4uLikKICAgICAqICAgICAuc2V0VXBkYXRlVGltZSguLi4p
CiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQp9OwoKY2xhc3MgRnJhbWVXaXRoTWFuaWZlc3Qg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9f
RklFTERTX1NFVCA9IDAsCiAgICAgICAgRlJBTUVfSURfU0VUID0gMSA8PCAwLAogICAgICAgIE1B
TklGRVNUX1VfUl9MX1NFVCA9IDEgPDwgMSwKICAgICAgICBTVEFUVVNfU0VUID0gMSA8PCAyLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKEZSQU1FX0lEX1NFVCB8IE1BTklGRVNUX1VfUl9MX1NF
VCB8IFNUQVRVU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGluZSBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
IHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IEZSQU1F
X0lEX1NFVD4mIHNldEZyYW1lSWQoU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZSQU1FX0lEX1NFVCksIHByb3BlcnR5X2ZyYW1lSWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX0lEX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgTUFOSUZFU1RfVV9SX0xfU0VU
PiYgc2V0TWFuaWZlc3RVUkwoU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1BTklGRVNUX1VfUl9MX1NFVCksIHByb3BlcnR5X21hbmlm
ZXN0VVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWFu
aWZlc3RVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFOSUZFU1Rf
VV9SX0xfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBT
VEFUVVNfU0VUPiYgc2V0U3RhdHVzKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFUVVNfU0VUKSwgcHJvcGVydHlfc3RhdHVzX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUQVRVU19TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgaW5saW5lIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+ICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
RnJhbWVXaXRoTWFuaWZlc3Q+IHJlc3VsdCA9IEZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRGcmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0TWFuaWZlc3RVUkwoLi4u
KQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKTsKICAgICAqLwogICAgaW5saW5lIHN0YXRpYyBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KfTsKCn0gLy8gQXBwbGljYXRpb25DYWNoZQpuYW1l
c3BhY2UgRE9NIHsKY2xhc3MgTm9kZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOT0RFX0lEX1NF
VCA9IDEgPDwgMCwKICAgICAgICBOT0RFX1RZUEVfU0VUID0gMSA8PCAxLAogICAgICAgIE5PREVf
TkFNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgTE9DQUxfTkFNRV9TRVQgPSAxIDw8IDMsCiAgICAg
ICAgTk9ERV9WQUxVRV9TRVQgPSAxIDw8IDQsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTk9E
RV9JRF9TRVQgfCBOT0RFX1RZUEVfU0VUIHwgTk9ERV9OQU1FX1NFVCB8IExPQ0FMX05BTUVfU0VU
IHwgTk9ERV9WQUxVRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGluZSBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IE5P
REVfSURfU0VUPiYgc2V0Tm9kZUlkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX0lEX1NFVCksIHByb3BlcnR5X25vZGVJZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX0lEX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgTk9ERV9UWVBFX1NFVD4mIHNldE5vZGVU
eXBlKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBOT0RFX1RZUEVfU0VUKSwgcHJvcGVydHlfbm9kZVR5cGVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlVHlwZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX1RZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
aW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX05BTUVfU0VUPiYgc2V0Tm9kZU5hbWUoU3RyaW5n
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5P
REVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUg
QnVpbGRlcjxTVEFURSB8IExPQ0FMX05BTUVfU0VUPiYgc2V0TG9jYWxOYW1lKFN0cmluZyB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMT0NBTF9O
QU1FX1NFVCksIHByb3BlcnR5X2xvY2FsTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImxvY2FsTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxMT0NBTF9OQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBC
dWlsZGVyPFNUQVRFIHwgTk9ERV9WQUxVRV9TRVQ+JiBzZXROb2RlVmFsdWUoU3RyaW5nIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfVkFM
VUVfU0VUKSwgcHJvcGVydHlfbm9kZVZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibm9kZVZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE5PREVfVkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9w
ZXJhdG9yIFJlZlB0cjxOb2RlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxOb2RlPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxOb2RlPiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19T
RVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPE5vZGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Tm9kZT4gcmVzdWx0
ID0gTm9kZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAu
c2V0Tm9kZVR5cGUoLi4uKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAgICAgKiAgICAg
LnNldExvY2FsTmFtZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVWYWx1ZSguLi4pOwogICAgICov
CiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQoKICAgIGlubGlu
ZSB2b2lkIHNldENoaWxkTm9kZUNvdW50KGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXROdW1iZXIoImNoaWxkTm9kZUNvdW50IiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lk
IHNldENoaWxkcmVuKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAgIH0KCiAgICBpbmxpbmUg
dm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldEFycmF5KCJhdHRyaWJ1dGVzIiwgdmFsdWUpOwogICAgfQoKICAg
IGlubGluZSB2b2lkIHNldERvY3VtZW50VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICBp
bmxpbmUgdm9pZCBzZXRQdWJsaWNJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygicHVibGljSWQiLCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZv
aWQgc2V0U3lzdGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInN5c3RlbUlkIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldElu
dGVybmFsU3Vic2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJpbnRlcm5hbFN1YnNldCIsIHZhbHVlKTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBz
ZXRYbWxWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJ4bWxWZXJzaW9uIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldE5h
bWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5h
bWUiLCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwog
ICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCn07CgpjbGFzcyBFdmVu
dExpc3RlbmVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFRZUEVfU0VUID0gMSA8PCAwLAogICAg
ICAgIFVTRV9DQVBUVVJFX1NFVCA9IDEgPDwgMSwKICAgICAgICBJU19BVFRSSUJVVEVfU0VUID0g
MSA8PCAyLAogICAgICAgIE5PREVfSURfU0VUID0gMSA8PCAzLAogICAgICAgIEhBTkRMRVJfQk9E
WV9TRVQgPSAxIDw8IDQsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVFlQRV9TRVQgfCBVU0Vf
Q0FQVFVSRV9TRVQgfCBJU19BVFRSSUJVVEVfU0VUIHwgTk9ERV9JRF9TRVQgfCBIQU5ETEVSX0JP
RFlfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6
CiAgICAgICAgaW5saW5lIEJ1aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNl
dFR5cGUoU3RyaW5nIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRl
cjxTVEFURSB8IFVTRV9DQVBUVVJFX1NFVD4mIHNldFVzZUNhcHR1cmUoYm9vbCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVU0VfQ0FQVFVSRV9T
RVQpLCBwcm9wZXJ0eV91c2VDYXB0dXJlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEJvb2xlYW4oInVzZUNhcHR1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VVNFX0NBUFRVUkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1
aWxkZXI8U1RBVEUgfCBJU19BVFRSSUJVVEVfU0VUPiYgc2V0SXNBdHRyaWJ1dGUoYm9vbCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJU19BVFRS
SUJVVEVfU0VUKSwgcHJvcGVydHlfaXNBdHRyaWJ1dGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiaXNBdHRyaWJ1dGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SVNfQVRUUklCVVRFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgTk9ERV9JRF9TRVQ+JiBzZXROb2RlSWQoaW50IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfSURf
U0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUg
fCBIQU5ETEVSX0JPRFlfU0VUPiYgc2V0SGFuZGxlckJvZHkoU3RyaW5nIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhBTkRMRVJfQk9EWV9TRVQp
LCBwcm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEhBTkRMRVJfQk9EWV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3Bl
cmF0b3IgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEV2ZW50TGlzdGVu
ZXI+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFdmVudExpc3RlbmVyPiByZXN1bHQgPSBFdmVudExpc3Rl
bmVyOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0VXNl
Q2FwdHVyZSguLi4pCiAgICAgKiAgICAgLnNldElzQXR0cmlidXRlKC4uLikKICAgICAqICAgICAu
c2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0SGFuZGxlckJvZHkoLi4uKTsKICAgICAqLwog
ICAgaW5saW5lIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KCiAgICBpbmxpbmUg
dm9pZCBzZXRMb2NhdGlvbihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgIH0KfTsKCmNs
YXNzIFJHQkEgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgUl9TRVQgPSAxIDw8IDAsCiAgICAgICAg
R19TRVQgPSAxIDw8IDEsCiAgICAgICAgQl9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoUl9TRVQgfCBHX1NFVCB8IEJfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxp
bmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5saW5lIEJ1aWxkZXIoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxk
ZXI8U1RBVEUgfCBSX1NFVD4mIHNldFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJfU0VUKSwgcHJvcGVydHlfcl9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Ul9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVp
bGRlcjxTVEFURSB8IEdfU0VUPiYgc2V0RyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgR19TRVQpLCBwcm9wZXJ0eV9nX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxHX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBC
dWlsZGVyPFNUQVRFIHwgQl9TRVQ+JiBzZXRCKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCX1NFVCksIHByb3BlcnR5X2JfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJiIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5l
IG9wZXJhdG9yIFJlZlB0cjxSR0JBPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSR0JBPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxSR0JBPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFJHQkE+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UkdCQT4gcmVz
dWx0ID0gUkdCQTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0UiguLi4pCiAgICAgKiAgICAgLnNl
dEcoLi4uKQogICAgICogICAgIC5zZXRCKC4uLik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0QShkb3VibGUg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9
OwoKY2xhc3MgSGlnaGxpZ2h0Q29uZmlnIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIEFMTF9GSUVM
RFNfU0VUID0gMAogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJs
aWM6CiAgICAgICAgaW5saW5lIEJ1aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxIaWdobGlnaHRD
b25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFBhc3NSZWZQdHI8SGlnaGxpZ2h0Q29u
ZmlnPiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxM
X0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxIaWdobGlnaHRDb25maWc+IHJlc3VsdCA9IEhpZ2hsaWdodENvbmZpZzo6Y3JlYXRl
KCk7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9
CgogICAgaW5saW5lIHZvaWQgc2V0U2hvd0luZm8oYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRCb29sZWFuKCJzaG93SW5mbyIsIHZhbHVlKTsKICAgIH0KCiAgICBpbmxpbmUgdm9p
ZCBzZXRDb250ZW50Q29sb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiY29udGVudENvbG9yIiwgdmFsdWUpOwogICAgfQoK
ICAgIGlubGluZSB2b2lkIHNldFBhZGRpbmdDb2xvcihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29sb3IiLCB2
YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0Qm9yZGVyQ29sb3IoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiYm9y
ZGVyQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0TWFyZ2luQ29sb3Io
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE9iamVjdCgibWFyZ2luQ29sb3IiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIERPTQpuYW1lc3Bh
Y2UgQ1NTIHsKY2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9T
SEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAg
ICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJp
dmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBp
bmxpbmUgQnVpbGRlcigpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
fQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NIRUVUX0lEX1NFVD4mIHNl
dFN0eWxlU2hlZXRJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVl
dElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVT
aGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVU
X0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgT1JE
SU5BTF9TRVQ+JiBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPUkRJTkFMX1NFVCksIHByb3BlcnR5X29yZGluYWxfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9SRElOQUxfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUlkPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpbmxp
bmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0
eWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVJZD4gcmVzdWx0ID0gQ1NT
U3R5bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAq
ICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPigpOwogICAgfQp9OwoKY2xhc3MgQ1NTUnVsZUlkIDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAog
ICAgICAgIFNUWUxFX1NIRUVUX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBPUkRJTkFMX1NFVCA9
IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTVFlMRV9TSEVFVF9JRF9TRVQgfCBP
UkRJTkFMX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVi
bGljOgogICAgICAgIGlubGluZSBCdWlsZGVyKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hF
RVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElkKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9w
ZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxk
ZXI8U1RBVEUgfCBPUkRJTkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxfU0VUKSwgcHJvcGVy
dHlfb3JkaW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
Im9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JESU5BTF9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGVJ
ZD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExf
RklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NSdWxlSWQ+ICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8Q1NTUnVsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1J1bGVJZD4gcmVz
dWx0ID0gQ1NTUnVsZUlkOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4u
KQogICAgICogICAgIC5zZXRPcmRpbmFsKC4uLik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9Cn07CgpjbGFzcyBDU1NOb2RlU3R5bGVzIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxE
U19TRVQgPSAwLAogICAgICAgIENPTVBVVEVEX1NUWUxFX1NFVCA9IDEgPDwgMCwKICAgICAgICBN
QVRDSEVEX0NTU19SVUxFU19TRVQgPSAxIDw8IDEsCiAgICAgICAgU1RZTEVfQVRUUklCVVRFU19T
RVQgPSAxIDw8IDIsCiAgICAgICAgUFNFVURPX0VMRU1FTlRTX1NFVCA9IDEgPDwgMywKICAgICAg
ICBJTkhFUklURURfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKENPTVBV
VEVEX1NUWUxFX1NFVCB8IE1BVENIRURfQ1NTX1JVTEVTX1NFVCB8IFNUWUxFX0FUVFJJQlVURVNf
U0VUIHwgUFNFVURPX0VMRU1FTlRTX1NFVCB8IElOSEVSSVRFRF9TRVQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRl
cigpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBp
bmxpbmUgQnVpbGRlcjxTVEFURSB8IENPTVBVVEVEX1NUWUxFX1NFVD4mIHNldENvbXB1dGVkU3R5
bGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09NUFVURURfU1RZTEVfU0VUKSwgcHJvcGVydHlfY29t
cHV0ZWRTdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
ImNvbXB1dGVkU3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09N
UFVURURfU1RZTEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RB
VEUgfCBNQVRDSEVEX0NTU19SVUxFU19TRVQ+JiBzZXRNYXRjaGVkQ1NTUnVsZXMoUmVmUHRyPElu
c3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNQVRDSEVEX0NTU19SVUxFU19TRVQpLCBwcm9wZXJ0eV9tYXRjaGVkQ1NTUnVs
ZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoIm1hdGNoZWRD
U1NSdWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVEX0NT
U19SVUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8
IFNUWUxFX0FUVFJJQlVURVNfU0VUPiYgc2V0U3R5bGVBdHRyaWJ1dGVzKFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU1RZTEVfQVRUUklCVVRFU19TRVQpLCBwcm9wZXJ0eV9zdHlsZUF0dHJpYnV0ZXNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInN0eWxlQXR0cmlidXRl
cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlMRV9BVFRSSUJVVEVT
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgUFNFVURP
X0VMRU1FTlRTX1NFVD4mIHNldFBzZXVkb0VsZW1lbnRzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUFNF
VURPX0VMRU1FTlRTX1NFVCksIHByb3BlcnR5X3BzZXVkb0VsZW1lbnRzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJwc2V1ZG9FbGVtZW50cyIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQU0VVRE9fRUxFTUVOVFNfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBJTkhFUklURURfU0VUPiYgc2V0
SW5oZXJpdGVkKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSU5IRVJJVEVEX1NFVCksIHByb3BlcnR5X2lu
aGVyaXRlZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiaW5o
ZXJpdGVkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElOSEVSSVRFRF9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUmVmUHRyPENTU05vZGVT
dHlsZXM+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU05vZGVTdHlsZXM+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPENTU05vZGVTdHlsZXM+
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q1NTTm9kZVN0eWxlcz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxDU1NOb2RlU3R5bGVzPiByZXN1bHQgPSBDU1NOb2RlU3R5bGVzOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRDb21wdXRlZFN0eWxlKC4uLikKICAgICAqICAgICAuc2V0TWF0Y2hlZENTU1J1bGVz
KC4uLikKICAgICAqICAgICAuc2V0U3R5bGVBdHRyaWJ1dGVzKC4uLikKICAgICAqICAgICAuc2V0
UHNldWRvRWxlbWVudHMoLi4uKQogICAgICogICAgIC5zZXRJbmhlcml0ZWQoLi4uKTsKICAgICAq
LwogICAgaW5saW5lIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KCiAgICBpbmxp
bmUgdm9pZCBzZXRJbmxpbmVTdHlsZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHZhbHVlKTsKICAg
IH0KfTsKCmNsYXNzIFBzZXVkb0lkUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgUFNFVURP
X0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBSVUxFU19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxM
X0ZJRUxEU19TRVQgPSAoUFNFVURPX0lEX1NFVCB8IFJVTEVTX1NFVCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVy
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgUFNFVURPX0lEX1NFVD4mIHNldFBzZXVkb0lkKGludCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQU0VVRE9f
SURfU0VUKSwgcHJvcGVydHlfcHNldWRvSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxQU0VVRE9fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxk
ZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRSdWxlcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJVTEVT
X1NFVCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxS
VUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUmVmUHRyPFBz
ZXVkb0lkUnVsZXM+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBzZXVkb0lkUnVsZXM+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPFBzZXVkb0lk
UnVsZXM+ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPiByZXN1bHQgPSBQc2V1ZG9JZFJ1bGVzOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRQc2V1ZG9JZCguLi4pCiAgICAgKiAgICAgLnNldFJ1bGVzKC4uLik7CiAg
ICAgKi8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9Cn07Cgpj
bGFzcyBJbmhlcml0ZWRTdHlsZUVudHJ5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE1BVENIRURf
Q1NTX1JVTEVTX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChNQVRDSEVE
X0NTU19SVUxFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGluZSBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
IHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IE1BVENI
RURfQ1NTX1JVTEVTX1NFVD4mIHNldE1hdGNoZWRDU1NSdWxlcyhSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1BVENIRURfQ1NTX1JVTEVTX1NFVCksIHByb3BlcnR5X21hdGNoZWRDU1NSdWxlc19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgibWF0Y2hlZENTU1J1bGVzIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BVENIRURfQ1NTX1JVTEVTX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQdHI8SW5oZXJpdGVk
U3R5bGVFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5o
ZXJpdGVkU3R5bGVFbnRyeT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5Pio+
KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9IElu
aGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NSdWxl
cyguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwog
ICAgfQoKICAgIGlubGluZSB2b2lkIHNldElubGluZVN0eWxlKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImlubGluZVN0eWxl
IiwgdmFsdWUpOwogICAgfQp9OwoKY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGUgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9
IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgU1RZTEVfU0VUID0gMSA8PCAx
LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgU1RZTEVfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5saW5l
IEJ1aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0KCiAg
ICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoU3RyaW5nIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVf
U0VUKSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFN
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNUWUxF
X1NFVD4mIHNldFN0eWxlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUWUxFX1NFVCksIHByb3BlcnR5
X3N0eWxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgic3R5
bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0
ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExf
RklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlQXR0cmli
dXRlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxM
X0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4u
Lik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9
Cn07CgpjbGFzcyBDU1NTdHlsZVNoZWV0SGVhZGVyIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNU
WUxFX1NIRUVUX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBTT1VSQ0VfVV9SX0xfU0VUID0gMSA8
PCAxLAogICAgICAgIFRJVExFX1NFVCA9IDEgPDwgMiwKICAgICAgICBESVNBQkxFRF9TRVQgPSAx
IDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgU09V
UkNFX1VfUl9MX1NFVCB8IFRJVExFX1NFVCB8IERJU0FCTEVEX1NFVCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVy
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElk
KFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0VfVV9SX0xfU0VU
PiYgc2V0U291cmNlVVJMKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfVV9SX0xfU0VUKSwgcHJvcGVydHlfc291cmNlVVJM
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlVVJM
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9VX1JfTF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFRJVExFX1NFVD4m
IHNldFRpdGxlKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUSVRMRV9TRVQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRJVExFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgRElTQUJMRURfU0VUPiYgc2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBESVNBQkxFRF9T
RVQpLCBwcm9wZXJ0eV9kaXNhYmxlZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRCb29sZWFuKCJkaXNhYmxlZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxESVNBQkxFRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3Ig
UmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlU2hl
ZXRIZWFkZXI+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRv
ciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5
bGVTaGVldEhlYWRlcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVh
ZGVyPiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRTb3VyY2VVUkwoLi4uKQogICAgICog
ICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNldERpc2FibGVkKC4uLik7CiAgICAgKi8K
ICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9Cn07CgpjbGFzcyBD
U1NTdHlsZVNoZWV0Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9T
RVQgPSAxIDw8IDAsCiAgICAgICAgUlVMRVNfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVM
RFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IFJVTEVTX1NFVCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWlsZGVy
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElk
KFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRS
dWxlcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJVTEVTX1NFVCksIHByb3BlcnR5X3J1bGVzX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSVUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBpbmxpbmUgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgaW5saW5lIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NT
U3R5bGVTaGVldEJvZHk+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRSdWxlcyguLi4pOwog
ICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQoKICAg
IGlubGluZSB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICB9Cn07CgpjbGFzcyBDU1NSdWxlIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIFJVTEVfSURfU0VUID0gMSA8PCAwLAogICAgICAgIFNFTEVD
VE9SX1RFWFRfU0VUID0gMSA8PCAxLAogICAgICAgIFNPVVJDRV9MSU5FX1NFVCA9IDEgPDwgMiwK
ICAgICAgICBPUklHSU5fU0VUID0gMSA8PCAzLAogICAgICAgIFNUWUxFX1NFVCA9IDEgPDwgNCwK
ICAgICAgICBBTExfRklFTERTX1NFVCA9IChSVUxFX0lEX1NFVCB8IFNFTEVDVE9SX1RFWFRfU0VU
IHwgU09VUkNFX0xJTkVfU0VUIHwgT1JJR0lOX1NFVCB8IFNUWUxFX1NFVCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWls
ZGVyKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJ
RUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAg
IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgUlVMRV9JRF9TRVQ+JiBzZXRSdWxlSWQoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgUlVMRV9JRF9TRVQpLCBwcm9wZXJ0eV9ydWxlSWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJydWxlSWQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8UlVMRV9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBp
bmxpbmUgQnVpbGRlcjxTVEFURSB8IFNFTEVDVE9SX1RFWFRfU0VUPiYgc2V0U2VsZWN0b3JUZXh0
KFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTRUxFQ1RPUl9URVhUX1NFVCksIHByb3BlcnR5X3NlbGVjdG9yVGV4dF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTRUxFQ1RPUl9URVhUX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU09VUkNFX0xJTkVfU0VUPiYg
c2V0U291cmNlTGluZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU09VUkNFX0xJTkVfU0VUKSwgcHJvcGVydHlfc291cmNlTGluZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U09VUkNFX0xJTkVfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBPUklHSU5fU0VUPiYgc2V0
T3JpZ2luKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBPUklHSU5fU0VUKSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE9SSUdJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxp
bmUgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NFVD4mIHNldFN0eWxlKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNUWUxFX1NFVCksIHByb3BlcnR5X3N0eWxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1RZTEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9y
IFJlZlB0cjxDU1NSdWxlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NSdWxlPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPENTU1J1bGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVs
ZT4gcmVzdWx0ID0gQ1NTUnVsZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0UnVsZUlkKC4uLikK
ICAgICAqICAgICAuc2V0U2VsZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291cmNlTGlu
ZSguLi4pCiAgICAgKiAgICAgLnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4u
Lik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9
CgogICAgaW5saW5lIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAg
aW5saW5lIHZvaWQgc2V0U2VsZWN0b3JSYW5nZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgdmFs
dWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldE1lZGlhKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRpYSIsIHZhbHVl
KTsKICAgIH0KfTsKCmNsYXNzIFNvdXJjZVJhbmdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNU
QVJUX1NFVCA9IDEgPDwgMCwKICAgICAgICBFTkRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKFNUQVJUX1NFVCB8IEVORF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVp
bGRlcjxTVEFURSB8IFNUQVJUX1NFVD4mIHNldFN0YXJ0KGludCB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFSVF9TRVQpLCBwcm9wZXJ0eV9z
dGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUQVJUX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgRU5EX1NFVD4mIHNldEVuZChp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RU5EX1NFVCksIHByb3BlcnR5X2VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoImVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxF
TkRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxTb3Vy
Y2VSYW5nZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U291cmNlUmFuZ2U+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPFNvdXJjZVJhbmdlPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFNvdXJjZVJhbmdlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNv
dXJjZVJhbmdlPiByZXN1bHQgPSBTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRFbmQoLi4uKTsKICAgICAqLwogICAgaW5saW5lIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KfTsKCmNsYXNzIENTU1N0eWxlIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxE
U19TRVQgPSAwLAogICAgICAgIFNUWUxFX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBDU1NfUFJP
UEVSVElFU19TRVQgPSAxIDw8IDEsCiAgICAgICAgU0hPUlRIQU5EX0VOVFJJRVNfU0VUID0gMSA8
PCAyLAogICAgICAgIFdJRFRIX1NFVCA9IDEgPDwgMywKICAgICAgICBIRUlHSFRfU0VUID0gMSA8
PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUWUxFX0lEX1NFVCB8IENTU19QUk9QRVJU
SUVTX1NFVCB8IFNIT1JUSEFORF9FTlRSSUVTX1NFVCB8IFdJRFRIX1NFVCB8IEhFSUdIVF9TRVQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAg
ICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNUWUxFX0lEX1NFVD4mIHNldFN0
eWxlSWQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVJ
ZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlSWQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfSURfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBDU1NfUFJPUEVSVElFU19T
RVQ+JiBzZXRDc3NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ1NTX1BST1BFUlRJRVNf
U0VUKSwgcHJvcGVydHlfY3NzUHJvcGVydGllc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxDU1NfUFJPUEVSVElFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBp
bmxpbmUgQnVpbGRlcjxTVEFURSB8IFNIT1JUSEFORF9FTlRSSUVTX1NFVD4mIHNldFNob3J0aGFu
ZEVudHJpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTSE9SVEhBTkRfRU5UUklFU19TRVQpLCBwcm9w
ZXJ0eV9zaG9ydGhhbmRFbnRyaWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEFycmF5KCJzaG9ydGhhbmRFbnRyaWVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNIT1JUSEFORF9FTlRSSUVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgV0lEVEhfU0VUPiYgc2V0V2lkdGgoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFdJRFRIX1NFVCksIHBy
b3BlcnR5X3dpZHRoX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigid2lkdGgiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8V0lEVEhfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBIRUlHSFRfU0VU
PiYgc2V0SGVpZ2h0KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBIRUlHSFRfU0VUKSwgcHJvcGVydHlfaGVpZ2h0X2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiaGVpZ2h0IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEhFSUdIVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBp
bmxpbmUgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHls
ZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8Q1NTU3R5bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGU+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9IENTU1N0eWxlOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRTdHlsZUlkKC4uLikKICAgICAqICAgICAuc2V0Q3NzUHJvcGVydGllcyguLi4pCiAg
ICAgKiAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoLi4uKQogICAgICogICAgIC5zZXRXaWR0aCgu
Li4pCiAgICAgKiAgICAgLnNldEhlaWdodCguLi4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldENzc1RleHQo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImNzc1Rl
eHQiLCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicmFu
Z2UiLCB2YWx1ZSk7CiAgICB9Cn07CgpjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBWQUxVRV9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgU0hPUlRIQU5EX05BTUVfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKE5BTUVfU0VUIHwgVkFMVUVfU0VUIHwgU0hPUlRIQU5EX05BTUVfU0VUKQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgICAgaW5saW5lIEJ1
aWxkZXIoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIH0KCiAgICAg
ICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoU3RyaW5nIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VU
KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFZBTFVFX1NF
VD4mIHNldFZhbHVlKFN0cmluZyB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBWQUxVRV9TRVQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFZBTFVFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlu
bGluZSBCdWlsZGVyPFNUQVRFIHwgU0hPUlRIQU5EX05BTUVfU0VUPiYgc2V0U2hvcnRoYW5kTmFt
ZShTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU0hPUlRIQU5EX05BTUVfU0VUKSwgcHJvcGVydHlfc2hvcnRoYW5kTmFtZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0hPUlRIQU5EX05BTUVfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxDU1NQcm9wZXJ0eT4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q1NTUHJvcGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1Byb3BlcnR5PiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPENTU1Byb3BlcnR5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1Byb3BlcnR5
PiByZXN1bHQgPSBDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAqICAgICAuc2V0U2hvcnRoYW5kTmFtZSgu
Li4pOwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAg
fQoKICAgIGlubGluZSB2b2lkIHNldFByaW9yaXR5KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHZhbHVlKTsKICAgIH0KCiAgICBp
bmxpbmUgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFBh
cnNlZE9rKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2Vk
T2siLCB2YWx1ZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0U3RhdHVzKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdGF0dXMiLCB2YWx1ZSk7
CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1ZSk7
CiAgICB9Cn07CgpjbGFzcyBDU1NNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBURVhUX1NF
VCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChURVhUX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBC
dWlsZGVyKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5P
X0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAg
ICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgVEVYVF9TRVQ+JiBzZXRUZXh0KFN0cmluZyB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBURVhUX1NF
VCksIHByb3BlcnR5X3RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRFWFRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJlZlB0cjxDU1NNZWRp
YT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExf
RklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTTWVkaWE+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPENTU01lZGlhPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPENTU01lZGlhPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU01lZGlhPiByZXN1bHQg
PSBDU1NNZWRpYTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICovCiAg
ICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQoKICAgIGlubGluZSB2
b2lkIHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFNvdXJj
ZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c291cmNlVVJMIiwgdmFsdWUpOwogICAgfQoKICAgIGlubGluZSB2b2lkIHNldFNvdXJjZUxpbmUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJj
ZUxpbmUiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIENTUwpuYW1lc3BhY2UgVGltZWxpbmUgewpj
bGFzcyBUaW1lbGluZUV2ZW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFRZUEVfU0VUID0gMSA8
PCAwLAogICAgICAgIERBVEFfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KFRZUEVfU0VUIHwgREFUQV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGluZSBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8
IFRZUEVfU0VUPiYgc2V0VHlwZShTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgREFUQV9TRVQ+JiBzZXREYXRhKFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIERBVEFfU0VUKSwgcHJvcGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8REFUQV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgb3BlcmF0b3Ig
UmVmUHRyPFRpbWVsaW5lRXZlbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFRpbWVsaW5lRXZlbnQ+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRy
PFRpbWVsaW5lRXZlbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VGltZWxpbmVFdmVudD4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxUaW1lbGluZUV2ZW50PiByZXN1bHQgPSBUaW1lbGluZUV2ZW50Ojpj
cmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0RGF0YSguLi4p
OwogICAgICovCiAgICBpbmxpbmUgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPigpOwogICAgfQoK
ICAgIGlubGluZSB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAg
IH0KfTsKCn0gLy8gVGltZWxpbmUKbmFtZXNwYWNlIERlYnVnZ2VyIHsKLyogQnJlYWtwb2ludCBp
ZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBCcmVha3BvaW50SWQ7CgovKiBVbmlxdWUgc2Ny
aXB0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFNjcmlwdElkOwoKLyogQ2FsbCBmcmFt
ZSBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBDYWxsRnJhbWVJZDsKCmNsYXNzIExvY2F0
aW9uIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNDUklQVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgTElORV9OVU1CRVJfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFND
UklQVF9JRF9TRVQgfCBMSU5FX05VTUJFUl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IGlubGlu
ZSBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgQnVpbGRlcigpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRl
cjxTVEFURSB8IFNDUklQVF9JRF9TRVQ+JiBzZXRTY3JpcHRJZChTdHJpbmcgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0NSSVBUX0lEX1NFVCks
IHByb3BlcnR5X3NjcmlwdElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic2NyaXB0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U0NSSVBUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIGlubGluZSBCdWlsZGVyPFNUQVRF
IHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9OVU1CRVJfU0VUKSwgcHJv
cGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TElORV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFJl
ZlB0cjxMb2NhdGlvbj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBQYXNzUmVmUHRyPExvY2F0aW9uPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPExvY2F0aW9uPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPExvY2F0
aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2NyaXB0SWQo
Li4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAgKi8KICAgIGlubGluZSBz
dGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KCk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgc2V0Q29s
dW1uTnVtYmVyKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImNvbHVt
bk51bWJlciIsIHZhbHVlKTsKICAgIH0KfTsKCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0g
MCwKICAgICAgICBDQUxMX0ZSQU1FX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBGVU5DVElPTl9O
QU1FX1NFVCA9IDEgPDwgMSwKICAgICAgICBMT0NBVElPTl9TRVQgPSAxIDw8IDIsCiAgICAgICAg
U0NPUEVfQ0hBSU5fU0VUID0gMSA8PCAzLAogICAgICAgIFRISVNfU0VUID0gMSA8PCA0LAogICAg
ICAgIEFMTF9GSUVMRFNfU0VUID0gKENBTExfRlJBTUVfSURfU0VUIHwgRlVOQ1RJT05fTkFNRV9T
RVQgfCBMT0NBVElPTl9TRVQgfCBTQ09QRV9DSEFJTl9TRVQgfCBUSElTX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBC
dWlsZGVyKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5P
X0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAg
ICAgIGlubGluZSBCdWlsZGVyPFNUQVRFIHwgQ0FMTF9GUkFNRV9JRF9TRVQ+JiBzZXRDYWxsRnJh
bWVJZChTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQ0FMTF9GUkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENBTExfRlJBTUVfSURfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBGVU5DVElPTl9OQU1FX1NF
VD4mIHNldEZ1bmN0aW9uTmFtZShTdHJpbmcgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlVOQ1RJT05fTkFNRV9TRVQpLCBwcm9wZXJ0eV9mdW5j
dGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJm
dW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlVOQ1RJ
T05fTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8
IExPQ0FUSU9OX1NFVD4mIHNldExvY2F0aW9uKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExPQ0FUSU9O
X1NFVCksIHByb3BlcnR5X2xvY2F0aW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TE9DQVRJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8
U1RBVEUgfCBTQ09QRV9DSEFJTl9TRVQ+JiBzZXRTY29wZUNoYWluKFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU0NPUEVfQ0hBSU5fU0VUKSwgcHJvcGVydHlfc2NvcGVDaGFpbl9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ09QRV9DSEFJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBpbmxpbmUgQnVpbGRlcjxTVEFURSB8IFRISVNfU0VUPiYgc2V0VGhpcyhSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUSElTX1NFVCksIHByb3BlcnR5X3RoaXNfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFRISVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJh
dG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2Fs
bEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxDYWxsRnJhbWU+IHJlc3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0Q2FsbEZyYW1lSWQoLi4uKQogICAgICogICAgIC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAg
ICogICAgIC5zZXRMb2NhdGlvbiguLi4pCiAgICAgKiAgICAgLnNldFNjb3BlQ2hhaW4oLi4uKQog
ICAgICogICAgIC5zZXRUaGlzKC4uLik7CiAgICAgKi8KICAgIGlubGluZSBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KCk7CiAgICB9Cn07CgpjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAg
ICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBPQkpFQ1RfU0VUID0gMSA8PCAxLAogICAg
ICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgT0JKRUNUX1NFVCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICAgIGlubGluZSBCdWls
ZGVyKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJ
RUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICB9CgogICAgICAg
IGlubGluZSBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFN0cmluZyB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCks
IHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIEJ1aWxkZXI8U1RBVEUgfCBPQkpFQ1RfU0VU
PiYgc2V0T2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9CSkVDVF9TRVQpLCBwcm9wZXJ0eV9v
YmplY3RfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJvYmpl
Y3QiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T0JKRUNUX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIGlubGluZSBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPFNjb3BlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpbmxpbmUg
b3BlcmF0b3IgUGFzc1JlZlB0cjxTY29wZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTY29wZT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxTY29wZT4gcmVzdWx0ID0gU2NvcGU6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKICAgICAqLwog
ICAgaW5saW5lIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oKTsKICAgIH0KfTsKCn0gLy8gRGVi
dWdnZXIKbmFtZXNwYWNlIERPTURlYnVnZ2VyIHsKbmFtZXNwYWNlIERPTUJyZWFrcG9pbnRUeXBl
IHsKY29uc3QgY2hhciogY29uc3Qgc3VidHJlZV9tb2RpZmllZCA9ICJzdWJ0cmVlLW1vZGlmaWVk
IjsKY29uc3QgY2hhciogY29uc3QgYXR0cmlidXRlX21vZGlmaWVkID0gImF0dHJpYnV0ZS1tb2Rp
ZmllZCI7CmNvbnN0IGNoYXIqIGNvbnN0IG5vZGVfcmVtb3ZlZCA9ICJub2RlLXJlbW92ZWQiOwp9
IC8vIG5hbWVzcGFjZSBET01CcmVha3BvaW50VHlwZQoKfSAvLyBET01EZWJ1Z2dlcgpuYW1lc3Bh
Y2UgUHJvZmlsZXIgewp9IC8vIFByb2ZpbGVyCm5hbWVzcGFjZSBXb3JrZXIgewp9IC8vIFdvcmtl
cgoKfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsK
cHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7
CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9yKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBmcm9udGVuZFJldXNlZCgpOwogICAgICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CiAg
ICAgICAgdm9pZCBkaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKICAgICAgICB2b2lkIHJlc2V0KCk7
CiAgICAgICAgdm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCk7CiAgICAgICAgdm9p
ZCBzdGFydFVzZXJJbml0aWF0ZWREZWJ1Z2dpbmcoKTsKICAgICAgICB2b2lkIGV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQoaW50IHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAg
ICAgICB2b2lkIGluc3BlY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKICAgICAgICB2b2lkIGRpZENyZWF0ZVdv
cmtlcihpbnQgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKTsKICAgICAgICB2
b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW50IGlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJl
dHVybiAmbV9pbnNwZWN0b3I7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAg
ICBQYWdlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsK
ICAgICAgICB2b2lkIGxvYWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZv
aWQgZnJhbWVOYXZpZ2F0ZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lLCBjb25z
dCBTdHJpbmcmIGxvYWRlcklkKTsKICAgICAgICB2b2lkIGZyYW1lRGV0YWNoZWQoY29uc3QgU3Ry
aW5nJiBmcmFtZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKICAgIH07CgogICAgUGFnZSogcGFnZSgpIHsgcmV0dXJuICZtX3BhZ2U7IH0KCiAgICBjbGFz
cyBSdW50aW1lIHsKICAgIHB1YmxpYzoKICAgICAgICBSdW50aW1lKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFJ1bnRpbWUqIHJ1bnRpbWUoKSB7
IHJldHVybiAmbV9ydW50aW1lOyB9CgogICAgY2xhc3MgQ29uc29sZSB7CiAgICBwdWJsaWM6CiAg
ICAgICAgQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVzc2FnZUFkZGVkKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2b2lkIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQo
aW50IGNvdW50KTsKICAgICAgICB2b2lkIG1lc3NhZ2VzQ2xlYXJlZCgpOwogICAgICAgIHZvaWQg
c2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBDb25zb2xlKiBjb25z
b2xlKCkgeyByZXR1cm4gJm1fY29uc29sZTsgfQoKICAgIGNsYXNzIE5ldHdvcmsgewogICAgcHVi
bGljOgogICAgICAgIE5ldHdvcmsoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHJlcXVlc3RXaWxsQmVTZW50KGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9h
ZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gaW5pdGlhdG9yLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgICAgdm9pZCBy
ZXF1ZXN0U2VydmVkRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2
b2lkIHJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1l
c3RhbXAsIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3BvbnNlKTsKICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgZG91YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0
aCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmluaXNoZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChjb25zdCBTdHJp
bmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQs
IGNvbnN0IGJvb2wqIGNvbnN0IGNhbmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRG
cm9tTWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwg
ZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKTsKICAgICAgICB2b2lkIHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91
YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAg
ICAgIHZvaWQgd2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENyZWF0ZWQoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENsb3Nl
ZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsqIG5l
dHdvcmsoKSB7IHJldHVybiAmbV9uZXR3b3JrOyB9CgogICAgY2xhc3MgRGF0YWJhc2UgewogICAg
cHVibGljOgogICAgICAgIERhdGFiYXNlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGREYXRhYmFzZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpOwogICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rpb25T
dWNjZWVkZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNv
bHVtbk5hbWVzLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZXMpOwogICAgICAgIHZv
aWQgc3FsVHJhbnNhY3Rpb25GYWlsZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBzcWxFcnJvcik7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBw
cml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuICZt
X2RhdGFiYXNlOyB9CgogICAgY2xhc3MgRE9NU3RvcmFnZSB7CiAgICBwdWJsaWM6CiAgICAgICAg
RE9NU3RvcmFnZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRE9NU3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gc3RvcmFnZSk7CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdl
SWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsK
CiAgICBET01TdG9yYWdlKiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoK
ICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KICAgICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7CiAg
ICAgICAgdm9pZCBuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxpbmUpOwogICAgICAg
IHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
ID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBBcHBsaWNh
dGlvbkNhY2hlKiBhcHBsaWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1fYXBwbGljYXRpb25jYWNo
ZTsgfQoKICAgIGNsYXNzIERPTSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBk
b2N1bWVudFVwZGF0ZWQoKTsKICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMoaW50IHBhcmVudElk
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2Rlcyk7CiAgICAgICAgdm9pZCBhdHRyaWJ1
dGVNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwogICAgICAgIHZvaWQgYXR0cmlidXRlUmVtb3ZlZChpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwogICAgICAgIHZvaWQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZChQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKTsKICAgICAgICB2b2lkIGNoYXJhY3RlckRhdGFN
b2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlckRhdGEpOwogICAgICAg
IHZvaWQgY2hpbGROb2RlQ291bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3Vu
dCk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQg
cHJldmlvdXNOb2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBub2RlKTsKICAgICAg
ICB2b2lkIGNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IG5vZGVJZCk7CiAg
ICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERP
TSogZG9tKCkgeyByZXR1cm4gJm1fZG9tOyB9CgogICAgY2xhc3MgQ1NTIHsKICAgIHB1YmxpYzoK
ICAgICAgICBDU1MoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgQ1NTKiBjc3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1lbGlu
ZSB7CiAgICBwdWJsaWM6CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHN0YXJ0ZWQoKTsKICAg
ICAgICB2b2lkIHN0b3BwZWQoKTsKICAgICAgICB2b2lkIGV2ZW50UmVjb3JkZWQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFRpbWVsaW5lKiB0aW1lbGluZSgpIHsgcmV0dXJu
ICZtX3RpbWVsaW5lOyB9CgogICAgY2xhc3MgRGVidWdnZXIgewogICAgcHVibGljOgogICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjYXBhYmlsaXR5U2V0U2NyaXB0U291cmNlOwogICAgICAgIERl
YnVnZ2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBkZWJ1Z2dlcldhc0VuYWJsZWQoKTsKICAgICAgICB2b2lkIGRlYnVn
Z2VyV2FzRGlzYWJsZWQoKTsKICAgICAgICB2b2lkIHNjcmlwdFBhcnNlZChjb25zdCBTdHJpbmcm
IHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29s
dW1uLCBpbnQgZW5kTGluZSwgaW50IGVuZENvbHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250
ZW50U2NyaXB0KTsKICAgICAgICB2b2lkIHNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJy
b3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgICAgdm9pZCBicmVha3Bv
aW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAgICAgdm9pZCBwYXVzZWQoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICAgICB2b2lkIHJlc3VtZWQoKTsKICAgICAgICB2
b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRGVidWdnZXIq
IGRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZGVidWdnZXI7IH0KCiAgICBjbGFzcyBET01EZWJ1Z2dl
ciB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NRGVidWdnZXIqIGRvbWRlYnVnZ2Vy
KCkgeyByZXR1cm4gJm1fZG9tZGVidWdnZXI7IH0KCiAgICBjbGFzcyBQcm9maWxlciB7CiAgICBw
dWJsaWM6CiAgICAgICAgUHJvZmlsZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHByb2ZpbGVyV2FzRW5hYmxlZCgpOwog
ICAgICAgIHZvaWQgcHJvZmlsZXJXYXNEaXNhYmxlZCgpOwogICAgICAgIHZvaWQgYWRkUHJvZmls
ZUhlYWRlcihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyKTsKICAgICAgICB2b2lk
IGFkZEhlYXBTbmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspOwogICAg
ICAgIHZvaWQgZmluaXNoSGVhcFNuYXBzaG90KGludCB1aWQpOwogICAgICAgIHZvaWQgc2V0UmVj
b3JkaW5nUHJvZmlsZShib29sIGlzUHJvZmlsaW5nKTsKICAgICAgICB2b2lkIHJlc2V0UHJvZmls
ZXMoKTsKICAgICAgICB2b2lkIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKGludCBkb25lLCBp
bnQgdG90YWwpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7
IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwog
ICAgfTsKCiAgICBQcm9maWxlciogcHJvZmlsZXIoKSB7IHJldHVybiAmbV9wcm9maWxlcjsgfQoK
ICAgIGNsYXNzIFdvcmtlciB7CiAgICBwdWJsaWM6CiAgICAgICAgV29ya2VyKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCB3
b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVj
dG9yQ29ubmVjdGVkKTsKICAgICAgICB2b2lkIHdvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklk
KTsKICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIoaW50IHdvcmtlcklkLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFdvcmtlciogd29ya2VyKCkgeyBy
ZXR1cm4gJm1fd29ya2VyOyB9CgoKcHJpdmF0ZToKICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICBJbnNwZWN0b3IgbV9pbnNwZWN0b3I7
CiAgICBQYWdlIG1fcGFnZTsKICAgIFJ1bnRpbWUgbV9ydW50aW1lOwogICAgQ29uc29sZSBtX2Nv
bnNvbGU7CiAgICBOZXR3b3JrIG1fbmV0d29yazsKICAgIERhdGFiYXNlIG1fZGF0YWJhc2U7CiAg
ICBET01TdG9yYWdlIG1fZG9tc3RvcmFnZTsKICAgIEFwcGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNh
dGlvbmNhY2hlOwogICAgRE9NIG1fZG9tOwogICAgQ1NTIG1fY3NzOwogICAgVGltZWxpbmUgbV90
aW1lbGluZTsKICAgIERlYnVnZ2VyIG1fZGVidWdnZXI7CiAgICBET01EZWJ1Z2dlciBtX2RvbWRl
YnVnZ2VyOwogICAgUHJvZmlsZXIgbV9wcm9maWxlcjsKICAgIFdvcmtlciBtX3dvcmtlcjsKfTsK
Cn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250
ZW5kX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116625</attachid>
            <date>2011-11-25 08:23:32 -0800</date>
            <delta_ts>2011-12-04 11:50:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72835-20111125202329.patch</filename>
            <type>text/plain</type>
            <size>22029</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyNTM4MzM0YjUyNTU3
NmVlNGM2MWRmY2Q0ZDI5NjY0NmQ1NWNhMS4uOWZlMDFkM2M1M2QwZDhiMzdlOWY3NzRhMzEyYjdm
Nzk1NTg4OGQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTI1ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbcHJvdG9jb2xdIGdlbmVyYXRlIEMrKyBjbGFzc2VzIGZvciBwcm90b2NvbCBKU09OIG5hbWVk
IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4
dGVuZHMgcHl0aG9uIGdlbmVyYXRvciBmdW5jdGlvbmFsaXR5LgorICAgICAgICBNYWtlcyBjb25z
dHJ1Y3RvciBpbiBJbnNwZWN0b3JPYmplY3QgcHVibGljLgorCisgICAgICAgICogaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oOgorCiAyMDExLTExLTE5ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxp
dmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQysrIGJpbmRpbmdzIGJ1aWxkIGZpeCBmb3IgbW92
ZSBvZiBhcnJheSBjbGFzc2VzIHRvIFdURi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggOGNiYWFkNzI1MWEwMTFjOGJmNTY4
YTg4YjY3ZDA2OWUzY2ViYTlhYS4uZDMwMWU5NWViNGE3OWM2OTM5OWUzM2ZhMGQyMDgxZjU1ZjRm
MjM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKQEAgLTEwMyw2ICsxMDMsMTIgQEAgZGVmaW5lc19tYXAgPSBwYXJzZV9kZWZp
bmVzKGFyZ19vcHRpb25zLmRlZmluZXMpCiAKIGNsYXNzIENhcGl0YWxpemVyOgogICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgbG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihzdHIpOgorICAgICAg
ICBpZiBsZW4oc3RyKSA+IDAgYW5kIHN0clswXS5pc2xvd2VyKCk6CisgICAgICAgICAgICBzdHIg
PSBzdHJbMF0udXBwZXIoKSArIHN0clsxOl0KKyAgICAgICAgcmV0dXJuIHN0cgorCisgICAgQHN0
YXRpY21ldGhvZAogICAgIGRlZiB1cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKHN0cik6CiAgICAg
ICAgIHBvcyA9IDAKICAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHN0cikgYW5kIHN0cltwb3NdLmlz
dXBwZXIoKToKQEAgLTExOSw2ICsxMjUsNDcgQEAgY2xhc3MgQ2FwaXRhbGl6ZXI6CiAgICAgICAg
IHN0ciA9IHBvc3NpYmxlX2FiYnJldmlhdGlvbi5sb3dlcigpICsgc3RyW3BvczpdCiAgICAgICAg
IHJldHVybiBzdHIKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2FtZWxfY2FzZV90b19j
YXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKHN0cik6CisgICAgICAgIGlmIGxlbihzdHIpID09
IDA6CisgICAgICAgICAgICByZXR1cm4gc3RyCisgICAgICAgIG91dHB1dCA9IENhcGl0YWxpemVy
LnNwbGl0X2NhbWVsX2Nhc2VfKHN0cikKKyAgICAgICAgcG9zID0gMAorICAgICAgICB3aGlsZSBw
b3MgPCBsZW4ob3V0cHV0KToKKyAgICAgICAgICAgIG91dHB1dFtwb3NdID0gb3V0cHV0W3Bvc10u
dXBwZXIoKQorICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgcmV0dXJuICJfIi5qb2luKG91
dHB1dCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3BsaXRfY2FtZWxfY2FzZV8oc3Ry
KToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgcG9zX2JlaW5nID0gMAorICAgICAgICBw
b3MgPSAxCisgICAgICAgIGhhc19vbmVsZXR0ZXIgPSBGYWxzZQorICAgICAgICB3aGlsZSBwb3Mg
PCBsZW4oc3RyKToKKyAgICAgICAgICAgIGlmIHN0cltwb3NdLmlzdXBwZXIoKToKKyAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cltwb3NfYmVpbmc6cG9zXS51cHBlcigpKQorICAgICAg
ICAgICAgICAgIGlmIHBvcyAtIHBvc19iZWluZyA9PSAxOgorICAgICAgICAgICAgICAgICAgICBo
YXNfb25lbGV0dGVyID0gVHJ1ZQorICAgICAgICAgICAgICAgIHBvc19iZWluZyA9IHBvcworICAg
ICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9zX2JlaW5nOl0p
CisgICAgICAgIGlmIGhhc19vbmVsZXR0ZXI6CisgICAgICAgICAgICBhcnJheV9wb3MgPSAwCisg
ICAgICAgICAgICB3aGlsZSBhcnJheV9wb3MgPCBsZW4ob3V0cHV0KSAtIDE6CisgICAgICAgICAg
ICAgICAgaWYgbGVuKG91dHB1dFthcnJheV9wb3NdKSA9PSAxOgorICAgICAgICAgICAgICAgICAg
ICBhcnJheV9wb3NfZW5kID0gYXJyYXlfcG9zICsgMQorICAgICAgICAgICAgICAgICAgICB3aGls
ZSBhcnJheV9wb3NfZW5kIDwgbGVuKG91dHB1dCkgYW5kIGxlbihvdXRwdXRbYXJyYXlfcG9zX2Vu
ZF0pID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kICs9IDEKKyAg
ICAgICAgICAgICAgICAgICAgaWYgYXJyYXlfcG9zX2VuZCAtIGFycmF5X3BvcyA+IDE6CisgICAg
ICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZV9hYmJyZXZpYXRpb24gPSAiIi5qb2luKG91dHB1
dFthcnJheV9wb3M6YXJyYXlfcG9zX2VuZF0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBw
b3NzaWJsZV9hYmJyZXZpYXRpb24udXBwZXIoKSBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJT046
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2FycmF5X3BvczphcnJheV9wb3Nf
ZW5kXSA9IFtwb3NzaWJsZV9hYmJyZXZpYXRpb25dCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3BvcyA9IGFycmF5X3Bvc19l
bmQgLSAxCisgICAgICAgICAgICAgICAgYXJyYXlfcG9zICs9IDEKKyAgICAgICAgcmV0dXJuIG91
dHB1dAorCiAgICAgQUJCUkVWSUFUSU9OID0gZnJvemVuc2V0KFsiWEhSIiwgIkRPTSIsICJDU1Mi
XSkKIAogCkBAIC0xODcsNiArMjM0LDggQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKICAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm51
bWJlciI6CiAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCisgICAgICAgIGVsaWYg
anNvbl90eXBlID09ICJhbnkiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFueQogICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGU6ICVz
IiAlIGpzb25fdHlwZSkKIApAQCAtMjAyLDcgKzI1MSw3IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVj
dCk6CiAgICAgY2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAg
ICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgot
ICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAg
ICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVCBvciBwYXJhbV90eXBlID09IFBhcmFt
VHlwZS5UWVBFX0JVSUxERVJfT1VUUFVUOgogICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3Jl
Zl9jX3R5cGUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5f
cGxhaW5fY190eXBlCkBAIC0yOTcsNyArMzQ2LDcgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToK
ICAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAg
ICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6Ci0gICAg
ICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAgICAgICAgICAgIGlm
IHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UIG9yIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBl
LlRZUEVfQlVJTERFUl9PVVRQVVQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2Nf
dHlwZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFp
bl9jX3R5cGUKQEAgLTMyMyw2ICszNzIsMzUgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAg
ICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4iKQogCisgICAgY2xhc3MgQW55KEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9u
YWwpOgorICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQgb3IgcGFy
YW1fdHlwZSA9PSBQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJWYWx1ZSIK
KworICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgorICAgICAgICAg
ICAgcmV0dXJuICJJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCkiCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgorICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IikKKwogICAgIGNsYXNzIEFycmF5KEJhc2VUeXBlKToKICAgICAg
ICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1f
dHlwZSwgb3B0aW9uYWwpOgpAQCAtMzU5LDM4ICs0MzcsMjU2IEBAIGNsYXNzIFBhcmFtVHlwZShv
YmplY3QpOgogICAgIElOUFVUID0gImlucHV0IgogICAgIE9VVFBVVCA9ICJvdXRwdXQiCiAgICAg
RVZFTlQgPSAiZXZlbnQiCisgICAgVFlQRV9CVUlMREVSX09VVFBVVCA9ICJ0eXBlQnVpbGRlck91
dHB1dCIKKworIyBDb2xsZWN0aW9uIG9mIEluc3BlY3Rvck9iamVjdCBjbGFzcyBtZXRob2RzIHRo
YXQgYXJlIGxpa2VseSB0byBiZSBvdmVybG9hZGVkIGluIGdlbmVyYXRlZCBjbGFzcy4KKyMgV2Ug
bXVzdCBleHBsaWNpdGx5IGltcG9ydCBhbGwgb3ZlcmxvYWRlZCBtZXRob2RzIG9yIHRoZXkgd29u
J3QgYmUgYXZhaWxhYmxlIHRvIHVzZXIuCitJTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUyA9
IGZyb3plbnNldChbInNldFZhbHVlIiwgInNldEJvb2xlYW4iLCAic2V0TnVtYmVyIiwgInNldFN0
cmluZyIsICJzZXRWYWx1ZSIsICJzZXRPYmplY3QiLCAic2V0QXJyYXkiXSkKKworCitjbGFzcyBU
eXBlQmluZGluZ3M6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZm9yX25hbWVk
X3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBlLCBjb250ZXh0X2RvbWFpbl9uYW1lKToKKyAgICAg
ICAgaWYganNvbl90eXBlWyJ0eXBlIl0gPT0gInN0cmluZyI6CisgICAgICAgICAgICBpZiAiZW51
bSIgaW4ganNvbl90eXBlOgorCisgICAgICAgICAgICAgICAgY2xhc3MgRW51bUJpbmRpbmc6Cisg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVm
IGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgZW51bSA9IGpzb25fdHlwZVsiZW51bSJdCisgICAgICAgICAgICAg
ICAgICAgICAgICAjIFRPRE86IGRvYworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZCgibmFtZXNwYWNlICIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KGpzb25fdHlwZVsiaWQiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
IiB7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY19uYW1lID0gZW51bV9pdGVtLnJlcGxh
Y2UoJy0nLCAnXycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgi
Y29uc3QgY2hhciogY29uc3QgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2VfdG9fbG93ZXIoaXRlbV9jX25hbWUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiA9IFwiIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGVudW1faXRlbSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJcIjtcbiIpCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChqc29uX3R5cGVbImlkIl0pCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJcblxuIikKKworICAgICAgICAgICAgICAgIHJl
dHVybiBFbnVtQmluZGluZworICAgICAgICAgICAgZWxzZToKKworICAgICAgICAgICAgICAgIGNs
YXNzIFBsYWluU3RyaW5nOgorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBmb3J3YXJk
X2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICJkZXNjcmlwdGlvbiIgaW4g
anNvbl90eXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIi8q
ICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChqc29uX3R5cGVb
ImRlc2NyaXB0aW9uIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgiICovXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgidHlwZWRl
ZiBTdHJpbmcgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoanNvbl90
eXBlWyJpZCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiO1xuXG4i
KQorICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0cmluZworCisgICAgICAgIGVsaWYganNv
bl90eXBlWyJ0eXBlIl0gPT0gIm9iamVjdCI6CisgICAgICAgICAgICBpZiAicHJvcGVydGllcyIg
aW4ganNvbl90eXBlOgorCisgICAgICAgICAgICAgICAgY2xhc3MgQ2xhc3NCaW5kaW5nOgorICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICMgVE9ETzogZG9jCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCJjbGFzcyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9
IGpzb25fdHlwZVsiaWQiXQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChj
bGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZCgicHVibGljOlxuIikKKworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGll
cyA9IGpzb25fdHlwZVsicHJvcGVydGllcyJdCisgICAgICAgICAgICAgICAgICAgICAgICBtYWlu
X3Byb3BlcnRpZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJvcGVy
dGllcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwcm9wZXJ0aWVzOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJvcHRpb25hbCIgaW4gcCBhbmQgcFsib3B0
aW9uYWwiXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJvcGVy
dGllcy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3Byb3BlcnRpZXMuYXBwZW5kKHApCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoCisiIiIgICAgZW51bSB7CisgICAg
ICAgIE5PX0ZJRUxEU19TRVQgPSAwLAorIiIiKQorCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZV9lbnVtX2l0ZW1zID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihtYWlu
X3Byb3BlcnRpZXMpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gbWFpbl9wcm9wZXJ0aWVzOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX25hbWUgPSBDYXBpdGFsaXplci5jYW1l
bF9jYXNlX3RvX2NhcGl0YWxpemVkX3dpdGhfdW5kZXJzY29yZXMocFsibmFtZSJdKSArICJfU0VU
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zLmFwcGVu
ZChpdGVtX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoIiAgICAgICAgJXMgPSAxIDw8ICVzLFxuIiAlIChpdGVtX25hbWUsIHBvcykpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUgPSAiKCIgKyAoIiB8ICIuam9pbihzdGF0ZV9lbnVt
X2l0ZW1zKSkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUgPSAiMCIKKworICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgKKyIiIiAgICAgICAgQUxMX0ZJRUxEU19TRVQg
PSAlcworICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPCVzPiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAg
ICAgICBmcmllbmQgY2xhc3MgJXM7CisgICAgcHVibGljOgorIiIiICUgKGFsbF9maWVsZHNfc2V0
X3ZhbHVlLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKKworICAgICAgICAgICAgICAgICAgICAg
ICAgcG9zID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9w
ZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BbIm5h
bWUiXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2
ZV9wYXJhbV9yYXdfdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiIiCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCAlcz4mIHNldCVzKCVzIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgJXMpLCBwcm9wZXJ0eV8lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTwlcz4oKTsKKyAgICAgICAgfQorIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JSAoc3RhdGVfZW51bV9pdGVtc1twb3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBl
KFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sIHByb3BfbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZS5nZXRfc2V0
dGVyX25hbWUoKSwgcHJvcF9uYW1lLCBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10pKQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKKworICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZCgiIiIKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPCVzPiYgKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjwlcz4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjwlcz4gKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjwlcz4oKnRoaXMpOworICAgICAgICB9CisgICAgfTsKKworIiIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lLCBjbGFzc19uYW1l
KSkKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIC8qXG4iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjpcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIg
ICAgICogUmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRlKCkiICUgKGNsYXNzX25hbWUsIGNs
YXNzX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gbWFpbl9wcm9w
ZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlxuICAg
ICAqICAgICAuc2V0JXMoLi4uKSIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3Vw
cGVyKHByb3BbIm5hbWUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCI7XG4gICAgICovXG4iKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KAorIiIiICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgJXMoKSkp
OworICAgIH0KKyIiIiAlIGNsYXNzX25hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBwcm9wIGluIG9wdGlvbmFsX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fcmF3X3R5cGUgPSByZXNvbHZlX3BhcmFtX3Jhd190eXBlKHByb3AsIGNvbnRleHRf
ZG9tYWluX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAi
c2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wWyJuYW1l
Il0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiXG4gICAgdm9p
ZCAlcyIgJSBzZXR0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgcGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQ
YXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIHtcbiIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAgICB0aGlzLT5zZXQlcyhcIiVz
XCIsIHZhbHVlKTtcbiIgJSAocGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3Bb
Im5hbWUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAg
IH1cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJfbmFtZSBpbiBJ
TlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6JXM7XG5cbiIg
JSBzZXR0ZXJfbmFtZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgi
fTtcblxuIikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2xhc3NCaW5kaW5nCisgICAgICAgICAg
ICBlbHNlOgorCisgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5PYmplY3RCaW5kaW5nOgorICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICMgTm8tb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RCaW5kaW5nCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChqc29uX3R5cGVbInR5cGUiXSkKKwor
ICAgICAgICAgICAgY2xhc3MgUmF3VHlwZXNCaW5kaW5nOgorICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1
dCwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICMgTm8tb3AKKyAgICAg
ICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzQmluZGluZwog
CiAKIGNsYXNzIFR5cGVEYXRhKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25f
dHlwZSwganNvbl9kb21haW4pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpz
b25fZG9tYWluLCBkb21haW5fZGF0YSk6CiAgICAgICAgIHNlbGYuanNvbl90eXBlXyA9IGpzb25f
dHlwZQogICAgICAgICBzZWxmLmpzb25fZG9tYWluXyA9IGpzb25fZG9tYWluCisgICAgICAgIHNl
bGYuZG9tYWluX2RhdGFfID0gZG9tYWluX2RhdGEKIAotICAgICAgICBpZiAidHlwZSIgaW4ganNv
bl90eXBlOgotICAgICAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUiXQot
ICAgICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCi0gICAg
ICAgIGVsc2U6CisgICAgICAgIGlmICJ0eXBlIiBub3QgaW4ganNvbl90eXBlOgogICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQorCisgICAgICAgIGpzb25fdHlwZV9u
YW1lID0ganNvbl90eXBlWyJ0eXBlIl0KKyAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQo
anNvbl90eXBlX25hbWUpCiAgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKKyAgICAg
ICAgc2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfZm9yX25hbWVkX3R5cGVfZGVj
bGFyYXRpb24oanNvbl90eXBlLCBqc29uX2RvbWFpblsiZG9tYWluIl0pCiAKICAgICBkZWYgZ2V0
X3Jhd190eXBlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KIAorICAgIGRl
ZiBnZXRfYmluZGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmluZGluZ18KKworCitj
bGFzcyBEb21haW5EYXRhOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX2RvbWFpbik6Cisg
ICAgICAgIHNlbGYuanNvbl9kb21haW4gPSBqc29uX2RvbWFpbgorICAgICAgICBzZWxmLnR5cGVz
XyA9IFtdCisKKyAgICBkZWYgYWRkX3R5cGUoc2VsZiwgdHlwZV9kYXRhKToKKyAgICAgICAgc2Vs
Zi50eXBlc18uYXBwZW5kKHR5cGVfZGF0YSkKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5qc29uX2RvbWFpblsiZG9tYWluIl0KKworICAgIGRlZiB0eXBlcyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZXNfCisKIAogY2xhc3MgVHlwZU1hcDoKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgYXBpKToKICAgICAgICAgc2VsZi5tYXBfID0ge30KKyAgICAgICAg
c2VsZi5kb21haW5zXyA9IFtdCiAgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFp
bnMiXToKICAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCiAK
ICAgICAgICAgICAgIGRvbWFpbl9tYXAgPSB7fQogICAgICAgICAgICAgc2VsZi5tYXBfW2RvbWFp
bl9uYW1lXSA9IGRvbWFpbl9tYXAKIAorICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5E
YXRhKGpzb25fZG9tYWluKQorICAgICAgICAgICAgc2VsZi5kb21haW5zXy5hcHBlbmQoZG9tYWlu
X2RhdGEpCisKICAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46CiAgICAgICAg
ICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToKICAgICAgICAg
ICAgICAgICAgICAgdHlwZV9uYW1lID0ganNvbl90eXBlWyJpZCJdCi0gICAgICAgICAgICAgICAg
ICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9kb21haW4pCisgICAgICAg
ICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9kb21haW4s
IGRvbWFpbl9kYXRhKQogICAgICAgICAgICAgICAgICAgICBkb21haW5fbWFwW3R5cGVfbmFtZV0g
PSB0eXBlX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2RhdGEuYWRkX3R5cGUodHlw
ZV9kYXRhKQorCisgICAgZGVmIGRvbWFpbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRv
bWFpbnNfCiAKICAgICBkZWYgZ2V0KHNlbGYsIGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpOgogICAg
ICAgICByZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9uYW1lXVt0eXBlX25hbWVdCkBAIC00MjYsNiAr
NzIyLDMwIEBAIGpzb25fYXBpID0ganNvbi5sb2Fkcyhqc29uX3N0cmluZykKIAogCiBjbGFzcyBU
ZW1wbGF0ZXM6CisgICAgZGVmIGdldF90aGlzX3NjcmlwdF9wYXRoXyhhYnNvbHV0ZV9wYXRoKToK
KyAgICAgICAgYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChhYnNvbHV0ZV9wYXRoKQor
ICAgICAgICBjb21wb25lbnRzID0gW10KKworICAgICAgICBkZWYgZmlsbF9yZWN1cnNpdmUocGF0
aF9wYXJ0LCBkZXB0aCk6CisgICAgICAgICAgICBpZiBkZXB0aCA8PSAwIG9yIHBhdGhfcGFydCA9
PSAnLyc6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmaWxsX3JlY3Vyc2l2
ZShvcy5wYXRoLmRpcm5hbWUocGF0aF9wYXJ0KSwgZGVwdGggLSAxKQorICAgICAgICAgICAgY29t
cG9uZW50cy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShwYXRoX3BhcnQpKQorCisgICAgICAgICMg
VHlwaWNhbCBwYXRoIGlzIC9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorICAgICAgICAjIExldCdzIHRha2UgNCBjb21wb25lbnRzIGZyb20gdGhlIHJl
YWwgcGF0aCB0aGVuLgorICAgICAgICBmaWxsX3JlY3Vyc2l2ZShhYnNvbHV0ZV9wYXRoLCA0KQor
CisgICAgICAgIHJldHVybiAiLyIuam9pbihjb21wb25lbnRzKQorCisgICAgZmlsZV9oZWFkZXJf
ID0gKCIvLyBGaWxlIGlzIGdlbmVyYXRlZCBieSAlc1xuXG4iICUgZ2V0X3RoaXNfc2NyaXB0X3Bh
dGhfKHN5cy5hcmd2WzBdKSArCisiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIiIiKQorCisKKwogICAgIGZyb250ZW5kX2RvbWFpbl9j
bGFzcyA9IHN0cmluZy5UZW1wbGF0ZSgKICIiIiAgICBjbGFzcyAkZG9tYWluQ2xhc3NOYW1lIHsK
ICAgICBwdWJsaWM6JGRvbWFpbkNhcGFiaWxpdGllcwpAQCAtNDY3LDIzICs3ODcsMjQgQEAgJGNv
ZGUgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogfQogIiIiKQogCi0gICAgZnJv
bnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZF9o
CisgICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKworIiIiI2lm
bmRlZiBJbnNwZWN0b3JGcm9udGVuZF9oCiAjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kX2gKIAor
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKLWNs
YXNzIEluc3BlY3Rvck9iamVjdDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKK25h
bWVzcGFjZSBUeXBlQnVpbGRlciB7Ciske3R5cGVCdWlsZGVyc30KK30gLy8gbmFtZXNwYWNlIFR5
cGVCdWlsZGVyCisKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKIHB1YmxpYzoKICAgICBJbnNw
ZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKQEAgLTQ5OCwxMCArODE5
LDggQEAgJHtmaWVsZERlY2xhcmF0aW9uc319OwogI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3Rv
ckZyb250ZW5kX2gpCiAiIiIpCiAKLSAgICBiYWNrZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIi
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LSNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAorICAgIGJhY2tlbmRfaCA9IHN0
cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKworIiIiI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcl9oCiAjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKIAogI2lu
Y2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CkBAIC01NzAsMTAgKzg4OSw4IEBAICRmaWVsZERlY2xh
cmF0aW9ucwogCiAiIiIpCiAKLSAgICBiYWNrZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
CisgICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIgog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaCIKQEAgLTkwMSwxMCArMTIxOCw4IEBAIGJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByCiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICIiIikKIAotICAgIGZyb250ZW5kX2NwcCA9IHN0cmlu
Zy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotCisgICAgZnJvbnRlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVf
aGVhZGVyXyArCisiIiIKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kLmgiCkBAIC05MzMsMTAgKzEyNDgsOCBAQCAkbWV0aG9kcwogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCiAiIiIpCiAKLSAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRl
KCIiIi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0KKyAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisi
IiIKIAogSW5zcGVjdG9yQmFja2VuZFN0dWIgPSBmdW5jdGlvbigpCiB7CkBAIC0xMjExLDkgKzE1
MjQsMTIgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGJhY2tlbmRfaW5jbHVkZV9saXN0ID0gW10K
ICAgICBmcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQogICAgIGZyb250ZW5kX2Nh
cGFiaWxpdGllc19jb25zdGFudHNfbGlzdCA9IFtdCisgICAgdHlwZV9idWlsZGVyX2ZyYWdtZW50
cyA9IFtdCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGdvKCk6CisgICAgICAgIEdlbmVy
YXRvci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFwKQorCiAgICAgICAgIGZvciBqc29uX2RvbWFpbiBp
biBqc29uX2FwaVsiZG9tYWlucyJdOgogICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2Rv
bWFpblsiZG9tYWluIl0KICAgICAgICAgICAgIGRvbWFpbl9uYW1lX2xvd2VyID0gZG9tYWluX25h
bWUubG93ZXIoKQpAQCAtMTQwOCw2ICsxNzI0LDI0IEBAIGNsYXNzIEdlbmVyYXRvcjoKIAogICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiICAgIHRo
aXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3tcIm1ldGhvZFwiOiBcIiVzLiVzXCIlcywgXCJpZFwiOiAw
fScpO1xuIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUsIGpzX3BhcmFtZXRlcnNf
dGV4dCkpCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb2Nlc3NfdHlwZXModHlwZV9t
YXApOgorICAgICAgICBvdXRwdXQgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50cwor
CisgICAgICAgIGNsYXNzIEZvcndhcmRMaXN0ZW5lcjoKKyAgICAgICAgICAgIHBhc3MKKworICAg
ICAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAuZG9tYWlucygpOgorICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZCgibmFtZXNwYWNlICIpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGRv
bWFpbl9kYXRhLm5hbWUoKSkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiB7XG4iKQorICAg
ICAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBkb21haW5fZGF0YS50eXBlcygpOgorICAgICAgICAg
ICAgICAgIHR5cGVfZGF0YS5nZXRfYmluZGluZygpLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRw
dXQsIEZvcndhcmRMaXN0ZW5lcikKKworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgifSAvLyAi
KQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChkb21haW5fZGF0YS5uYW1lKCkpCisgICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kKCJcbiIpCisKIEdlbmVyYXRvci5nbygpCiAKIGJhY2tlbmRfaF9m
aWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmgiLCAidyIpCkBAIC0xNDIxLDcgKzE3NTUsOCBAQCBiYWNrZW5kX2pzX2ZpbGUgPSBv
cGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMiLCAidyIp
CiAKIGZyb250ZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfaC5zdWJzdGl0dXRl
KE5vbmUsCiAgICAgICAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5mcm9udGVu
ZF9jbGFzc19maWVsZF9saW5lcywgIiIpLAotICAgICAgICAgZG9tYWluQ2xhc3NMaXN0PWpvaW4o
R2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcywgIiIpKSkKKyAgICAgICAgIGRv
bWFpbkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMs
ICIiKSwKKyAgICAgICAgIHR5cGVCdWlsZGVycz1qb2luKEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
ZnJhZ21lbnRzLCAiIikpKQogCiBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2Vu
ZF9oLnN1YnN0aXR1dGUoTm9uZSwKICAgICBjb25zdHJ1Y3RvckluaXQ9am9pbihHZW5lcmF0b3Iu
YmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QsICJcbiIpLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IGIyNmFiYzMxY2MzY2IwM2Y3YmUwNzU5NTcx
ZmQxMzYzNWY3YjExNTEuLjAzZmRkMTViMjVkMDliZGVjNDUxYWQwM2IxYWIzMjM5ZjI4MGRhMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTIwNiw4
ICsyMDYsMTAgQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBJbnNw
ZWN0b3JPYmplY3QoKTsKKworcHJpdmF0ZToKICAgICBEaWN0aW9uYXJ5IG1fZGF0YTsKICAgICBW
ZWN0b3I8U3RyaW5nPiBtX29yZGVyOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117803</attachid>
            <date>2011-12-04 11:51:05 -0800</date>
            <delta_ts>2011-12-05 16:26:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72835-20111204235103.patch</filename>
            <type>text/plain</type>
            <size>21929</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxOTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmYmM0OGRjYmViOTUy
MDNhOTVkMDIyNTRjM2YxMzlmMjNmNTEyNy4uYWQ3NGMwZGQ3OGIxOTRjNzI3OWQwZjhiN2QzZmIw
NTIzMmQ5ZTFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTEyLTA0ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbcHJvdG9jb2xdIGdlbmVyYXRlIEMrKyBjbGFzc2VzIGZvciBwcm90b2NvbCBKU09OIG5hbWVk
IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4
dGVuZHMgcHl0aG9uIGdlbmVyYXRvciBmdW5jdGlvbmFsaXR5LgorICAgICAgICBNYWtlcyBjb25z
dHJ1Y3RvciBpbiBJbnNwZWN0b3JPYmplY3QgcHVibGljLgorCisgICAgICAgICogaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oOgorCiAyMDExLTEyLTAzICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBTaHJpbmsgQ1NTVmFsdWVMaXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCA5YTZlMTVhOGJmNGRk
YzNhOTljMmUxY2U5MjU2YWUwOGI5ZTdkMzBiLi45ZGFhMmJlZDkwNDQ1ZDJjNTI5OTRhY2NmMTI5
NjBjYTUyZTc1ZmI3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQpAQCAtMTA0LDYgKzEwNCwxMiBAQCBkZWZpbmVzX21hcCA9IHBh
cnNlX2RlZmluZXMoYXJnX29wdGlvbnMuZGVmaW5lcykKIAogY2xhc3MgQ2FwaXRhbGl6ZXI6CiAg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHN0cik6
CisgICAgICAgIGlmIGxlbihzdHIpID4gMCBhbmQgc3RyWzBdLmlzbG93ZXIoKToKKyAgICAgICAg
ICAgIHN0ciA9IHN0clswXS51cHBlcigpICsgc3RyWzE6XQorICAgICAgICByZXR1cm4gc3RyCisK
KyAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHVwcGVyX2NhbWVsX2Nhc2VfdG9fbG93ZXIoc3Ry
KToKICAgICAgICAgcG9zID0gMAogICAgICAgICB3aGlsZSBwb3MgPCBsZW4oc3RyKSBhbmQgc3Ry
W3Bvc10uaXN1cHBlcigpOgpAQCAtMTIwLDYgKzEyNiw0NyBAQCBjbGFzcyBDYXBpdGFsaXplcjoK
ICAgICAgICAgc3RyID0gcG9zc2libGVfYWJicmV2aWF0aW9uLmxvd2VyKCkgKyBzdHJbcG9zOl0K
ICAgICAgICAgcmV0dXJuIHN0cgogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYW1lbF9j
YXNlX3RvX2NhcGl0YWxpemVkX3dpdGhfdW5kZXJzY29yZXMoc3RyKToKKyAgICAgICAgaWYgbGVu
KHN0cikgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzdHIKKyAgICAgICAgb3V0cHV0ID0gQ2Fw
aXRhbGl6ZXIuc3BsaXRfY2FtZWxfY2FzZV8oc3RyKQorICAgICAgICBwb3MgPSAwCisgICAgICAg
IHdoaWxlIHBvcyA8IGxlbihvdXRwdXQpOgorICAgICAgICAgICAgb3V0cHV0W3Bvc10gPSBvdXRw
dXRbcG9zXS51cHBlcigpCisgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICByZXR1cm4gIl8i
LmpvaW4ob3V0cHV0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzcGxpdF9jYW1lbF9j
YXNlXyhzdHIpOgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAgICBwb3NfYmVpbmcgPSAwCisg
ICAgICAgIHBvcyA9IDEKKyAgICAgICAgaGFzX29uZWxldHRlciA9IEZhbHNlCisgICAgICAgIHdo
aWxlIHBvcyA8IGxlbihzdHIpOgorICAgICAgICAgICAgaWYgc3RyW3Bvc10uaXN1cHBlcigpOgor
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RyW3Bvc19iZWluZzpwb3NdLnVwcGVyKCkp
CisgICAgICAgICAgICAgICAgaWYgcG9zIC0gcG9zX2JlaW5nID09IDE6CisgICAgICAgICAgICAg
ICAgICAgIGhhc19vbmVsZXR0ZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgcG9zX2JlaW5nID0g
cG9zCisgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cltwb3Nf
YmVpbmc6XSkKKyAgICAgICAgaWYgaGFzX29uZWxldHRlcjoKKyAgICAgICAgICAgIGFycmF5X3Bv
cyA9IDAKKyAgICAgICAgICAgIHdoaWxlIGFycmF5X3BvcyA8IGxlbihvdXRwdXQpIC0gMToKKyAg
ICAgICAgICAgICAgICBpZiBsZW4ob3V0cHV0W2FycmF5X3Bvc10pID09IDE6CisgICAgICAgICAg
ICAgICAgICAgIGFycmF5X3Bvc19lbmQgPSBhcnJheV9wb3MgKyAxCisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIGFycmF5X3Bvc19lbmQgPCBsZW4ob3V0cHV0KSBhbmQgbGVuKG91dHB1dFthcnJh
eV9wb3NfZW5kXSkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3Bvc19lbmQg
Kz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBhcnJheV9wb3NfZW5kIC0gYXJyYXlfcG9zID4g
MToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX2FiYnJldmlhdGlvbiA9ICIiLmpv
aW4ob3V0cHV0W2FycmF5X3BvczphcnJheV9wb3NfZW5kXSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHBvc3NpYmxlX2FiYnJldmlhdGlvbi51cHBlcigpIGluIENhcGl0YWxpemVyLkFCQlJF
VklBVElPTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbYXJyYXlfcG9zOmFy
cmF5X3Bvc19lbmRdID0gW3Bvc3NpYmxlX2FiYnJldmlhdGlvbl0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9zID0gYXJy
YXlfcG9zX2VuZCAtIDEKKyAgICAgICAgICAgICAgICBhcnJheV9wb3MgKz0gMQorICAgICAgICBy
ZXR1cm4gb3V0cHV0CisKICAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQoWyJYSFIiLCAiRE9N
IiwgIkNTUyJdKQogCiAKQEAgLTE4Niw2ICsyMzMsOCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3Qp
OgogICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAogICAgICAgICBlbGlmIGpzb25fdHlw
ZSA9PSAibnVtYmVyIjoKICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5OdW1iZXIKKyAgICAg
ICAgZWxpZiBqc29uX3R5cGUgPT0gImFueSI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
QW55CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24g
dHlwZTogJXMiICUganNvbl90eXBlKQogCkBAIC0yMDEsNyArMjUwLDcgQEAgY2xhc3MgUmF3VHlw
ZXMob2JqZWN0KToKICAgICBjbGFzcyBTdHJpbmcoQmFzZVR5cGUpOgogICAgICAgICBAY2xhc3Nt
ZXRob2QKICAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRp
b25hbCk6Ci0gICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAg
ICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UIG9yIHBhcmFtX3R5cGUg
PT0gUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNscy5fcmVmX2NfdHlwZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1
cm4gY2xzLl9wbGFpbl9jX3R5cGUKQEAgLTI5Niw3ICszNDUsNyBAQCBjbGFzcyBSYXdUeXBlcyhv
YmplY3QpOgogICAgIGNsYXNzIE9iamVjdChCYXNlVHlwZSk6CiAgICAgICAgIEBjbGFzc21ldGhv
ZAogICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFs
KToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAg
ICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQgb3IgcGFyYW1fdHlwZSA9PSBQ
YXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVDoKICAgICAgICAgICAgICAgICByZXR1cm4gY2xz
Ll9yZWZfY190eXBlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBj
bHMuX3BsYWluX2NfdHlwZQpAQCAtMzIyLDYgKzM3MSwzNSBAQCBjbGFzcyBSYXdUeXBlcyhvYmpl
Y3QpOgogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4iKQogICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiIpCiAKKyAgICBjbGFzcyBBbnkoQmFzZVR5cGUpOgorICAgICAgICBA
Y2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBl
LCBvcHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVO
VCBvciBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVUOgorICAgICAg
ICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6CisgICAgICAgICAgICByZXR1cm4g
IlZhbHVlIgorCisgICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQorCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Cisg
ICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvclZhbHVlOjpjcmVhdGUoKSIKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6CisgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVm
UHRyPEluc3BlY3RvclZhbHVlPiIpCisgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgi
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQorCiAgICAgY2xhc3MgQXJyYXkoQmFzZVR5cGUp
OgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xz
LCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CkBAIC0zNTgsMzggKzQzNiwyNTYgQEAgY2xhc3MgUGFy
YW1UeXBlKG9iamVjdCk6CiAgICAgSU5QVVQgPSAiaW5wdXQiCiAgICAgT1VUUFVUID0gIm91dHB1
dCIKICAgICBFVkVOVCA9ICJldmVudCIKKyAgICBUWVBFX0JVSUxERVJfT1VUUFVUID0gInR5cGVC
dWlsZGVyT3V0cHV0IgorCisjIENvbGxlY3Rpb24gb2YgSW5zcGVjdG9yT2JqZWN0IGNsYXNzIG1l
dGhvZHMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG92ZXJsb2FkZWQgaW4gZ2VuZXJhdGVkIGNsYXNz
LgorIyBXZSBtdXN0IGV4cGxpY2l0bHkgaW1wb3J0IGFsbCBvdmVybG9hZGVkIG1ldGhvZHMgb3Ig
dGhleSB3b24ndCBiZSBhdmFpbGFibGUgdG8gdXNlci4KK0lOU1BFQ1RPUl9PQkpFQ1RfU0VUVEVS
X05BTUVTID0gZnJvemVuc2V0KFsic2V0VmFsdWUiLCAic2V0Qm9vbGVhbiIsICJzZXROdW1iZXIi
LCAic2V0U3RyaW5nIiwgInNldFZhbHVlIiwgInNldE9iamVjdCIsICJzZXRBcnJheSJdKQorCisK
K2NsYXNzIFR5cGVCaW5kaW5nczoKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9m
b3JfbmFtZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGUsIGNvbnRleHRfZG9tYWluX25hbWUp
OgorICAgICAgICBpZiBqc29uX3R5cGVbInR5cGUiXSA9PSAic3RyaW5nIjoKKyAgICAgICAgICAg
IGlmICJlbnVtIiBpbiBqc29uX3R5cGU6CisKKyAgICAgICAgICAgICAgICBjbGFzcyBFbnVtQmlu
ZGluZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9saXN0ZW5lcik6
CisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90eXBlWyJlbnVtIl0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICMgVE9ETzogZG9jCisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCJuYW1lc3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoanNvbl90eXBlWyJpZCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZCgiIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51bV9pdGVtIGlu
IGVudW06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBlbnVtX2l0
ZW0ucmVwbGFjZSgnLScsICdfJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCJjb25zdCBjaGFyKiBjb25zdCAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoQ2FwaXRhbGl6ZXIudXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihpdGVt
X2NfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiID0g
XCIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoZW51bV9pdGVt
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlwiO1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIn0gLy8gbmFtZXNwYWNlICIpCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGpzb25fdHlwZVsiaWQiXSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlxuXG4iKQorCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEVudW1CaW5kaW5nCisgICAgICAgICAgICBlbHNlOgorCisgICAgICAgICAg
ICAgICAgY2xhc3MgUGxhaW5TdHJpbmc6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQs
IGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgImRlc2NyaXB0
aW9uIiBpbiBqc29uX3R5cGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZCgiLyogIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGpz
b25fdHlwZVsiZGVzY3JpcHRpb24iXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCIgKi9cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCJ0eXBlZGVmIFN0cmluZyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChqc29uX3R5cGVbImlkIl0pCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCI7XG5cbiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWluU3RyaW5nCisKKyAgICAgICAg
ZWxpZiBqc29uX3R5cGVbInR5cGUiXSA9PSAib2JqZWN0IjoKKyAgICAgICAgICAgIGlmICJwcm9w
ZXJ0aWVzIiBpbiBqc29uX3R5cGU6CisKKyAgICAgICAgICAgICAgICBjbGFzcyBDbGFzc0JpbmRp
bmc6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAg
ICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndhcmRfbGlzdGVuZXIpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RPOiBkb2MKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoImNsYXNzICIpCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
c19uYW1lID0ganNvbl90eXBlWyJpZCJdCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKCJwdWJsaWM6XG4iKQorCisgICAgICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0aWVzID0ganNvbl90eXBlWyJwcm9wZXJ0aWVzIl0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1haW5fcHJvcGVydGllcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bF9wcm9wZXJ0aWVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHByb3Bl
cnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIm9wdGlvbmFsIiBpbiBwIGFu
ZCBwWyJvcHRpb25hbCJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bF9wcm9wZXJ0aWVzLmFwcGVuZChwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGllcy5hcHBlbmQo
cCkKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgKKyIiIiAgICBlbnVt
IHsKKyAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCisiIiIpCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlX2VudW1faXRlbXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
bGVuKG1haW5fcHJvcGVydGllcykgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBtYWluX3Byb3BlcnRp
ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9IENhcGl0YWxp
emVyLmNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0aF91bmRlcnNjb3JlcyhwWyJuYW1lIl0p
ICsgIl9TRVQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRl
bXMuYXBwZW5kKGl0ZW1fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgiICAgICAgICAlcyA9IDEgPDwgJXMsXG4iICUgKGl0ZW1fbmFtZSwgcG9zKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxfZmllbGRzX3NldF92YWx1ZSA9ICIoIiArICgiIHwgIi5qb2luKHN0
YXRlX2VudW1faXRlbXMpKSArICIpIgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfZmllbGRzX3NldF92YWx1ZSA9ICIwIgorCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKAorIiIiICAgICAgICBBTExfRklF
TERTX1NFVCA9ICVzCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFz
cyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8JXM+IHB0cikKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyAlczsKKyAgICBwdWJsaWM6CisiIiIgJSAoYWxsX2Zp
ZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBwb3MgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBt
YWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0g
cHJvcFsibmFtZSJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUg
PSByZXNvbHZlX3BhcmFtX3Jhd190eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiIiIKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyksIHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygiJXMiLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPCVzPigpOworICAgICAgICB9CisiIiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9jX3Bh
cmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwg
cHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBl
LmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX25hbWUsIHN0YXRlX2VudW1faXRlbXNbcG9zXSkpCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKCIiIgorICAgICAgICBvcGVyYXRvciBSZWZQdHI8JXM+JiAo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPCVzPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPCVzPiAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gUmVmUHRyPCVzPigqdGhpcyk7CisgICAgICAgIH0KKyAgICB9OworCisiIiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICUgKGNsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNs
YXNzX25hbWUpKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAg
LypcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5h
cHBlbmQoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpjcmVhdGUoKSIgJSAoY2xhc3Nf
bmFtZSwgY2xhc3NfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBt
YWluX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgiXG4gICAgICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nh
c2VfdG9fdXBwZXIocHJvcFsibmFtZSJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoIjtcbiAgICAgKi9cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoCisiIiIgICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyAlcygpKSk7CisgICAgfQorIiIiICUgY2xhc3NfbmFtZSkKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIHByb3AgaW4gb3B0aW9uYWxfcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUocHJvcCwg
Y29udGV4dF9kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJf
bmFtZSA9ICJzZXQlcyIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHBy
b3BbIm5hbWUiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJc
biAgICB2b2lkICVzIiAlIHNldHRlcl9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoIiglcyB2YWx1ZSlcbiIgJSBwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJh
bV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAge1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgIHRoaXMtPnNl
dCVzKFwiJXNcIiwgdmFsdWUpO1xuIiAlIChwYXJhbV9yYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUo
KSwgcHJvcFsibmFtZSJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIgICAgfVxuIikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNldHRlcl9u
YW1lIGluIElOU1BFQ1RPUl9PQkpFQ1RfU0VUVEVSX05BTUVTOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0Ojol
cztcblxuIiAlIHNldHRlcl9uYW1lKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCJ9O1xuXG4iKQorICAgICAgICAgICAgICAgIHJldHVybiBDbGFzc0JpbmRpbmcKKyAg
ICAgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbk9iamVjdEJpbmRp
bmc6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAg
ICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndhcmRfbGlzdGVuZXIpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgIyBOby1vcAorICAgICAgICAgICAgICAgICAgICAgICAg
cGFzcworICAgICAgICAgICAgICAgIHJldHVybiBQbGFpbk9iamVjdEJpbmRpbmcKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZVsidHlw
ZSJdKQorCisgICAgICAgICAgICBjbGFzcyBSYXdUeXBlc0JpbmRpbmc6CisgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxk
ZXIob3V0cHV0LCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgIyBOby1v
cAorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXNC
aW5kaW5nCiAKIAogY2xhc3MgVHlwZURhdGEob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwganNvbl90eXBlLCBqc29uX2RvbWFpbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25f
dHlwZSwganNvbl9kb21haW4sIGRvbWFpbl9kYXRhKToKICAgICAgICAgc2VsZi5qc29uX3R5cGVf
ID0ganNvbl90eXBlCiAgICAgICAgIHNlbGYuanNvbl9kb21haW5fID0ganNvbl9kb21haW4KKyAg
ICAgICAgc2VsZi5kb21haW5fZGF0YV8gPSBkb21haW5fZGF0YQogCi0gICAgICAgIGlmICJ0eXBl
IiBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAgICBqc29uX3R5cGVfbmFtZSA9IGpzb25fdHlwZVsi
dHlwZSJdCi0gICAgICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChqc29uX3R5cGVfbmFt
ZSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgaWYgInR5cGUiIG5vdCBpbiBqc29uX3R5cGU6CiAg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCisKKyAgICAgICAganNv
bl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUiXQorICAgICAgICByYXdfdHlwZSA9IFJhd1R5
cGVzLmdldChqc29uX3R5cGVfbmFtZSkKICAgICAgICAgc2VsZi5yYXdfdHlwZV8gPSByYXdfdHlw
ZQorICAgICAgICBzZWxmLmJpbmRpbmdfID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9mb3JfbmFtZWRf
dHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGUsIGpzb25fZG9tYWluWyJkb21haW4iXSkKIAogICAg
IGRlZiBnZXRfcmF3X3R5cGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXwog
CisgICAgZGVmIGdldF9iaW5kaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5iaW5kaW5n
XworCisKK2NsYXNzIERvbWFpbkRhdGE6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fZG9t
YWluKToKKyAgICAgICAgc2VsZi5qc29uX2RvbWFpbiA9IGpzb25fZG9tYWluCisgICAgICAgIHNl
bGYudHlwZXNfID0gW10KKworICAgIGRlZiBhZGRfdHlwZShzZWxmLCB0eXBlX2RhdGEpOgorICAg
ICAgICBzZWxmLnR5cGVzXy5hcHBlbmQodHlwZV9kYXRhKQorCisgICAgZGVmIG5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluWyJkb21haW4iXQorCisgICAgZGVmIHR5
cGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50eXBlc18KKwogCiBjbGFzcyBUeXBlTWFw
OgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGkpOgogICAgICAgICBzZWxmLm1hcF8gPSB7fQor
ICAgICAgICBzZWxmLmRvbWFpbnNfID0gW10KICAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGFw
aVsiZG9tYWlucyJdOgogICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9t
YWluIl0KIAogICAgICAgICAgICAgZG9tYWluX21hcCA9IHt9CiAgICAgICAgICAgICBzZWxmLm1h
cF9bZG9tYWluX25hbWVdID0gZG9tYWluX21hcAogCisgICAgICAgICAgICBkb21haW5fZGF0YSA9
IERvbWFpbkRhdGEoanNvbl9kb21haW4pCisgICAgICAgICAgICBzZWxmLmRvbWFpbnNfLmFwcGVu
ZChkb21haW5fZGF0YSkKKwogICAgICAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoK
ICAgICAgICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBlcyJdOgog
ICAgICAgICAgICAgICAgICAgICB0eXBlX25hbWUgPSBqc29uX3R5cGVbImlkIl0KLSAgICAgICAg
ICAgICAgICAgICAgdHlwZV9kYXRhID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29uX2RvbWFpbikK
KyAgICAgICAgICAgICAgICAgICAgdHlwZV9kYXRhID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29u
X2RvbWFpbiwgZG9tYWluX2RhdGEpCiAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBbdHlw
ZV9uYW1lXSA9IHR5cGVfZGF0YQorICAgICAgICAgICAgICAgICAgICBkb21haW5fZGF0YS5hZGRf
dHlwZSh0eXBlX2RhdGEpCisKKyAgICBkZWYgZG9tYWlucyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuZG9tYWluc18KIAogICAgIGRlZiBnZXQoc2VsZiwgZG9tYWluX25hbWUsIHR5cGVfbmFt
ZSk6CiAgICAgICAgIHJldHVybiBzZWxmLm1hcF9bZG9tYWluX25hbWVdW3R5cGVfbmFtZV0KQEAg
LTQyNSw2ICs3MjEsMzAgQEAganNvbl9hcGkgPSBqc29uLmxvYWRzKGpzb25fc3RyaW5nKQogCiAK
IGNsYXNzIFRlbXBsYXRlczoKKyAgICBkZWYgZ2V0X3RoaXNfc2NyaXB0X3BhdGhfKGFic29sdXRl
X3BhdGgpOgorICAgICAgICBhYnNvbHV0ZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKGFic29sdXRl
X3BhdGgpCisgICAgICAgIGNvbXBvbmVudHMgPSBbXQorCisgICAgICAgIGRlZiBmaWxsX3JlY3Vy
c2l2ZShwYXRoX3BhcnQsIGRlcHRoKToKKyAgICAgICAgICAgIGlmIGRlcHRoIDw9IDAgb3IgcGF0
aF9wYXJ0ID09ICcvJzoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGZpbGxf
cmVjdXJzaXZlKG9zLnBhdGguZGlybmFtZShwYXRoX3BhcnQpLCBkZXB0aCAtIDEpCisgICAgICAg
ICAgICBjb21wb25lbnRzLmFwcGVuZChvcy5wYXRoLmJhc2VuYW1lKHBhdGhfcGFydCkpCisKKyAg
ICAgICAgIyBUeXBpY2FsIHBhdGggaXMgL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisgICAgICAgICMgTGV0J3MgdGFrZSA0IGNvbXBvbmVudHMgZnJv
bSB0aGUgcmVhbCBwYXRoIHRoZW4uCisgICAgICAgIGZpbGxfcmVjdXJzaXZlKGFic29sdXRlX3Bh
dGgsIDQpCisKKyAgICAgICAgcmV0dXJuICIvIi5qb2luKGNvbXBvbmVudHMpCisKKyAgICBmaWxl
X2hlYWRlcl8gPSAoIi8vIEZpbGUgaXMgZ2VuZXJhdGVkIGJ5ICVzXG5cbiIgJSBnZXRfdGhpc19z
Y3JpcHRfcGF0aF8oc3lzLmFyZ3ZbMF0pICsKKyIiIi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisiIiIpCisKKworCiAgICAgZnJvbnRlbmRf
ZG9tYWluX2NsYXNzID0gc3RyaW5nLlRlbXBsYXRlKAogIiIiICAgIGNsYXNzICRkb21haW5DbGFz
c05hbWUgewogICAgIHB1YmxpYzoKQEAgLTQ2NiwyMyArNzg2LDI0IEBAICRjb2RlICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKIH0KICIiIikKIAotICAgIGZyb250ZW5kX2ggPSBz
dHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLSNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRfaAorICAgIGZyb250
ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIiNpZm5kZWYgSW5zcGVj
dG9yRnJvbnRlbmRfaAogI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZF9oCiAKKyNpbmNsdWRlICJJ
bnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5zcGVj
dG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci1jbGFzcyBJbnNwZWN0
b3JPYmplY3Q7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCituYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIgeworJHt0eXBlQnVpbGRlcnN9Cit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgor
CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRnJvbnRl
bmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CkBAIC00OTcsMTAgKzgxOCw4IEBAICR7Zmll
bGREZWNsYXJhdGlvbnN9fTsKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9o
KQogIiIiKQogCi0gICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jaWZuZGVmIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKyAgICBiYWNrZW5kX2ggPSBzdHJpbmcuVGVtcGxh
dGUoZmlsZV9oZWFkZXJfICsKKyIiIiNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJf
aAogI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgpAQCAtNTcwLDEwICs4ODksOCBAQCAkZmllbGREZWNsYXJhdGlvbnMKIAog
IiIiKQogCi0gICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQorICAgIGJhY2tl
bmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCkBAIC05
MDEsMTAgKzEyMTgsOCBAQCBib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb21t
YW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcgogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCiAiIiIpCiAKLSAgICBmcm9udGVuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUo
IiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLQorICAgIGZyb250ZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKwor
IiIiCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5o
IgpAQCAtOTMxLDkgKzEyNDYsOCBAQCAkbWV0aG9kcwogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCiAiIiIpCiAKLSAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgICAgYmFj
a2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKworIiIiCiAKICRkZWxlZ2F0
ZXMKICRldmVudEFyZ3MKQEAgLTk2OSw5ICsxMjgzLDEyIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAg
ICBiYWNrZW5kX2ZvcndhcmRfbGlzdCA9IFtdCiAgICAgYmFja2VuZF9pbmNsdWRlX2xpc3QgPSBb
XQogICAgIGZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCisgICAgdHlwZV9idWls
ZGVyX2ZyYWdtZW50cyA9IFtdCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGdvKCk6Cisg
ICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFwKQorCiAgICAgICAgIGZvciBq
c29uX2RvbWFpbiBpbiBqc29uX2FwaVsiZG9tYWlucyJdOgogICAgICAgICAgICAgZG9tYWluX25h
bWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KICAgICAgICAgICAgIGRvbWFpbl9uYW1lX2xvd2Vy
ID0gZG9tYWluX25hbWUubG93ZXIoKQpAQCAtMTE1NSw2ICsxNDcyLDI0IEBAIGNsYXNzIEdlbmVy
YXRvcjoKIAogICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19pbml0aWFsaXplcl9saXN0LmFw
cGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoXCIlcy4lc1wiLCBbJXNdLCAl
cyk7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSwganNfcGFyYW1ldGVyc190
ZXh0LCBqc19yZXBseV9saXN0KSkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vz
c190eXBlcyh0eXBlX21hcCk6CisgICAgICAgIG91dHB1dCA9IEdlbmVyYXRvci50eXBlX2J1aWxk
ZXJfZnJhZ21lbnRzCisKKyAgICAgICAgY2xhc3MgRm9yd2FyZExpc3RlbmVyOgorICAgICAgICAg
ICAgcGFzcworCisgICAgICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6
CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJuYW1lc3BhY2UgIikKKyAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoZG9tYWluX2RhdGEubmFtZSgpKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgiIHtcbiIpCisgICAgICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5cGVz
KCk6CisgICAgICAgICAgICAgICAgdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkuZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyKG91dHB1dCwgRm9yd2FyZExpc3RlbmVyKQorCisgICAgICAgICAgICBvdXRwdXQu
YXBwZW5kKCJ9IC8vICIpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGRvbWFpbl9kYXRhLm5h
bWUoKSkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlxuIikKKwogR2VuZXJhdG9yLmdvKCkK
IAogYmFja2VuZF9oX2ZpbGUgPSBvcGVuKG91dHB1dF9oZWFkZXJfZGlybmFtZSArICIvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaCIsICJ3IikKQEAgLTExNjgsNyArMTUwMyw4IEBAIGJhY2tl
bmRfanNfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcyIsICJ3IikKIAogZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVu
ZF9oLnN1YnN0aXR1dGUoTm9uZSwKICAgICAgICAgIGZpZWxkRGVjbGFyYXRpb25zPWpvaW4oR2Vu
ZXJhdG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLCAiIiksCi0gICAgICAgICBkb21haW5D
bGFzc0xpc3Q9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLCAiIikp
KQorICAgICAgICAgZG9tYWluQ2xhc3NMaXN0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFp
bl9jbGFzc19saW5lcywgIiIpLAorICAgICAgICAgdHlwZUJ1aWxkZXJzPWpvaW4oR2VuZXJhdG9y
LnR5cGVfYnVpbGRlcl9mcmFnbWVudHMsICIiKSkpCiAKIGJhY2tlbmRfaF9maWxlLndyaXRlKFRl
bXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAogICAgIGNvbnN0cnVjdG9ySW5pdD1q
b2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggNjIxMDRhZjZlZWQy
OTkyY2I2YzAzNjdkMDg0YTk4N2ViYzQxYjQ1OS4uN2U5NTNhNDhmZDg1NjQzMjljODcxOGQwNTVl
MThjYzAwODc2ZDY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaApAQCAtMjA1LDggKzIwNSwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQogCi1wcml2YXRlOgorcHJvdGVj
dGVkOgogICAgIEluc3BlY3Rvck9iamVjdCgpOworCitwcml2YXRlOgogICAgIERpY3Rpb25hcnkg
bV9kYXRhOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fb3JkZXI7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117952</attachid>
            <date>2011-12-05 16:27:13 -0800</date>
            <delta_ts>2011-12-08 12:02:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72835-20111206042711.patch</filename>
            <type>text/plain</type>
            <size>21895</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU1M2JhOGFkNGY5Yjhi
NWQ3MDk3YTBkNzkyOTk3Y2I5YmVkOGU5Ni4uN2Y3NDJmM2I3NjhmNGVjZGI3YzFiMjIxMjIwZDQx
Y2M3ZjYxNGY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTEyLTA2ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbcHJvdG9jb2xdIGdlbmVyYXRlIEMrKyBjbGFzc2VzIGZvciBwcm90b2NvbCBKU09OIG5hbWVk
IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCisKKyAgICAgICAg
RXh0ZW5kcyBweXRob24gZ2VuZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIE1ha2VzIGNv
bnN0cnVjdG9yIGluIEluc3BlY3Rvck9iamVjdCBwdWJsaWMuCisKKyAgICAgICAgKiBpbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg6CisKIDIwMTEtMTItMDUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBNYWtlIExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQ6OmZsdXNo
TGF5ZXJzIGluZGljYXRlIHdoZXRoZXIgdGhlIGZsdXNoIHdhcyBzdWNjZXNzZnVsIG9yIG5vdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQppbmRleCA5YTZlMTVhOGJmNGRkYzNhOTljMmUxY2U5MjU2YWUwOGI5ZTdkMzBiLi44NDE2YWE2
YTFiN2M5YjAzMjE5ODA0NzQ3NGY5Yzc2ZjhiZmY2MmE4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtMTA0LDYgKzEwNCwx
MiBAQCBkZWZpbmVzX21hcCA9IHBhcnNlX2RlZmluZXMoYXJnX29wdGlvbnMuZGVmaW5lcykKIAog
Y2xhc3MgQ2FwaXRhbGl6ZXI6CiAgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb3dlcl9jYW1l
bF9jYXNlX3RvX3VwcGVyKHN0cik6CisgICAgICAgIGlmIGxlbihzdHIpID4gMCBhbmQgc3RyWzBd
LmlzbG93ZXIoKToKKyAgICAgICAgICAgIHN0ciA9IHN0clswXS51cHBlcigpICsgc3RyWzE6XQor
ICAgICAgICByZXR1cm4gc3RyCisKKyAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHVwcGVyX2Nh
bWVsX2Nhc2VfdG9fbG93ZXIoc3RyKToKICAgICAgICAgcG9zID0gMAogICAgICAgICB3aGlsZSBw
b3MgPCBsZW4oc3RyKSBhbmQgc3RyW3Bvc10uaXN1cHBlcigpOgpAQCAtMTIwLDYgKzEyNiw0MyBA
QCBjbGFzcyBDYXBpdGFsaXplcjoKICAgICAgICAgc3RyID0gcG9zc2libGVfYWJicmV2aWF0aW9u
Lmxvd2VyKCkgKyBzdHJbcG9zOl0KICAgICAgICAgcmV0dXJuIHN0cgogCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjYW1lbF9jYXNlX3RvX2NhcGl0YWxpemVkX3dpdGhfdW5kZXJzY29yZXMo
c3RyKToKKyAgICAgICAgaWYgbGVuKHN0cikgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzdHIK
KyAgICAgICAgb3V0cHV0ID0gQ2FwaXRhbGl6ZXIuc3BsaXRfY2FtZWxfY2FzZV8oc3RyKQorICAg
ICAgICByZXR1cm4gIl8iLmpvaW4ob3V0cHV0KS51cHBlcigpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIHNwbGl0X2NhbWVsX2Nhc2VfKHN0cik6CisgICAgICAgIG91dHB1dCA9IFtdCisg
ICAgICAgIHBvc19iZWluZyA9IDAKKyAgICAgICAgcG9zID0gMQorICAgICAgICBoYXNfb25lbGV0
dGVyID0gRmFsc2UKKyAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHN0cik6CisgICAgICAgICAgICBp
ZiBzdHJbcG9zXS5pc3VwcGVyKCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJb
cG9zX2JlaW5nOnBvc10udXBwZXIoKSkKKyAgICAgICAgICAgICAgICBpZiBwb3MgLSBwb3NfYmVp
bmcgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgaGFzX29uZWxldHRlciA9IFRydWUKKyAgICAg
ICAgICAgICAgICBwb3NfYmVpbmcgPSBwb3MKKyAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAg
IG91dHB1dC5hcHBlbmQoc3RyW3Bvc19iZWluZzpdKQorICAgICAgICBpZiBoYXNfb25lbGV0dGVy
OgorICAgICAgICAgICAgYXJyYXlfcG9zID0gMAorICAgICAgICAgICAgd2hpbGUgYXJyYXlfcG9z
IDwgbGVuKG91dHB1dCkgLSAxOgorICAgICAgICAgICAgICAgIGlmIGxlbihvdXRwdXRbYXJyYXlf
cG9zXSkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9zX2VuZCA9IGFycmF5X3Bv
cyArIDEKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgYXJyYXlfcG9zX2VuZCA8IGxlbihvdXRw
dXQpIGFuZCBsZW4ob3V0cHV0W2FycmF5X3Bvc19lbmRdKSA9PSAxOgorICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyYXlfcG9zX2VuZCArPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGFycmF5
X3Bvc19lbmQgLSBhcnJheV9wb3MgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2li
bGVfYWJicmV2aWF0aW9uID0gIiIuam9pbihvdXRwdXRbYXJyYXlfcG9zOmFycmF5X3Bvc19lbmRd
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcG9zc2libGVfYWJicmV2aWF0aW9uLnVwcGVy
KCkgaW4gQ2FwaXRhbGl6ZXIuQUJCUkVWSUFUSU9OOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dFthcnJheV9wb3M6YXJyYXlfcG9zX2VuZF0gPSBbcG9zc2libGVfYWJicmV2aWF0
aW9uXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcnJheV9wb3MgPSBhcnJheV9wb3NfZW5kIC0gMQorICAgICAgICAgICAgICAgIGFy
cmF5X3BvcyArPSAxCisgICAgICAgIHJldHVybiBvdXRwdXQKKwogICAgIEFCQlJFVklBVElPTiA9
IGZyb3plbnNldChbIlhIUiIsICJET00iLCAiQ1NTIl0pCiAKIApAQCAtMTg2LDYgKzIyOSw4IEBA
IGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50
CiAgICAgICAgIGVsaWYganNvbl90eXBlID09ICJudW1iZXIiOgogICAgICAgICAgICAgcmV0dXJu
IFJhd1R5cGVzLk51bWJlcgorICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYW55IjoKKyAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5BbnkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlOiAlcyIgJSBqc29uX3R5cGUpCiAKQEAgLTIwMSw3
ICsyNDYsNyBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgIGNsYXNzIFN0cmluZyhCYXNl
VHlwZSk6CiAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlw
ZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKLSAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUg
PT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5
cGUuRVZFTlQgb3IgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCiAgICAgICAgICAgICBlbHNl
OgogICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQpAQCAtMjk2LDcgKzM0
MSw3IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgY2xhc3MgT2JqZWN0KEJhc2VUeXBl
KToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgotICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQ
YXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5F
VkVOVCBvciBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVUOgogICAg
ICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKICAgICAgICAgICAgIGVsc2U6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCkBAIC0zMjIsNiArMzY3LDM1
IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFy
YW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0g
Q1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IikKIAorICAgIGNsYXNzIEFu
eShCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFy
YW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFt
X3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UIG9yIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLlRZUEVf
QlVJTERFUl9PVVRQVVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5
cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUo
KToKKyAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCisKKyAgICAgICAgZ2V0X3NldHRlcl9uYW1l
ID0gZ2V0X2dldHRlcl9uYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYg
Z2V0X2NfaW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yVmFsdWU6
OmNyZWF0ZSgpIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9qc19i
aW5kX3R5cGUoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQor
CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzX2V2ZW50X3BhcmFtX2NoZWNr
X29wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9wbGFpbl9j
X3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IikKKyAgICAgICAgX3Jl
Zl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiIpCisKICAg
ICBjbGFzcyBBcnJheShCYXNlVHlwZSk6CiAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICBk
ZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKQEAgLTM1OCwz
OCArNDMyLDI1NiBAQCBjbGFzcyBQYXJhbVR5cGUob2JqZWN0KToKICAgICBJTlBVVCA9ICJpbnB1
dCIKICAgICBPVVRQVVQgPSAib3V0cHV0IgogICAgIEVWRU5UID0gImV2ZW50IgorICAgIFRZUEVf
QlVJTERFUl9PVVRQVVQgPSAidHlwZUJ1aWxkZXJPdXRwdXQiCisKKyMgQ29sbGVjdGlvbiBvZiBJ
bnNwZWN0b3JPYmplY3QgY2xhc3MgbWV0aG9kcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgb3Zlcmxv
YWRlZCBpbiBnZW5lcmF0ZWQgY2xhc3MuCisjIFdlIG11c3QgZXhwbGljaXRseSBpbXBvcnQgYWxs
IG92ZXJsb2FkZWQgbWV0aG9kcyBvciB0aGV5IHdvbid0IGJlIGF2YWlsYWJsZSB0byB1c2VyLgor
SU5TUEVDVE9SX09CSkVDVF9TRVRURVJfTkFNRVMgPSBmcm96ZW5zZXQoWyJzZXRWYWx1ZSIsICJz
ZXRCb29sZWFuIiwgInNldE51bWJlciIsICJzZXRTdHJpbmciLCAic2V0VmFsdWUiLCAic2V0T2Jq
ZWN0IiwgInNldEFycmF5Il0pCisKKworY2xhc3MgVHlwZUJpbmRpbmdzOgorICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgY3JlYXRlX2Zvcl9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlw
ZSwgY29udGV4dF9kb21haW5fbmFtZSk6CisgICAgICAgIGlmIGpzb25fdHlwZVsidHlwZSJdID09
ICJzdHJpbmciOgorICAgICAgICAgICAgaWYgImVudW0iIGluIGpzb25fdHlwZToKKworICAgICAg
ICAgICAgICAgIGNsYXNzIEVudW1CaW5kaW5nOgorICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0
cHV0LCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gPSBq
c29uX3R5cGVbImVudW0iXQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RPOiBkb2MKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIm5hbWVzcGFjZSAiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChqc29uX3R5cGVbImlkIl0pCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIge1xuIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoImNvbnN0IGNoYXIqIGNvbnN0ICIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChDYXBpdGFsaXplci51cHBlcl9j
YW1lbF9jYXNlX3RvX2xvd2VyKGl0ZW1fY19uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kKCIgPSBcIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZChlbnVtX2l0ZW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgiXCI7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgifSAvLyBuYW1lc3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoanNvbl90eXBlWyJpZCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgiXG5cbiIpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gRW51bUJpbmRpbmcKKyAgICAgICAg
ICAgIGVsc2U6CisKKyAgICAgICAgICAgICAgICBjbGFzcyBQbGFpblN0cmluZzoKKyAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJh
dGVfdHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIGpzb25fdHlwZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIvKiAiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoanNvbl90eXBlWyJkZXNjcmlwdGlvbiJdKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAqL1xuIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoInR5cGVkZWYgU3RyaW5nICIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGpzb25fdHlwZVsiaWQiXSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoIjtcblxuIikKKyAgICAgICAgICAgICAgICByZXR1cm4g
UGxhaW5TdHJpbmcKKworICAgICAgICBlbGlmIGpzb25fdHlwZVsidHlwZSJdID09ICJvYmplY3Qi
OgorICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25fdHlwZToKKworICAgICAgICAg
ICAgICAgIGNsYXNzIENsYXNzQmluZGluZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1
dCwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGRv
YworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiY2xhc3MgIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBqc29uX3R5cGVbImlkIl0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qge1xuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoInB1YmxpYzpcbiIpCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBqc29uX3R5cGVbInByb3BlcnRpZXMi
XQorICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wcm9wZXJ0aWVzID0gW10KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsX3Byb3BlcnRpZXMgPSBbXQorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIHAgaW4gcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAib3B0aW9uYWwiIGluIHAgYW5kIHBbIm9wdGlvbmFsIl06CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsX3Byb3BlcnRpZXMuYXBwZW5kKHApCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFpbl9wcm9wZXJ0aWVzLmFwcGVuZChwKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKAorIiIiICAgIGVudW0geworICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKKyIi
IikKKworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcyA9IFtdCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBsZW4obWFpbl9wcm9wZXJ0aWVzKSA+IDA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciBwIGluIG1haW5fcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6ZXIuY2FtZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRo
X3VuZGVyc2NvcmVzKHBbIm5hbWUiXSkgKyAiX1NFVCIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICAgICVzID0gMSA8PCAlcyxc
biIgJSAoaXRlbV9uYW1lLCBwb3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3MgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9maWVsZHNfc2V0X3ZhbHVl
ID0gIigiICsgKCIgfCAiLmpvaW4oc3RhdGVfZW51bV9pdGVtcykpICsgIikiCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9maWVs
ZHNfc2V0X3ZhbHVlID0gIjAiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoCisiIiIgICAgICAgIEFMTF9GSUVMRFNfU0VUID0gJXMKKyAgICB9OworCisgICAgdGVtcGxh
dGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwlcz4gcHRy
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzICVzOworICAg
IHB1YmxpYzoKKyIiIiAlIChhbGxfZmllbGRzX3NldF92YWx1ZSwgY2xhc3NfbmFtZSwgY2xhc3Nf
bmFtZSkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBwcm9wIGluIG1haW5fcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wWyJuYW1lIl0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUocHJvcCwgY29u
dGV4dF9kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIiIgorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJXM+JiBzZXQlcyglcyB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICVzKSwgcHJvcGVy
dHlfJXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldCVzKCIlcyIsIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JXM+KCk7CisgICAgICAgIH0KKyIi
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNbcG9zXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9j
YXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09V
VFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVfZW51bV9pdGVtc1twb3NdLCBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfbmFtZSwgc3Rh
dGVfZW51bV9pdGVtc1twb3NdKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyAr
PSAxCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiIiCisgICAgICAg
IG9wZXJhdG9yIFJlZlB0cjwlcz4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JXM+Kj4oJm1fcmVzdWx0
KTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8JXM+ICgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8JXM+KCp0aGlzKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyIiIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAoY2xhc3NfbmFtZSwgY2xh
c3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoIiAgICAvKlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoIiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6XG4iKQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0g
JXM6OmNyZWF0ZSgpIiAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBwcm9wIGluIG1haW5fcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJcbiAgICAgKiAgICAgLnNldCVzKC4uLikiICUgQ2Fw
aXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wWyJuYW1lIl0pKQorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiO1xuICAgICAqL1xuIikKKworICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgKKyIiIiAgICBzdGF0aWMgQnVpbGRlcjxO
T19GSUVMRFNfU0VUPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9f
RklFTERTX1NFVD4oYWRvcHRSZWYobmV3ICVzKCkpKTsKKyAgICB9CisiIiIgJSBjbGFzc19uYW1l
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBvcHRpb25hbF9wcm9wZXJ0
aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2
ZV9wYXJhbV9yYXdfdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldHRlcl9uYW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2Vy
X2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcFsibmFtZSJdKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoIlxuICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBh
cmFtX3Jhd190eXBlLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQ
VVQsIEZhbHNlKS5nZXRfdGV4dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoIiAgICB7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5h
cHBlbmQoIiAgICAgICAgdGhpcy0+c2V0JXMoXCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3Jh
d190eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0pKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICB9XG4iKQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgc2V0dGVyX25hbWUgaW4gSU5TUEVDVE9SX09CSkVDVF9TRVRURVJfTkFN
RVM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICB1
c2luZyBJbnNwZWN0b3JPYmplY3Q6OiVzO1xuXG4iICUgc2V0dGVyX25hbWUpCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIn07XG5cbiIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIENsYXNzQmluZGluZworICAgICAgICAgICAgZWxzZToKKworICAgICAgICAgICAgICAg
IGNsYXNzIFBsYWluT2JqZWN0QmluZGluZzoKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKG91dHB1
dCwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vLW9wCisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWlu
T2JqZWN0QmluZGluZworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmF3X3R5cGUgPSBSYXdU
eXBlcy5nZXQoanNvbl90eXBlWyJ0eXBlIl0pCisKKyAgICAgICAgICAgIGNsYXNzIFJhd1R5cGVz
QmluZGluZzoKKyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAg
ZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndhcmRfbGlzdGVuZXIpOgorICAg
ICAgICAgICAgICAgICAgICAjIE5vLW9wCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlc0JpbmRpbmcKIAogCiBjbGFzcyBUeXBlRGF0YShvYmplY3Qp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwganNvbl90eXBlLCBqc29uX2RvbWFpbiwgZG9tYWluX2RhdGEpOgog
ICAgICAgICBzZWxmLmpzb25fdHlwZV8gPSBqc29uX3R5cGUKICAgICAgICAgc2VsZi5qc29uX2Rv
bWFpbl8gPSBqc29uX2RvbWFpbgorICAgICAgICBzZWxmLmRvbWFpbl9kYXRhXyA9IGRvbWFpbl9k
YXRhCiAKLSAgICAgICAgaWYgInR5cGUiIGluIGpzb25fdHlwZToKLSAgICAgICAgICAgIGpzb25f
dHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KLSAgICAgICAgICAgIHJhd190eXBlID0gUmF3
VHlwZXMuZ2V0KGpzb25fdHlwZV9uYW1lKQotICAgICAgICBlbHNlOgorICAgICAgICBpZiAidHlw
ZSIgbm90IGluIGpzb25fdHlwZToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93
biB0eXBlIikKKworICAgICAgICBqc29uX3R5cGVfbmFtZSA9IGpzb25fdHlwZVsidHlwZSJdCisg
ICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9uYW1lKQogICAgICAgICBz
ZWxmLnJhd190eXBlXyA9IHJhd190eXBlCisgICAgICAgIHNlbGYuYmluZGluZ18gPSBUeXBlQmlu
ZGluZ3MuY3JlYXRlX2Zvcl9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwZSwganNvbl9k
b21haW5bImRvbWFpbiJdKQogCiAgICAgZGVmIGdldF9yYXdfdHlwZShzZWxmKToKICAgICAgICAg
cmV0dXJuIHNlbGYucmF3X3R5cGVfCiAKKyAgICBkZWYgZ2V0X2JpbmRpbmcoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLmJpbmRpbmdfCisKKworY2xhc3MgRG9tYWluRGF0YToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwganNvbl9kb21haW4pOgorICAgICAgICBzZWxmLmpzb25fZG9tYWluID0g
anNvbl9kb21haW4KKyAgICAgICAgc2VsZi50eXBlc18gPSBbXQorCisgICAgZGVmIGFkZF90eXBl
KHNlbGYsIHR5cGVfZGF0YSk6CisgICAgICAgIHNlbGYudHlwZXNfLmFwcGVuZCh0eXBlX2RhdGEp
CisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuanNvbl9kb21haW5b
ImRvbWFpbiJdCisKKyAgICBkZWYgdHlwZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR5
cGVzXworCiAKIGNsYXNzIFR5cGVNYXA6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwaSk6CiAg
ICAgICAgIHNlbGYubWFwXyA9IHt9CisgICAgICAgIHNlbGYuZG9tYWluc18gPSBbXQogICAgICAg
ICBmb3IganNvbl9kb21haW4gaW4gYXBpWyJkb21haW5zIl06CiAgICAgICAgICAgICBkb21haW5f
bmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQogCiAgICAgICAgICAgICBkb21haW5fbWFwID0g
e30KICAgICAgICAgICAgIHNlbGYubWFwX1tkb21haW5fbmFtZV0gPSBkb21haW5fbWFwCiAKKyAg
ICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluRGF0YShqc29uX2RvbWFpbikKKyAgICAgICAg
ICAgIHNlbGYuZG9tYWluc18uYXBwZW5kKGRvbWFpbl9kYXRhKQorCiAgICAgICAgICAgICBpZiAi
dHlwZXMiIGluIGpzb25fZG9tYWluOgogICAgICAgICAgICAgICAgIGZvciBqc29uX3R5cGUgaW4g
anNvbl9kb21haW5bInR5cGVzIl06CiAgICAgICAgICAgICAgICAgICAgIHR5cGVfbmFtZSA9IGpz
b25fdHlwZVsiaWQiXQotICAgICAgICAgICAgICAgICAgICB0eXBlX2RhdGEgPSBUeXBlRGF0YShq
c29uX3R5cGUsIGpzb25fZG9tYWluKQorICAgICAgICAgICAgICAgICAgICB0eXBlX2RhdGEgPSBU
eXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluLCBkb21haW5fZGF0YSkKICAgICAgICAgICAg
ICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9kYXRhCisgICAgICAgICAgICAg
ICAgICAgIGRvbWFpbl9kYXRhLmFkZF90eXBlKHR5cGVfZGF0YSkKKworICAgIGRlZiBkb21haW5z
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kb21haW5zXwogCiAgICAgZGVmIGdldChzZWxm
LCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKICAgICAgICAgcmV0dXJuIHNlbGYubWFwX1tkb21h
aW5fbmFtZV1bdHlwZV9uYW1lXQpAQCAtNDI1LDYgKzcxNywzMCBAQCBqc29uX2FwaSA9IGpzb24u
bG9hZHMoanNvbl9zdHJpbmcpCiAKIAogY2xhc3MgVGVtcGxhdGVzOgorICAgIGRlZiBnZXRfdGhp
c19zY3JpcHRfcGF0aF8oYWJzb2x1dGVfcGF0aCk6CisgICAgICAgIGFic29sdXRlX3BhdGggPSBv
cy5wYXRoLmFic3BhdGgoYWJzb2x1dGVfcGF0aCkKKyAgICAgICAgY29tcG9uZW50cyA9IFtdCisK
KyAgICAgICAgZGVmIGZpbGxfcmVjdXJzaXZlKHBhdGhfcGFydCwgZGVwdGgpOgorICAgICAgICAg
ICAgaWYgZGVwdGggPD0gMCBvciBwYXRoX3BhcnQgPT0gJy8nOgorICAgICAgICAgICAgICAgIHJl
dHVybgorICAgICAgICAgICAgZmlsbF9yZWN1cnNpdmUob3MucGF0aC5kaXJuYW1lKHBhdGhfcGFy
dCksIGRlcHRoIC0gMSkKKyAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG9zLnBhdGguYmFz
ZW5hbWUocGF0aF9wYXJ0KSkKKworICAgICAgICAjIFR5cGljYWwgcGF0aCBpcyAvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyAgICAgICAgIyBMZXQn
cyB0YWtlIDQgY29tcG9uZW50cyBmcm9tIHRoZSByZWFsIHBhdGggdGhlbi4KKyAgICAgICAgZmls
bF9yZWN1cnNpdmUoYWJzb2x1dGVfcGF0aCwgNCkKKworICAgICAgICByZXR1cm4gIi8iLmpvaW4o
Y29tcG9uZW50cykKKworICAgIGZpbGVfaGVhZGVyXyA9ICgiLy8gRmlsZSBpcyBnZW5lcmF0ZWQg
YnkgJXNcblxuIiAlIGdldF90aGlzX3NjcmlwdF9wYXRoXyhzeXMuYXJndlswXSkgKworIiIiLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyIi
IikKKworCisKICAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUoCiAi
IiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFtZSB7CiAgICAgcHVibGljOgpAQCAtNDY2LDIzICs3
ODIsMjQgQEAgJGNvZGUgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogfQogIiIi
KQogCi0gICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiBJbnNwZWN0
b3JGcm9udGVuZF9oCisgICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRl
cl8gKworIiIiI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZF9oCiAjZGVmaW5lIEluc3BlY3RvckZy
b250ZW5kX2gKIAorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgPFBsYXRm
b3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CiAKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7Ciske3R5cGVCdWlsZGVyc30KK30gLy8g
bmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKIHB1Ymxp
YzoKICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKQEAg
LTQ5NywxMCArODE0LDggQEAgJHtmaWVsZERlY2xhcmF0aW9uc319OwogI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvckZyb250ZW5kX2gpCiAiIiIpCiAKLSAgICBiYWNrZW5kX2ggPSBzdHJpbmcu
VGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLSNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAorICAgIGJh
Y2tlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKworIiIiI2lmbmRlZiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyX2gKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC01NzAsMTAgKzg4NSw4IEBA
ICRmaWVsZERlY2xhcmF0aW9ucwogCiAiIiIpCiAKLSAgICBiYWNrZW5kX2NwcCA9IHN0cmluZy5U
ZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotCisgICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFk
ZXJfICsKKyIiIgogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaCIKQEAgLTkwMSwxMCArMTIxNCw4IEBAIGJvb2wgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3Ry
aW5nKiByCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICIiIikKIAotICAgIGZyb250ZW5k
X2NwcCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCisgICAgZnJvbnRlbmRfY3BwID0gc3RyaW5nLlRl
bXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCkBAIC05MzEsOSArMTI0Miw4IEBAICRtZXRob2RzCiAj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICIiIikKIAotICAgIGJhY2tlbmRfanMgPSBzdHJp
bmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKyAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVh
ZGVyXyArCisiIiIKIAogJGRlbGVnYXRlcwogJGV2ZW50QXJncwpAQCAtOTY5LDkgKzEyNzksMTIg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGJhY2tlbmRfZm9yd2FyZF9saXN0ID0gW10KICAgICBi
YWNrZW5kX2luY2x1ZGVfbGlzdCA9IFtdCiAgICAgZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9s
aXN0ID0gW10KKyAgICB0eXBlX2J1aWxkZXJfZnJhZ21lbnRzID0gW10KIAogICAgIEBzdGF0aWNt
ZXRob2QKICAgICBkZWYgZ28oKToKKyAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXModHlw
ZV9tYXApCisKICAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06
CiAgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQogICAgICAg
ICAgICAgZG9tYWluX25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCkBAIC0xMTU1LDYg
KzE0NjgsMjQgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2pzX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZChcIiVzLiVzXCIsIFslc10sICVzKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFu
ZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQsIGpzX3JlcGx5X2xpc3QpKQogCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBwcm9jZXNzX3R5cGVzKHR5cGVfbWFwKToKKyAgICAgICAgb3V0cHV0
ID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVudHMKKworICAgICAgICBjbGFzcyBGb3J3
YXJkTGlzdGVuZXI6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIGRvbWFpbl9kYXRh
IGluIHR5cGVfbWFwLmRvbWFpbnMoKToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIm5hbWVz
cGFjZSAiKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChkb21haW5fZGF0YS5uYW1lKCkpCisg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIge1xuIikKKyAgICAgICAgICAgIGZvciB0eXBlX2Rh
dGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKKyAgICAgICAgICAgICAgICB0eXBlX2RhdGEuZ2V0
X2JpbmRpbmcoKS5nZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBGb3J3YXJkTGlzdGVuZXIp
CisKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIn0gLy8gIikKKyAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoZG9tYWluX2RhdGEubmFtZSgpKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgi
XG4iKQorCiBHZW5lcmF0b3IuZ28oKQogCiBiYWNrZW5kX2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hl
YWRlcl9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIiwgInciKQpAQCAt
MTE2OCw3ICsxNDk5LDggQEAgYmFja2VuZF9qc19maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5h
bWUgKyAiL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIiwgInciKQogCiBmcm9udGVuZF9oX2ZpbGUu
d3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAogICAgICAgICAgZmll
bGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMs
ICIiKSwKLSAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9k
b21haW5fY2xhc3NfbGluZXMsICIiKSkpCisgICAgICAgICBkb21haW5DbGFzc0xpc3Q9am9pbihH
ZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLCAiIiksCisgICAgICAgICB0eXBl
QnVpbGRlcnM9am9pbihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50cywgIiIpKSkKIAog
YmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUs
CiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3Jf
aW5pdF9saXN0LCAiXG4iKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaAppbmRleCA2MjEwNGFmNmVlZDI5OTJjYjZjMDM2N2QwODRhOTg3ZWJjNDFiNDU5Li43ZTk1
M2E0OGZkODU2NDMyOWM4NzE4ZDA1NWUxOGNjMDA4NzZkNjk4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0yMDUsOCArMjA1LDEwIEBAIHB1YmxpYzoK
ICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5iZWdpbigp
OyB9CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmVuZCgp
OyB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yT2JqZWN0KCk7CisKK3By
aXZhdGU6CiAgICAgRGljdGlvbmFyeSBtX2RhdGE7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9vcmRl
cjsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118440</attachid>
            <date>2011-12-08 12:02:36 -0800</date>
            <delta_ts>2011-12-09 00:33:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72835-20111209000234.patch</filename>
            <type>text/plain</type>
            <size>22147</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU1M2JhOGFkNGY5Yjhi
NWQ3MDk3YTBkNzkyOTk3Y2I5YmVkOGU5Ni4uMjM1ZDU0YzUyZTU3M2Y1MTZhMmRkMTcxOTk1ZWYx
ZTAyZWI1ZGRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTEyLTA5ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbcHJvdG9jb2xdIGdlbmVyYXRlIEMrKyBjbGFzc2VzIGZvciBwcm90b2NvbCBKU09OIG5hbWVk
IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjgzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAgICBFeHRlbmRzIHB5
dGhvbiBnZW5lcmF0b3IgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgTWFrZXMgY29uc3RydWN0b3Ig
aW4gSW5zcGVjdG9yT2JqZWN0IHB1YmxpYy4KKworICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aDoKKwogMjAxMS0xMi0wNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudDo6Zmx1c2hMYXllcnMgaW5k
aWNhdGUgd2hldGhlciB0aGUgZmx1c2ggd2FzIHN1Y2Nlc3NmdWwgb3Igbm90CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IDlh
NmUxNWE4YmY0ZGRjM2E5OWMyZTFjZTkyNTZhZTA4YjllN2QzMGIuLjliYjZjNGRmZjMyNjZiODQy
NjQ0NDhjNzAyM2IwMGU0MWQ5YjEyY2MgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0xMDQsNiArMTA0LDEyIEBAIGRlZmlu
ZXNfbWFwID0gcGFyc2VfZGVmaW5lcyhhcmdfb3B0aW9ucy5kZWZpbmVzKQogCiBjbGFzcyBDYXBp
dGFsaXplcjoKICAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvd2VyX2NhbWVsX2Nhc2VfdG9f
dXBwZXIoc3RyKToKKyAgICAgICAgaWYgbGVuKHN0cikgPiAwIGFuZCBzdHJbMF0uaXNsb3dlcigp
OgorICAgICAgICAgICAgc3RyID0gc3RyWzBdLnVwcGVyKCkgKyBzdHJbMTpdCisgICAgICAgIHJl
dHVybiBzdHIKKworICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgdXBwZXJfY2FtZWxfY2FzZV90
b19sb3dlcihzdHIpOgogICAgICAgICBwb3MgPSAwCiAgICAgICAgIHdoaWxlIHBvcyA8IGxlbihz
dHIpIGFuZCBzdHJbcG9zXS5pc3VwcGVyKCk6CkBAIC0xMjAsNiArMTI2LDQzIEBAIGNsYXNzIENh
cGl0YWxpemVyOgogICAgICAgICBzdHIgPSBwb3NzaWJsZV9hYmJyZXZpYXRpb24ubG93ZXIoKSAr
IHN0cltwb3M6XQogICAgICAgICByZXR1cm4gc3RyCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0aF91bmRlcnNjb3JlcyhzdHIpOgorICAg
ICAgICBpZiBsZW4oc3RyKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHN0cgorICAgICAgICBv
dXRwdXQgPSBDYXBpdGFsaXplci5zcGxpdF9jYW1lbF9jYXNlXyhzdHIpCisgICAgICAgIHJldHVy
biAiXyIuam9pbihvdXRwdXQpLnVwcGVyKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
c3BsaXRfY2FtZWxfY2FzZV8oc3RyKToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgcG9z
X2JlaW5nID0gMAorICAgICAgICBwb3MgPSAxCisgICAgICAgIGhhc19vbmVsZXR0ZXIgPSBGYWxz
ZQorICAgICAgICB3aGlsZSBwb3MgPCBsZW4oc3RyKToKKyAgICAgICAgICAgIGlmIHN0cltwb3Nd
LmlzdXBwZXIoKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cltwb3NfYmVpbmc6
cG9zXS51cHBlcigpKQorICAgICAgICAgICAgICAgIGlmIHBvcyAtIHBvc19iZWluZyA9PSAxOgor
ICAgICAgICAgICAgICAgICAgICBoYXNfb25lbGV0dGVyID0gVHJ1ZQorICAgICAgICAgICAgICAg
IHBvc19iZWluZyA9IHBvcworICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgb3V0cHV0LmFw
cGVuZChzdHJbcG9zX2JlaW5nOl0pCisgICAgICAgIGlmIGhhc19vbmVsZXR0ZXI6CisgICAgICAg
ICAgICBhcnJheV9wb3MgPSAwCisgICAgICAgICAgICB3aGlsZSBhcnJheV9wb3MgPCBsZW4ob3V0
cHV0KSAtIDE6CisgICAgICAgICAgICAgICAgaWYgbGVuKG91dHB1dFthcnJheV9wb3NdKSA9PSAx
OgorICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kID0gYXJyYXlfcG9zICsgMQorICAg
ICAgICAgICAgICAgICAgICB3aGlsZSBhcnJheV9wb3NfZW5kIDwgbGVuKG91dHB1dCkgYW5kIGxl
bihvdXRwdXRbYXJyYXlfcG9zX2VuZF0pID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBh
cnJheV9wb3NfZW5kICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJyYXlfcG9zX2VuZCAt
IGFycmF5X3BvcyA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZV9hYmJyZXZp
YXRpb24gPSAiIi5qb2luKG91dHB1dFthcnJheV9wb3M6YXJyYXlfcG9zX2VuZF0pCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBwb3NzaWJsZV9hYmJyZXZpYXRpb24udXBwZXIoKSBpbiBDYXBp
dGFsaXplci5BQkJSRVZJQVRJT046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
W2FycmF5X3BvczphcnJheV9wb3NfZW5kXSA9IFtwb3NzaWJsZV9hYmJyZXZpYXRpb25dCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
cmF5X3BvcyA9IGFycmF5X3Bvc19lbmQgLSAxCisgICAgICAgICAgICAgICAgYXJyYXlfcG9zICs9
IDEKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCiAgICAgQUJCUkVWSUFUSU9OID0gZnJvemVuc2V0
KFsiWEhSIiwgIkRPTSIsICJDU1MiXSkKIAogCkBAIC0xODYsNiArMjI5LDggQEAgY2xhc3MgUmF3
VHlwZXMob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKICAgICAgICAg
ZWxpZiBqc29uX3R5cGUgPT0gIm51bWJlciI6CiAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
TnVtYmVyCisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJhbnkiOgorICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLkFueQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJVbmtub3duIHR5cGU6ICVzIiAlIGpzb25fdHlwZSkKIApAQCAtMjAxLDcgKzI0Niw3IEBA
IGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgY2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKICAg
ICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFy
YW1fdHlwZSwgb3B0aW9uYWwpOgotICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5
cGUuRVZFTlQ6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVCBv
ciBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVUOgogICAgICAgICAg
ICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCkBAIC0yOTYsNyArMzQxLDcgQEAgY2xh
c3MgUmF3VHlwZXMob2JqZWN0KToKICAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgogICAgICAg
ICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90
eXBlLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5F
VkVOVDoKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UIG9yIHBh
cmFtX3R5cGUgPT0gUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKQEAgLTMyMiw2ICszNjcsMzUgQEAgY2xhc3Mg
UmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBl
KCJQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQogCisgICAgY2xhc3MgQW55KEJhc2VUeXBl
KToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQ
YXJhbVR5cGUuRVZFTlQgb3IgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09V
VFBVVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgorICAgICAg
ICAgICAgcmV0dXJuICJWYWx1ZSIKKworICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0
dGVyX25hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19pbml0
aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCki
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgp
OgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwo
KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQ
YXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9
IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IikKKwogICAgIGNsYXNzIEFy
cmF5KEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19w
YXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgpAQCAtMzU4LDM4ICs0MzIsMjU2
IEBAIGNsYXNzIFBhcmFtVHlwZShvYmplY3QpOgogICAgIElOUFVUID0gImlucHV0IgogICAgIE9V
VFBVVCA9ICJvdXRwdXQiCiAgICAgRVZFTlQgPSAiZXZlbnQiCisgICAgVFlQRV9CVUlMREVSX09V
VFBVVCA9ICJ0eXBlQnVpbGRlck91dHB1dCIKKworIyBDb2xsZWN0aW9uIG9mIEluc3BlY3Rvck9i
amVjdCBjbGFzcyBtZXRob2RzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBvdmVybG9hZGVkIGluIGdl
bmVyYXRlZCBjbGFzcy4KKyMgV2UgbXVzdCBleHBsaWNpdGx5IGltcG9ydCBhbGwgb3ZlcmxvYWRl
ZCBtZXRob2RzIG9yIHRoZXkgd29uJ3QgYmUgYXZhaWxhYmxlIHRvIHVzZXIuCitJTlNQRUNUT1Jf
T0JKRUNUX1NFVFRFUl9OQU1FUyA9IGZyb3plbnNldChbInNldFZhbHVlIiwgInNldEJvb2xlYW4i
LCAic2V0TnVtYmVyIiwgInNldFN0cmluZyIsICJzZXRWYWx1ZSIsICJzZXRPYmplY3QiLCAic2V0
QXJyYXkiXSkKKworCitjbGFzcyBUeXBlQmluZGluZ3M6CisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBjcmVhdGVfZm9yX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBlLCBjb250ZXh0
X2RvbWFpbl9uYW1lKToKKyAgICAgICAgaWYganNvbl90eXBlWyJ0eXBlIl0gPT0gInN0cmluZyI6
CisgICAgICAgICAgICBpZiAiZW51bSIgaW4ganNvbl90eXBlOgorCisgICAgICAgICAgICAgICAg
Y2xhc3MgRW51bUJpbmRpbmc6CisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihvdXRwdXQsIGZvcndh
cmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9IGpzb25fdHlwZVsi
ZW51bSJdCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGRvYworICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgibmFtZXNwYWNlICIpCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKGpzb25fdHlwZVsiaWQiXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoIiB7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IGVudW1faXRlbSBpbiBlbnVtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY19u
YW1lID0gZW51bV9pdGVtLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZCgiY29uc3QgY2hhciogY29uc3QgIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2Vf
dG9fbG93ZXIoaXRlbV9jX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoIiA9IFwiIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKGVudW1faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCJcIjtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJ9IC8vIG5h
bWVzcGFjZSAiKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChqc29uX3R5
cGVbImlkIl0pCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJcblxuIikK
KworICAgICAgICAgICAgICAgIHJldHVybiBFbnVtQmluZGluZworICAgICAgICAgICAgZWxzZToK
KworICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluU3RyaW5nOgorICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1
aWxkZXIob3V0cHV0LCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICJkZXNjcmlwdGlvbiIgaW4ganNvbl90eXBlOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoIi8qICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZChqc29uX3R5cGVbImRlc2NyaXB0aW9uIl0pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICovXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZCgidHlwZWRlZiBTdHJpbmcgIikKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoanNvbl90eXBlWyJpZCJdKQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZCgiO1xuXG4iKQorICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0cmlu
ZworCisgICAgICAgIGVsaWYganNvbl90eXBlWyJ0eXBlIl0gPT0gIm9iamVjdCI6CisgICAgICAg
ICAgICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBlOgorCisgICAgICAgICAgICAgICAgY2xh
c3MgQ2xhc3NCaW5kaW5nOgorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBmb3J3YXJk
X2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogZG9jCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJjbGFzcyAiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NfbmFtZSA9IGpzb25fdHlwZVsiaWQiXQorICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZChjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZCgiIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7XG4iKQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgicHVibGljOlxuIikKKworICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydGllcyA9IGpzb25fdHlwZVsicHJvcGVydGllcyJdCisgICAgICAg
ICAgICAgICAgICAgICAgICBtYWluX3Byb3BlcnRpZXMgPSBbXQorICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWxfcHJvcGVydGllcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgcCBpbiBwcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJvcHRp
b25hbCIgaW4gcCBhbmQgcFsib3B0aW9uYWwiXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWxfcHJvcGVydGllcy5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3Byb3Bl
cnRpZXMuYXBwZW5kKHApCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
CisiIiIgICAgZW51bSB7CisgICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAorIiIiKQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zID0gW10KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGxlbihtYWluX3Byb3BlcnRpZXMpID4gMDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3MgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4g
bWFpbl9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX25h
bWUgPSBDYXBpdGFsaXplci5jYW1lbF9jYXNlX3RvX2NhcGl0YWxpemVkX3dpdGhfdW5kZXJzY29y
ZXMocFsibmFtZSJdKSArICJfU0VUIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZV9lbnVtX2l0ZW1zLmFwcGVuZChpdGVtX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiAgICAgICAgJXMgPSAxIDw8ICVzLFxuIiAlIChpdGVt
X25hbWUsIHBvcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUgPSAiKCIgKyAo
IiB8ICIuam9pbihzdGF0ZV9lbnVtX2l0ZW1zKSkgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFs
dWUgPSAiMCIKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgKKyIiIiAg
ICAgICAgQUxMX0ZJRUxEU19TRVQgPSAlcworICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPCVzPiBwdHIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgJXM7CisgICAgcHVibGljOgor
IiIiICUgKGFsbF9maWVsZHNfc2V0X3ZhbHVlLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMAorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BfbmFtZSA9IHByb3BbIm5hbWUiXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtX3Jhd190eXBlID0gcmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShwcm9wLCBjb250ZXh0X2RvbWFp
bl9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiIiCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlcz4mIHNldCVzKCVzIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJXMpLCBwcm9wZXJ0eV8lc19hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKKyAgICAgICAgfQorIiIiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJSAoc3RhdGVfZW51bV9pdGVtc1twb3NdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBw
ZXIocHJvcF9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdf
dHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxz
ZSkuZ2V0X3RleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVt
X2l0ZW1zW3Bvc10sIHByb3BfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbV9yYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcF9uYW1lLCBzdGF0ZV9lbnVtX2l0
ZW1zW3Bvc10pKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKKworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiIiIKKyAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPCVzPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjwlcz4qPigmbV9yZXN1bHQpOworICAgICAg
ICB9CisKKyAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjwlcz4gKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjwlcz4oKnRoaXMpOworICAgICAgICB9CisgICAgfTsKKwor
IiIiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lLCBj
bGFzc19uYW1lLCBjbGFzc19uYW1lKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZCgiICAgIC8qXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgiICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjpcbiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwdXQuYXBwZW5kKCIgICAgICogUmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRl
KCkiICUgKGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHByb3AgaW4gbWFpbl9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dC5hcHBlbmQoIlxuICAgICAqICAgICAuc2V0JXMoLi4uKSIgJSBDYXBpdGFsaXplci5s
b3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BbIm5hbWUiXSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKCI7XG4gICAgICovXG4iKQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKAorIiIiICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgJXMoKSkpOworICAgIH0KKyIiIiAlIGNsYXNzX25hbWUpCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIG9wdGlvbmFsX3Byb3BlcnRpZXM6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSByZXNvbHZlX3BhcmFtX3Jh
d190eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2Fz
ZV90b191cHBlcihwcm9wWyJuYW1lIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgcGFyYW1fcmF3X3R5
cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2Up
LmdldF90ZXh0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgi
ICAgIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAg
ICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsIHZhbHVlKTtcbiIgJSAocGFyYW1fcmF3X3R5cGUuZ2V0
X3NldHRlcl9uYW1lKCksIHByb3BbIm5hbWUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiICAgIH1cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBzZXR0ZXJfbmFtZSBpbiBJTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIHVzaW5nIEluc3Bl
Y3Rvck9iamVjdDo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKKworICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZCgifTtcblxuIikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2xh
c3NCaW5kaW5nCisgICAgICAgICAgICBlbHNlOgorCisgICAgICAgICAgICAgICAgY2xhc3MgUGxh
aW5PYmplY3RCaW5kaW5nOgorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIob3V0cHV0LCBmb3J3YXJk
X2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTm8tb3AKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RCaW5k
aW5nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChq
c29uX3R5cGVbInR5cGUiXSkKKworICAgICAgICAgICAgY2xhc3MgUmF3VHlwZXNCaW5kaW5nOgor
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2VuZXJh
dGVfdHlwZV9idWlsZGVyKG91dHB1dCwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAg
ICAgICAgICMgTm8tb3AKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzQmluZGluZwogCiAKIGNsYXNzIFR5cGVEYXRhKG9iamVjdCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIGpzb25fdHlwZSwganNvbl9kb21haW4pOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluLCBkb21haW5fZGF0YSk6CiAgICAgICAgIHNl
bGYuanNvbl90eXBlXyA9IGpzb25fdHlwZQogICAgICAgICBzZWxmLmpzb25fZG9tYWluXyA9IGpz
b25fZG9tYWluCisgICAgICAgIHNlbGYuZG9tYWluX2RhdGFfID0gZG9tYWluX2RhdGEKIAotICAg
ICAgICBpZiAidHlwZSIgaW4ganNvbl90eXBlOgotICAgICAgICAgICAganNvbl90eXBlX25hbWUg
PSBqc29uX3R5cGVbInR5cGUiXQotICAgICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQo
anNvbl90eXBlX25hbWUpCi0gICAgICAgIGVsc2U6CisgICAgICAgIGlmICJ0eXBlIiBub3QgaW4g
anNvbl90eXBlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQor
CisgICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KKyAgICAgICAgcmF3
X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCiAgICAgICAgIHNlbGYucmF3X3R5
cGVfID0gcmF3X3R5cGUKKyAgICAgICAgc2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVh
dGVfZm9yX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBlLCBqc29uX2RvbWFpblsiZG9t
YWluIl0pCiAKICAgICBkZWYgZ2V0X3Jhd190eXBlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5yYXdfdHlwZV8KIAorICAgIGRlZiBnZXRfYmluZGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuYmluZGluZ18KKworCitjbGFzcyBEb21haW5EYXRhOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBqc29uX2RvbWFpbik6CisgICAgICAgIHNlbGYuanNvbl9kb21haW4gPSBqc29uX2RvbWFp
bgorICAgICAgICBzZWxmLnR5cGVzXyA9IFtdCisKKyAgICBkZWYgYWRkX3R5cGUoc2VsZiwgdHlw
ZV9kYXRhKToKKyAgICAgICAgc2VsZi50eXBlc18uYXBwZW5kKHR5cGVfZGF0YSkKKworICAgIGRl
ZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5qc29uX2RvbWFpblsiZG9tYWluIl0K
KworICAgIGRlZiB0eXBlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZXNfCisKIAog
Y2xhc3MgVHlwZU1hcDoKICAgICBkZWYgX19pbml0X18oc2VsZiwgYXBpKToKICAgICAgICAgc2Vs
Zi5tYXBfID0ge30KKyAgICAgICAgc2VsZi5kb21haW5zXyA9IFtdCiAgICAgICAgIGZvciBqc29u
X2RvbWFpbiBpbiBhcGlbImRvbWFpbnMiXToKICAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNv
bl9kb21haW5bImRvbWFpbiJdCiAKICAgICAgICAgICAgIGRvbWFpbl9tYXAgPSB7fQogICAgICAg
ICAgICAgc2VsZi5tYXBfW2RvbWFpbl9uYW1lXSA9IGRvbWFpbl9tYXAKIAorICAgICAgICAgICAg
ZG9tYWluX2RhdGEgPSBEb21haW5EYXRhKGpzb25fZG9tYWluKQorICAgICAgICAgICAgc2VsZi5k
b21haW5zXy5hcHBlbmQoZG9tYWluX2RhdGEpCisKICAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4g
anNvbl9kb21haW46CiAgICAgICAgICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFp
blsidHlwZXMiXToKICAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lID0ganNvbl90eXBlWyJp
ZCJdCi0gICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwg
anNvbl9kb21haW4pCisgICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpz
b25fdHlwZSwganNvbl9kb21haW4sIGRvbWFpbl9kYXRhKQogICAgICAgICAgICAgICAgICAgICBk
b21haW5fbWFwW3R5cGVfbmFtZV0gPSB0eXBlX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgZG9t
YWluX2RhdGEuYWRkX3R5cGUodHlwZV9kYXRhKQorCisgICAgZGVmIGRvbWFpbnMoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLmRvbWFpbnNfCiAKICAgICBkZWYgZ2V0KHNlbGYsIGRvbWFpbl9u
YW1lLCB0eXBlX25hbWUpOgogICAgICAgICByZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9uYW1lXVt0
eXBlX25hbWVdCkBAIC00MjUsNiArNzE3LDMwIEBAIGpzb25fYXBpID0ganNvbi5sb2Fkcyhqc29u
X3N0cmluZykKIAogCiBjbGFzcyBUZW1wbGF0ZXM6CisgICAgZGVmIGdldF90aGlzX3NjcmlwdF9w
YXRoXyhhYnNvbHV0ZV9wYXRoKToKKyAgICAgICAgYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguYWJz
cGF0aChhYnNvbHV0ZV9wYXRoKQorICAgICAgICBjb21wb25lbnRzID0gW10KKworICAgICAgICBk
ZWYgZmlsbF9yZWN1cnNpdmUocGF0aF9wYXJ0LCBkZXB0aCk6CisgICAgICAgICAgICBpZiBkZXB0
aCA8PSAwIG9yIHBhdGhfcGFydCA9PSAnLyc6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgICAgICBmaWxsX3JlY3Vyc2l2ZShvcy5wYXRoLmRpcm5hbWUocGF0aF9wYXJ0KSwgZGVwdGgg
LSAxKQorICAgICAgICAgICAgY29tcG9uZW50cy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShwYXRo
X3BhcnQpKQorCisgICAgICAgICMgVHlwaWNhbCBwYXRoIGlzIC9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorICAgICAgICAjIExldCdzIHRha2UgNCBj
b21wb25lbnRzIGZyb20gdGhlIHJlYWwgcGF0aCB0aGVuLgorICAgICAgICBmaWxsX3JlY3Vyc2l2
ZShhYnNvbHV0ZV9wYXRoLCA0KQorCisgICAgICAgIHJldHVybiAiLyIuam9pbihjb21wb25lbnRz
KQorCisgICAgZmlsZV9oZWFkZXJfID0gKCIvLyBGaWxlIGlzIGdlbmVyYXRlZCBieSAlc1xuXG4i
ICUgZ2V0X3RoaXNfc2NyaXB0X3BhdGhfKHN5cy5hcmd2WzBdKSArCisiIiIvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIiIiKQorCisKKwog
ICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzcyA9IHN0cmluZy5UZW1wbGF0ZSgKICIiIiAgICBjbGFz
cyAkZG9tYWluQ2xhc3NOYW1lIHsKICAgICBwdWJsaWM6CkBAIC00NjYsMjMgKzc4MiwzMyBAQCAk
Y29kZSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiB9CiAiIiIpCiAKLSAgICBm
cm9udGVuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jaWZuZGVmIEluc3BlY3RvckZyb250ZW5k
X2gKKyAgICBmcm9udGVuZF9oID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIj
aWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKICNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRfaAog
CisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwor
CisvLyBCb3RoIEluc3BlY3Rvck9iamVjdCBhbmQgSW5zcGVjdG9yQXJyYXkgbWF5IG9yIG1heSBu
b3QgYmUgZGVjbGFyZWQgYXQgdGhpcyBwb2ludCBhcyBkZWZpbmVkIGJ5IEVOQUJMRURfSU5TUEVD
VE9SLgorLy8gRG91YmxlLWNoZWNrIHdlIGhhdmUgdGhlbSBhdCBsZWFzdCBhcyBmb3J3YXJkIGRl
Y2xhcmF0aW9uLgorY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7
CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKyR7dHlwZUJ1aWxkZXJzfQorfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKIGNsYXNzIElu
c3BlY3RvckZyb250ZW5kIHsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqKTsKQEAgLTQ5NywxMCArODIzLDggQEAgJHtmaWVsZERlY2xhcmF0
aW9uc319OwogI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCiAiIiIpCiAK
LSAgICBiYWNrZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSNpZm5kZWYgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJfaAorICAgIGJhY2tlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hl
YWRlcl8gKworIiIiI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiAjZGVmaW5l
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CkBAIC01NzAsMTAgKzg5NCw4IEBAICRmaWVsZERlY2xhcmF0aW9ucwogCiAiIiIpCiAKLSAg
ICBiYWNrZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCisgICAgYmFja2VuZF9jcHAgPSBz
dHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKKyIiIgogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKQEAgLTkwMSwxMCArMTIy
Myw4IEBAIGJvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKICIiIikKIAotICAgIGZyb250ZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCisgICAg
ZnJvbnRlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCkBAIC05MzEs
OSArMTI1MSw4IEBAICRtZXRob2RzCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICIiIikK
IAotICAgIGJhY2tlbmRfanMgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAgICBiYWNrZW5kX2pzID0g
c3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArCisiIiIKIAogJGRlbGVnYXRlcwogJGV2ZW50
QXJncwpAQCAtOTY5LDkgKzEyODgsMTIgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGJhY2tlbmRf
Zm9yd2FyZF9saXN0ID0gW10KICAgICBiYWNrZW5kX2luY2x1ZGVfbGlzdCA9IFtdCiAgICAgZnJv
bnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10KKyAgICB0eXBlX2J1aWxkZXJfZnJhZ21l
bnRzID0gW10KIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZ28oKToKKyAgICAgICAgR2Vu
ZXJhdG9yLnByb2Nlc3NfdHlwZXModHlwZV9tYXApCisKICAgICAgICAgZm9yIGpzb25fZG9tYWlu
IGluIGpzb25fYXBpWyJkb21haW5zIl06CiAgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25f
ZG9tYWluWyJkb21haW4iXQogICAgICAgICAgICAgZG9tYWluX25hbWVfbG93ZXIgPSBkb21haW5f
bmFtZS5sb3dlcigpCkBAIC0xMTU1LDYgKzE0NzcsMjQgQEAgY2xhc3MgR2VuZXJhdG9yOgogCiAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZChcIiVzLiVzXCIsIFslc10sICVzKTtcbiIgJSAo
ZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQsIGpzX3Jl
cGx5X2xpc3QpKQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX3R5cGVzKHR5
cGVfbWFwKToKKyAgICAgICAgb3V0cHV0ID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVu
dHMKKworICAgICAgICBjbGFzcyBGb3J3YXJkTGlzdGVuZXI6CisgICAgICAgICAgICBwYXNzCisK
KyAgICAgICAgZm9yIGRvbWFpbl9kYXRhIGluIHR5cGVfbWFwLmRvbWFpbnMoKToKKyAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoIm5hbWVzcGFjZSAiKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChkb21haW5fZGF0YS5uYW1lKCkpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIge1xuIikK
KyAgICAgICAgICAgIGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKKyAgICAg
ICAgICAgICAgICB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKS5nZW5lcmF0ZV90eXBlX2J1aWxkZXIo
b3V0cHV0LCBGb3J3YXJkTGlzdGVuZXIpCisKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIn0g
Ly8gIikKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoZG9tYWluX2RhdGEubmFtZSgpKQorICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZCgiXG4iKQorCiBHZW5lcmF0b3IuZ28oKQogCiBiYWNrZW5k
X2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oIiwgInciKQpAQCAtMTE2OCw3ICsxNTA4LDggQEAgYmFja2VuZF9qc19maWxl
ID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIiwg
InciKQogCiBmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3Rp
dHV0ZShOb25lLAogICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuZnJv
bnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKLSAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1q
b2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIiKSkpCisgICAgICAg
ICBkb21haW5DbGFzc0xpc3Q9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xp
bmVzLCAiIiksCisgICAgICAgICB0eXBlQnVpbGRlcnM9am9pbihHZW5lcmF0b3IudHlwZV9idWls
ZGVyX2ZyYWdtZW50cywgIiIpKSkKIAogYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJh
Y2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJh
dG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAiXG4iKSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCA2MjEwNGFmNmVlZDI5OTJjYjZjMDM2
N2QwODRhOTg3ZWJjNDFiNDU5Li43ZTk1M2E0OGZkODU2NDMyOWM4NzE4ZDA1NWUxOGNjMDA4NzZk
Njk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0y
MDUsOCArMjA1LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAg
SW5zcGVjdG9yT2JqZWN0KCk7CisKK3ByaXZhdGU6CiAgICAgRGljdGlvbmFyeSBtX2RhdGE7CiAg
ICAgVmVjdG9yPFN0cmluZz4gbV9vcmRlcjsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118785</attachid>
            <date>2011-12-12 07:29:40 -0800</date>
            <delta_ts>2011-12-12 07:29:40 -0800</delta_ts>
            <desc>Builder usage example</desc>
            <filename>typed-api.patch</filename>
            <type>text/plain</type>
            <size>2855</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
CmluZGV4IDVlNjQxODgwLi5kODU5ZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl
ICJET01XcmFwcGVyVmlzaXRvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5z
dHJ1bWVudGluZ0FnZW50cy5oIgpAQCAtNDgsNiArNDksOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3VzaW5nIFR5cGVCdWlsZGVyOjpNZW1vcnk6OkRPTUdyb3VwOwordXNpbmcgVHlwZUJ1
aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50OworCiBuYW1lc3BhY2UgewogCiBjbGFzcyBDb3VudGVy
VmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyVmlzaXRvciB7CkBAIC02OSwxNiArNzMsMTcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3Jvb3RzLmFkZChyb290Tm9k
ZSk7CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZW50cnkgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBlbnRyeS0+c2V0U3RyaW5nKCJ0aXRsZSIsIHJvb3RO
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSA/IGVsZW1lbnRUaXRsZShzdGF0
aWNfY2FzdDxFbGVtZW50Kj4ocm9vdE5vZGUpKSA6IHJvb3ROb2RlLT5ub2RlTmFtZSgpKTsKKwor
ICAgICAgICBET01Hcm91cDo6QnVpbGRlcjxET01Hcm91cDo6Tk9fRklFTERTX1NFVD4gZG9tR3Jv
dXBCdWlsZGVyMCA9IERPTUdyb3VwOjpjcmVhdGUoKTsKKyAgICAgICAgRE9NR3JvdXA6OkJ1aWxk
ZXI8RE9NR3JvdXA6OlRJVExFX1NFVD4mIGRvbUdyb3VwQnVpbGRlcjIgPSAgZG9tR3JvdXBCdWls
ZGVyMC5zZXRUaXRsZShyb290Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUg
PyBlbGVtZW50VGl0bGUoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHJvb3ROb2RlKSkgOiByb290Tm9k
ZS0+bm9kZU5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxET01Hcm91cD4gZG9tR3JvdXAgPSBjb2xs
ZWN0VHJlZVN0YXRpc3RpY3Mocm9vdE5vZGUsIGRvbUdyb3VwQnVpbGRlcjIpOwogICAgICAgICBp
ZiAocm9vdE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkKLSAgICAgICAg
ICAgIGVudHJ5LT5zZXRTdHJpbmcoImRvY3VtZW50VVJJIiwgc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihyb290Tm9kZSktPmRvY3VtZW50VVJJKCkpOwotICAgICAgICBjb2xsZWN0VHJlZVN0YXRpc3Rp
Y3Mocm9vdE5vZGUsIGVudHJ5LmdldCgpKTsKLSAgICAgICAgbV9jb3VudGVycy0+cHVzaE9iamVj
dChlbnRyeSk7CisgICAgICAgICAgICBkb21Hcm91cC0+c2V0RG9jdW1lbnRVUkkoc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihyb290Tm9kZSktPmRvY3VtZW50VVJJKCkpOworICAgICAgICBtX2NvdW50
ZXJzLT5wdXNoT2JqZWN0KGRvbUdyb3VwKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHZvaWQgY29sbGVjdFRyZWVTdGF0aXN0aWNzKE5vZGUqIHJvb3ROb2RlLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlc3VsdCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01Hcm91cD4gY29sbGVjdFRyZWVT
dGF0aXN0aWNzKE5vZGUqIHJvb3ROb2RlLCBET01Hcm91cDo6QnVpbGRlcjxET01Hcm91cDo6VElU
TEVfU0VUPiYgcmVzdWx0KQogICAgIHsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAg
ICAgICBIYXNoTWFwPFN0cmluZywgaW50PiBuYW1lVG9Db3VudDsKQEAgLTkyLDE0ICs5NywxMyBA
QCBwcml2YXRlOgogCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hpbGRyZW5TdGF0
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPFN0cmlu
ZywgaW50Pjo6aXRlcmF0b3IgaXQgPSBuYW1lVG9Db3VudC5iZWdpbigpOyBpdCAhPSBuYW1lVG9D
b3VudC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bm9kZUNvdW50ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIG5vZGVD
b3VudC0+c2V0U3RyaW5nKCJub2RlTmFtZSIsIGl0LT5maXJzdCk7Ci0gICAgICAgICAgICBub2Rl
Q291bnQtPnNldE51bWJlcigiY291bnQiLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIFJlZlB0
cjxOb2RlQ291bnQ+IG5vZGVDb3VudCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkKKyAgICAgICAgICAg
ICAgICAuc2V0Tm9kZU5hbWUoaXQtPmZpcnN0KQorICAgICAgICAgICAgICAgIC5zZXRDb3VudChp
dC0+c2Vjb25kKTsKICAgICAgICAgICAgIGNoaWxkcmVuU3RhdHMtPnB1c2hPYmplY3Qobm9kZUNv
dW50KTsKICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgY291
bnQpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJub2RlQ291bnQiLCBjaGlsZHJlblN0YXRz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXRTaXplKGNvdW50KS5zZXROb2RlQ291bnQoY2hp
bGRyZW5TdGF0cyk7CiAgICAgfQogCiAgICAgc3RhdGljIFN0cmluZyBub2RlTmFtZShOb2RlKiBu
b2RlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>